文章目录
POST和GET的区别就是注入点位置发生了变化,在浏览器中已经无法直接进行查看与修改。当然可以借助对应的插件可以完成修改任务。
使用BurpSuite进行post请求的抓包
以Sqli-Lab Less11为例。
查看抓的包
将抓到的包发送到repeater模块,就可以进行重复测试了
初步判断sql语句大概为:
select uname,passwd from tbname where uname='$uname' and passwd ='$passwd‘ limit 0,1
这时候,我们就可以通过构造sql语句来进行注入:登陆成功!
使用联合查询进行注入:
使用报错注入进行注入:
以Sqli-Lab Less15为例。
布尔盲注:
然后根据页面的变化进行猜测就可以了
时延查询:
在存在注入点POST提交的参数后加 and if(length(database())>5,sleep(5),null)。如果执行的页面响应时间大于5秒,那么肯定就存在注入,并且对应的SQL语句执行。
之后就一一猜就完了
SQL注入绕过手段
大小写字母绕过
如果程序中设置了过滤关键字,但是过滤过程中并没有对关键字组成进行深入分析过滤,导致只是对整体进行过滤。
例如: and过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。
通过修改关键字内字母大小写来绕过过滤措施。例如:AnD 1=1
and 和 or 还可以转换成符号&&和||
例如:在进行探测当前表的字段数时,使用order by数字进行探测。如果过滤了order,可以使用OrdER来进行绕过。
双写绕过
如果在程序中设置出现关键字之后替换为空,那么SQL注入攻击也不会发生。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了以此替换。就是将关键字替换为对应的空。
例如:可以通过uniunionon这种方式来进行绕过,中间那个union被替换为空,两边的就会自动组成关键字。
编码绕过
可以利用网络中的URL在线编码或者16进制编码,绕过SQL注入的过滤机制。
编码之后,到服务器后mysql会自动解码识别。
空格使用%20表示、%0a换行、%09 tab
例如:less27
内联注释或多行注释绕过
在Mysql中内联注释中的内容可以被当作SQL语句执行。
例如:可以通过uni/**/on这种方式来进行绕过,两边的就会自动组成关键字。
绕过注释被过滤的sql注入
如果注释被过滤,不能成功闭合单引号,我们可以换一种思路利用 or ‘1’=’1闭合单引号。
less23为例: