渗透测试实战(一)
字数 1565 2025-08-25 22:58:20

渗透测试实战教学:从注入到上传漏洞利用

1. 目标发现与初步侦察

  • C段扫描:通过扫描目标C段发现.81服务器开放82端口,运行HTTP服务
  • 服务识别:访问后发现是某文档系统登录页面,无验证码机制
  • 攻击面分析
    • 弱口令爆破可能性
    • SQL注入测试
    • 目录扫描
    • JS文件/接口分析

2. 认证突破技术

2.1 SQL注入利用

  • 注入类型:盲注,但未闭合语句时会返回详细MySQL错误信息
  • 特点
    • 单引号被转义,无法直接利用报错注入
    • 可利用错误日志功能实现回显注入
  • 利用过程
    1. 使用sqlmap自动化探测和利用
    2. 发现非root用户权限
    3. 获取数据库表结构和字段信息
    4. 提取用户凭证用于登录

2.2 错误日志回显注入技术

  • 漏洞原理
    • 系统将未闭合SQL语句的错误信息写入日志
    • 通过getErrorMsg函数从日志中SELECT读取错误信息
    • $row['usr_id']直接使用POST的username参数值
  • 利用方式
    • 构造恶意username参数
    • 错误信息被记录并回显
    • 实现数据提取

3. 源码泄露利用

  • 发现.git目录泄露
  • 使用工具:lijiejie的.git泄露利用脚本
  • 还原源码
    • 初步还原发现部分文件缺失(如project.php)
    • 推荐使用GitTools进行完整commit还原
    • 完整还原可获取最新配置文件和其他关键代码

4. 文件上传漏洞挖掘与利用

4.1 初步上传测试

  • 发现上传点:文档管理系统中的PDF上传功能
  • 绕过尝试
    • 前端校验可绕过
    • 上传PHP文件成功但返回404
  • 文件调用机制
    • 文件名存入数据库
    • 通过参数调用:project.php?fn=1.pdf&file=1.php
    • 文件可能存储在非web目录或路径不可知

4.2 深入上传漏洞利用

发现api.php中的危险函数

move_uploaded_file($_FILES['snapshot']['tmp_name'], $dir .'/'. $filename)

漏洞特征

  • 文件后缀和路径完全可控
  • 只需提供有效的用户名密码和构造的上传数据包

利用障碍

  • 配置文件路径问题:
    • 原Windows路径:c:/wamp/www/webname
    • 实际运行在Linux系统
    • 直接迁移导致路径不匹配

目录穿越尝试

  1. 初始想法:使用../跳转到web根目录
    • Linux中无法跳过不存在的目录
  2. PHP上传特性:
    • ../在PHP上传时反斜线后会被截断
  3. 替代方案:使用..-..-a.php格式尝试

最终解决方案

  1. 还原完整commit获取最新配置
  2. 发现host验证机制:
    • 必须使用域名beauty.xxxx.net访问
    • IP直接访问无法成功上传
  3. 使用..-..-a.php文件名和正确host头成功上传

5. 关键工具与技术总结

  1. .git泄露利用工具

    • lijiejie的exploit脚本(快速但不完整)
    • GitTools(完整还原所有commit)
  2. SQL注入利用

    • sqlmap自动化探测
    • 非常规回显注入技术
  3. 文件上传绕过技术

    • 路径穿越的特殊格式
    • Host头修改绕过
    • 绝对路径与相对路径结合利用

6. 防御建议

  1. 认证层面

    • 实施强密码策略
    • 添加验证码机制
    • 使用预编译语句防御SQL注入
  2. 文件上传

    • 实施严格的白名单校验
    • 固定存储路径,禁止用户控制
    • 随机化存储文件名
  3. 配置安全

    • 迁移环境时检查路径配置
    • 禁止.git等版本控制目录外部访问
    • 错误信息不应对用户可见
  4. 代码安全

    • 避免使用危险函数如move_uploaded_file直接拼接用户输入
    • 实施输入验证和输出编码

