【笔记】Web安全:SQL注入

目录

SQL注入绕过手段

大小写绕过

双写绕过

编码绕过

内联注释绕过

POST基于时间和布尔的注入

POST基于时间的注入

POST基于布尔的盲注

Sqlmap安全测试

HTTP Header中的SQL注入

实现方法

Sqlmap安全测试

Cookie注入

实现方法

Sqlmap安全测试

Cookie Base64注入


SQL注入绕过手段

前提:如果程序中设置了关键字过滤,但是并没有对关键字的组成进行分析过滤,即只是整体过滤。例如,如设置了union这个过滤关键字,那么我们可以通过一些方式去实现相关的SQL注入绕过过滤,例如UniOn。

大小写绕过

MYSQL是大小写不敏感的,所以我们可以通过改变关键字的大小写来实现绕过,例如UniOn,AnD,OrdEr等。

双写绕过

如果程序设置了出现关键字之后将其替换为空,我们可以使用双写绕过。例如,

uniunionon

编码绕过

使用编码工具对内容(URL)进行加密,之后在web服务器段会进行解密。

内联注释绕过

在MySQL中内联注释的内容可以被当作SQL语句来执行。

POST基于时间和布尔的注入

注)关于POST和GET请求的区别,参考HTTP POST GET 本质区别详解

POST基于时间的注入

在存在注入点的POST提交参数的后面加上类似and if (length(database())>5,sleep(5),null)的内容,如果执行页面的响应时间大于5秒的话,就说明存在注入,SQL已执行,且数据库的长度大于5。

注)length(database()):数据库名的长度

下面使用burpsuite进行测试

如上图所示,请求体最后一行是post请求的参数,我们在它的后面加上了拼接的SQL语句,实现注入。添加的内容是:

' and (select if (length(database())>5,sleep(5),null)) --%20

从图上右下角可见响应时长超过5秒,说明数据库长度大于5。因此我们可以逐步测试,最终判断出数据库的准确长度,以及表名,字段名,表数据等详细信息。

注)此处的20%代表空格(可以用加号“+”代替),“--”后面需要加上一个空格以注释掉后面的内容。

POST基于布尔的盲注

在存在注入点post提交参数的后面拼接if判断正确或错误的语句,通过得到不同的返回结果,推测数据库的信息。拼接效果如下图所示

多次测试,根据返回结果,我们可以判断出准确的数据库长度等信息。

Sqlmap安全测试

注)Sqlmap常用命令参考:超详细SQLMap使用攻略及技巧分享

python sqlmap.py -r target.txt --technique T -p uname

python sqlmap.py -r target.txt --technique B -p uname

说明:target.txt的内容是http请求体(从burpsuite复制)。--technique T是基于时间的盲注,--technique B是基于布尔的盲注。-p uname指定参数名是uname。

HTTP Header中的SQL注入

如果程序并没有过滤掉http头中的参数,那么我们可以利用这些参数进行SQL注入。

 例如Referer注入和User-Agent注入等。

实现方法

说明:使用MySQL的updatexml函数来爆出想要查询的信息

参考:在调用updatexml显错注入的时候为什么要用concat函数

Sqlmap安全测试

Header中的SQL注入一样可以使用Sqlmap执行,在target.txt的使用*号指定注入位置,然后使用下方命令即可实现。

python sqlmap.py -r target.txt

星号位置

注)同样可以在post提交的参数处拼接updatexml函数来进行SQL注入。使用Sqlmap的话,用-p参数来指定post提交的参数(缩小探测范围以节省时间),命令如下:

python sqlmap.py -r target.txt -p passwd

Cookie注入

如果程序中使用了Cookie传递参数,但是并没有对参数进行过滤操作,就可能会导致SQL注入漏洞。

实现方法

说明:跟之前几个注入方式类似,在Cookie处拼接想要查询的内容。如下图右侧所示,通过使用MySQL的updatexml函数,正确爆出了数据库的版本号。

注)跟之前几个注入方式的burp操作不太一样,因为我们是在图上Cookie的uname处注入,这是一个登录页面,我们需要获取到服务器返回的uname(我自己的推测),所以需要执行下方过程,以获取到跟图上一致的内容(Cookie中包含uname参数):

设置代理(burp端和服务器端)→开启截断→点击【Action】的【send to Repeater】→点击【go】(此时登录成功)→点击【Follow redirection】(跟踪跳转到index页面--本例中)→【Forward】(两次--本例中)

此时可以看到,上图的左边部分的Cookie中带有了uname参数和值。此时就可以在uname处进行注入了。

Sqlmap安全测试

先在target.txt中用*号指定SQL注入的位置,如下图所示:

然后使用如下命令:

python sqlmap.py -r target.txt --level 3 --batch

探测结果如下图所示:

接下来就可以根据其他的Sqlmap语法来实现获取数据库的内容了。

Cookie Base64注入

太烦躁了,先到这吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值