渗透测试之SQL注入(POST型的四种注入手法)、SQL注入绕过手段

  • Post author:
  • Post category:其他


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为例:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述