记一次项目中拿下某oa过程
字数 1183 2025-08-29 22:41:10
某OA系统渗透测试实战教学文档
1. 漏洞发现与利用概述
本教学文档详细记录了对某OA系统的渗透测试过程,涉及前台SQL注入和后台RCE漏洞的发现与利用。
2. 前台SQL注入漏洞
2.1 注入点发现
- 通过百度搜索发现某处前台注入点
- 注入点位于图片加载功能中
2.2 注入点分析
- 系统继承
openapiAction类 - 父类初始化函数中存在关键判断逻辑
2.2.1 访问控制绕过
- 系统使用
openkey进行验证,该值在安装时随机生成,无法预知 - 通过伪造
HTTP_HOST头绕过访问控制$_SERVER['HTTP_HOST']获取的host值在不同中间件中存在差异- 目标系统以IP+端口方式访问,修改host头可绕过
2.3 注入原理
- 参数经过base64解密后直接拼接SQL语句
- 防注入措施在base64解码前执行,导致失效
- 注入点为INSERT语句,无法直接回显
2.4 注入利用
- 使用时间盲注技术
- 使用sqlmap的
--sql-shell功能进行查询 - 查询管理员密码语句:
select pass from [Q]admin where user='admin' limit 1 - 表前缀处理:使用
[Q]代替表前缀,系统会在执行时自动替换
3. 后台RCE漏洞
3.1 漏洞发现
- 参考网上公开的后台RCE文章
- 参数通过
$this->post('name')方式获取
3.2 限制条件
- 输入过滤:
- 过滤单引号
- 数据转化为小写
- 数据长度限制
- 双引号也被过滤
- 无法通过
$_POST[1]方式外部传入
3.3 绕过技术
- 利用
base64_decode函数特性:- 字符串不需要引号包裹也可正常解码
- 字符串结尾的
=会被丢弃 - 示例:
base64_decode('MTIz') == base64_decode(MTIz)
3.4 RCE利用POC
a{};file_put_contents(base64_decode(strtoupper(mti) . strtolower(ud) . strtoupper(h) . strtolower(h0)),base64_decode(strtoupper(xs) . strtolower(k) . strtolower(7)),8);class a
POC说明:
- 使用
file_put_contents写入一句话木马 - 由于长度限制,采用追加方式写入(
8参数) - 字母和数字需要分开处理:
- 不能直接写
strtolower(k7) - 需要写成
strtolower(k) . strtolower(7)
- 不能直接写
- 通过字符串拼接构造base64编码的路径和内容
4. 关键知识点总结
- HTTP Host头伪造:在特定中间件配置下可绕过访问控制
- Base64解码绕过:参数在解码前进行过滤,解码后直接拼接导致注入
- 无回显注入利用:时间盲注技术结合sqlmap的sql-shell功能
- 表前缀处理:使用
[Q]占位符处理动态表前缀 - 严格过滤下的RCE:
- 利用函数特性绕过引号限制
- 字符串分片处理绕过长度和小写转换限制
- 使用追加方式写入文件
5. 防御建议
- 对所有输入参数进行统一过滤,包括解码后的内容
- 使用预编译语句处理SQL查询
- 限制HTTP Host头的可信来源
- 对文件写入操作进行严格权限控制和内容检查
- 禁用危险函数或严格限制其使用场景