7. 扩展思考

  1. 内网渗透可能性

    • 获取shell后可进行内网横向移动
    • Linux代理进入内网可能发现更多漏洞
  2. 漏洞链构建

    • 信息泄露→注入→认证绕过→文件上传
    • 展示了完整攻击链的构建过程
  3. 运维失误利用

    • 环境迁移不彻底
    • 配置不一致
    • 开发/生产环境差异
渗透测试实战教学:从注入到上传漏洞利用 1. 目标发现与初步侦察 C段扫描 :通过扫描目标C段发现 .81 服务器开放82端口,运行HTTP服务 服务识别 :访问后发现是某文档系统登录页面,无验证码机制 攻击面分析 : 弱口令爆破可能性 SQL注入测试 目录扫描 JS文件/接口分析 2. 认证突破技术 2.1 SQL注入利用 注入类型 :盲注,但未闭合语句时会返回详细MySQL错误信息 特点 : 单引号被转义,无法直接利用报错注入 可利用错误日志功能实现回显注入 利用过程 : 使用sqlmap自动化探测和利用 发现非root用户权限 获取数据库表结构和字段信息 提取用户凭证用于登录 2.2 错误日志回显注入技术 漏洞原理 : 系统将未闭合SQL语句的错误信息写入日志 通过 getErrorMsg 函数从日志中SELECT读取错误信息 $row['usr_id'] 直接使用POST的username参数值 利用方式 : 构造恶意username参数 错误信息被记录并回显 实现数据提取 3. 源码泄露利用 发现 .git目录泄露 使用工具 :lijiejie的.git泄露利用脚本 还原源码 : 初步还原发现部分文件缺失(如project.php) 推荐使用GitTools进行完整commit还原 完整还原可获取最新配置文件和其他关键代码 4. 文件上传漏洞挖掘与利用 4.1 初步上传测试 发现上传点 :文档管理系统中的PDF上传功能 绕过尝试 : 前端校验可绕过 上传PHP文件成功但返回404 文件调用机制 : 文件名存入数据库 通过参数调用: project.php?fn=1.pdf&file=1.php 文件可能存储在非web目录或路径不可知 4.2 深入上传漏洞利用 发现api.php中的危险函数 : 漏洞特征 : 文件后缀和路径完全可控 只需提供有效的用户名密码和构造的上传数据包 利用障碍 : 配置文件路径问题: 原Windows路径: c:/wamp/www/webname 实际运行在Linux系统 直接迁移导致路径不匹配 目录穿越尝试 : 初始想法:使用 ../ 跳转到web根目录 Linux中无法跳过不存在的目录 PHP上传特性: ../ 在PHP上传时反斜线后会被截断 替代方案:使用 ..-..-a.php 格式尝试 最终解决方案 : 还原完整commit获取最新配置 发现host验证机制: 必须使用域名 beauty.xxxx.net 访问 IP直接访问无法成功上传 使用 ..-..-a.php 文件名和正确host头成功上传 5. 关键工具与技术总结 .git泄露利用工具 : lijiejie的exploit脚本(快速但不完整) GitTools(完整还原所有commit) SQL注入利用 : sqlmap自动化探测 非常规回显注入技术 文件上传绕过技术 : 路径穿越的特殊格式 Host头修改绕过 绝对路径与相对路径结合利用 6. 防御建议 认证层面 : 实施强密码策略 添加验证码机制 使用预编译语句防御SQL注入 文件上传 : 实施严格的白名单校验 固定存储路径,禁止用户控制 随机化存储文件名 配置安全 : 迁移环境时检查路径配置 禁止.git等版本控制目录外部访问 错误信息不应对用户可见 代码安全 : 避免使用危险函数如 move_uploaded_file 直接拼接用户输入 实施输入验证和输出编码 7. 扩展思考 内网渗透可能性 : 获取shell后可进行内网横向移动 Linux代理进入内网可能发现更多漏洞 漏洞链构建 : 信息泄露→注入→认证绕过→文件上传 展示了完整攻击链的构建过程 运维失误利用 : 环境迁移不彻底 配置不一致 开发/生产环境差异