一次授权的渗透测试
字数 1065 2025-08-05 08:19:06

授权渗透测试实战教学文档

1. 目标侦察与信息收集

1.1 初始目标评估

  • 主站未发现明显可利用点
  • 使用FOFA进行C段查询,发现同C段存在ThinkPHP框架页面

1.2 后台发现与弱口令利用

  • 发现目标后台站点
  • 成功使用弱口令登录后台
  • 后台功能有限,无法直接利用

2. 目录遍历漏洞利用

2.1 发现目录遍历漏洞

  • 目标站点存在目录遍历漏洞
  • 通过遍历目录寻找敏感配置文件

2.2 KindEditor CMS漏洞利用

  • 发现站点使用KindEditor CMS
  • 利用已知漏洞:file_manager_json.php文件存在目录遍历漏洞
  • 漏洞原理:
    $php_path = dirname(__FILE__) . '/';
    $root_path = $php_path . '../attached/';
    
    if (empty($_GET['path'])) {
        $current_path = realpath($root_path) . '/';
        $current_url = $root_url;
        $current_dir_path = '';
        $moveup_dir_path = '';
    }
    
    • attached目录不存在时,realpath($root_path)返回空
    • $current_path变为系统根目录/
    • 绕过../防护,可浏览系统根目录

2.3 构造Payload

  • 通过目录遍历找到站点备份源码
  • 下载源码进行代码审计

3. 代码审计与漏洞发现

3.1 日志记录功能审计

class BaseController extends Controller {
    public function __construct(){
        parent::__construct();
        foreach ($_REQUEST as $key => $value) {
            $canshu .= $key.'='.$value.'&';
        }
        $canshu = trim($canshu,'&');
        addlog(array('url'=>'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$canshu),'api-'.ACTION_NAME,'接口地址:');
        addlog($_REQUEST,'api-'.ACTION_NAME,'接收参数:');
        addlog($_FILES,'api-'.ACTION_NAME,'接收文件');
    }

    function addlog($arr,$name,$description){
        error_log ($description.':'.date('Y-m-d H:i:s').'----'.var_export($arr,true).'
            ',3,"./log/".date('Y-m-d')."-".$name.".php");
    }
}

3.2 漏洞分析

  1. addlog函数将请求信息记录到日志文件
  2. error_log函数将数据写入以.php结尾的文件
  3. 用户输入未经过滤直接写入文件
  4. 日志文件可被解析为PHP代码

3.3 漏洞利用方法

  • 构造恶意请求,将PHP代码写入日志文件
  • 访问日志文件执行任意代码

4. 漏洞利用实战

4.1 构造Payload

/index.php/Api/Base/a?search=<?php phpinfo(); ?>

4.2 利用步骤

  1. 发送构造的恶意请求
  2. 系统生成日志文件,如:./log/2021-06-18-api-a.php
  3. 访问生成的日志文件
  4. PHP代码被执行,显示phpinfo()信息

4.3 验证利用

  • 本地测试确认漏洞存在
  • 成功获取Webshell

5. 防御建议

5.1 针对目录遍历漏洞

  • 禁用不必要的目录浏览功能
  • 对文件路径进行严格校验
  • 确保realpath不会返回根目录

5.2 针对日志记录漏洞

  1. 输入过滤:

    • 对所有用户输入进行严格过滤
    • 禁止特殊字符如<?php
  2. 日志文件处理:

    • 日志文件不应使用.php扩展名
    • 设置日志目录不可执行
    • 限制日志目录的访问权限
  3. 代码改进:

    function addlog($arr, $name, $description) {
        $log_content = htmlspecialchars($description.':'.date('Y-m-d H:i:s').'----'.var_export($arr, true));
        $log_file = "./log/".date('Y-m-d')."-".preg_replace('/[^a-zA-Z0-9_-]/', '', $name).".log";
        error_log($log_content."\n", 3, $log_file);
    }
    

6. 参考资源

7. 总结

本案例展示了从信息收集到最终获取系统权限的完整渗透测试流程,重点利用了:

  1. C段信息收集
  2. 弱口令攻击
  3. 目录遍历漏洞
  4. 不安全的日志记录实现

渗透测试人员应全面了解系统架构,善于将多个小漏洞串联利用,同时开发人员应重视每个看似微小的安全问题。

授权渗透测试实战教学文档 1. 目标侦察与信息收集 1.1 初始目标评估 主站未发现明显可利用点 使用FOFA进行C段查询,发现同C段存在ThinkPHP框架页面 1.2 后台发现与弱口令利用 发现目标后台站点 成功使用弱口令登录后台 后台功能有限,无法直接利用 2. 目录遍历漏洞利用 2.1 发现目录遍历漏洞 目标站点存在目录遍历漏洞 通过遍历目录寻找敏感配置文件 2.2 KindEditor CMS漏洞利用 发现站点使用KindEditor CMS 利用已知漏洞: file_manager_json.php 文件存在目录遍历漏洞 漏洞原理: 当 attached 目录不存在时, realpath($root_path) 返回空 $current_path 变为系统根目录 / 绕过 ../ 防护,可浏览系统根目录 2.3 构造Payload 通过目录遍历找到站点备份源码 下载源码进行代码审计 3. 代码审计与漏洞发现 3.1 日志记录功能审计 3.2 漏洞分析 addlog 函数将请求信息记录到日志文件 error_log 函数将数据写入以 .php 结尾的文件 用户输入未经过滤直接写入文件 日志文件可被解析为PHP代码 3.3 漏洞利用方法 构造恶意请求,将PHP代码写入日志文件 访问日志文件执行任意代码 4. 漏洞利用实战 4.1 构造Payload 4.2 利用步骤 发送构造的恶意请求 系统生成日志文件,如: ./log/2021-06-18-api-a.php 访问生成的日志文件 PHP代码被执行,显示 phpinfo() 信息 4.3 验证利用 本地测试确认漏洞存在 成功获取Webshell 5. 防御建议 5.1 针对目录遍历漏洞 禁用不必要的目录浏览功能 对文件路径进行严格校验 确保 realpath 不会返回根目录 5.2 针对日志记录漏洞 输入过滤: 对所有用户输入进行严格过滤 禁止特殊字符如 <?php 等 日志文件处理: 日志文件不应使用 .php 扩展名 设置日志目录不可执行 限制日志目录的访问权限 代码改进: 6. 参考资源 KindEditor目录遍历漏洞分析 ThinkPHP安全最佳实践 Web应用日志记录安全规范 7. 总结 本案例展示了从信息收集到最终获取系统权限的完整渗透测试流程,重点利用了: C段信息收集 弱口令攻击 目录遍历漏洞 不安全的日志记录实现 渗透测试人员应全面了解系统架构,善于将多个小漏洞串联利用,同时开发人员应重视每个看似微小的安全问题。