渗透测试之通过代码审计打点
字数 1205 2025-08-15 21:32:22

渗透测试之代码审计实战教学文档

一、代码审计概述

代码审计(Code Audit)是通过阅读源代码,找出程序中存在的缺陷或安全隐患的过程。在渗透测试中,当遇到公开漏洞已修复或只有简单登录框等情况时,代码审计往往能打开突破口。

审计价值

  • 甲方SDL建设中的重要环节
  • 渗透测试中挖掘未知漏洞的有效手段
  • 可发现逻辑漏洞等自动化工具难以检测的问题

二、审计思路与方法

1. 常见审计思路

(1) 敏感功能点审计

  • 优点:精准定向挖掘,利用程度高
  • 缺点:命名不规范代码易被忽略

(2) 敏感关键字回溯

  • 优点:快速定位潜在漏洞,高效高质量
  • 缺点:对架构了解不足,逻辑漏洞覆盖不全

(3) 全文通读审计

  • 优点:全面了解架构、数据流和过滤机制
  • 缺点:耗时较长,需要充分时间熟悉代码

2. 审计方法分类

按工具使用划分

  • 工具扫描:使用自动化工具检测
  • 人工审计:完全手动分析
  • 结合方式:工具辅助+人工验证

按数据流向划分

  • 正向审计:从功能入口跟踪到数据处理结束
  • 逆向审计:从危险函数/关键词反推功能入口

三、实战案例解析

案例1:任意文件下载引发的审计链

漏洞发现过程

  1. 发现任意文件下载漏洞
  2. 下载配置文件发现域用户信息
  3. 分析Download.aspx发现Inherits属性指向dll
  4. 下载XXXXXX.Web.dll进行反编译分析

关键代码分析

public void uploadFile() {
    string formStringParamValue = SWFUrlOper.GetFormStringParamValue("path");
    string formStringParamValue2 = SWFUrlOper.GetFormStringParamValue("fn");
    // 无文件内容、后缀过滤
    string text2 = sWFUploadFile.SaveFile(httpPostedFile, formStringParamValue, formStringParamValue2, ref num);
}
  • 无文件类型检查
  • 无内容过滤
  • 直接保存上传文件

利用方式

构造上传表单:

<form name="form" method="post" action="http://xxxx.com/cms/SWFUpload.aspx" 
      enctype="multipart/form-data">
    <input type="file" name="Filedata">
    <input type="submit" name="Submit" value="upload">
</form>

反混淆技术

使用de4dot工具反混淆:

de4dot.exe ADD.dll

支持多种混淆方式:

  • Dotfuscator
  • .NET Reactor
  • Xenocode
  • CryptoObfuscator
  • SmartAssembly等

案例2:开源系统登录绕过+文件上传

系统架构

  • ThinkPHP二次开发
  • MVC分层结构

文件上传分析

private function saveimg($file){
    $uptypes=array('image/jpeg','image/jpg','image/png','image/gif','image/bmp');
    // 仅检查MIME类型
    if(!in_array($file["type"], $uptypes)){
        echo "文件类型不符!".$file["type"];
        return null;
    }
    // 无后缀检查,直接保存
    move_uploaded_file($filename, $destination);
}
  • 仅验证MIME类型
  • 无文件内容检查
  • 无后缀名限制

认证绕过分析

class ComController extends BaseController {
    public function _initialize(){
        $user = cookie('user');
        if(!$user){
            header("Location: {$url}"); exit(0);
        }
        // 允许未认证访问Upload控制器
        $allow_controller_name=array('Upload');
    }
}
  • 认证信息仅从cookie获取
  • Upload控制器被放行
  • 可伪造cookie绕过认证

利用链

  1. 伪造user cookie绕过认证
  2. 访问Upload功能
  3. 上传Webshell获取权限

四、漏洞优先级参考

在渗透测试中,代码审计应关注以下漏洞优先级:

  1. 命令执行
  2. 代码执行
  3. 文件上传
  4. 文件包含
  5. SQL注入
  6. 文件下载
  7. 逻辑漏洞
  8. SSRF
  9. XSS

五、审计必备技能

  1. 漏洞原理:深入理解各类漏洞成因
  2. 编程语言:熟悉常见语言语法和特性
  3. 危险函数:掌握各语言中的危险函数
  4. 协议知识:了解HTTP、数据库协议等
  5. 调试工具
    • 反编译工具:IL Spy、dnSpy
    • 反混淆工具:de4dot
    • IDE:PHPStorm、PyCharm、IDEA等

六、总结

代码审计是渗透测试中获取高权限的有效手段,需要结合正向和逆向审计思路,关注高危漏洞点,善用工具辅助分析。通过本文案例可以看出,即使是简单的漏洞组合也可能形成完整的攻击链,审计时需保持全局视角。

渗透测试之代码审计实战教学文档 一、代码审计概述 代码审计(Code Audit)是通过阅读源代码,找出程序中存在的缺陷或安全隐患的过程。在渗透测试中,当遇到公开漏洞已修复或只有简单登录框等情况时,代码审计往往能打开突破口。 审计价值 甲方SDL建设中的重要环节 渗透测试中挖掘未知漏洞的有效手段 可发现逻辑漏洞等自动化工具难以检测的问题 二、审计思路与方法 1. 常见审计思路 (1) 敏感功能点审计 优点 :精准定向挖掘,利用程度高 缺点 :命名不规范代码易被忽略 (2) 敏感关键字回溯 优点 :快速定位潜在漏洞,高效高质量 缺点 :对架构了解不足,逻辑漏洞覆盖不全 (3) 全文通读审计 优点 :全面了解架构、数据流和过滤机制 缺点 :耗时较长,需要充分时间熟悉代码 2. 审计方法分类 按工具使用划分 工具扫描:使用自动化工具检测 人工审计:完全手动分析 结合方式:工具辅助+人工验证 按数据流向划分 正向审计 :从功能入口跟踪到数据处理结束 逆向审计 :从危险函数/关键词反推功能入口 三、实战案例解析 案例1:任意文件下载引发的审计链 漏洞发现过程 发现任意文件下载漏洞 下载配置文件发现域用户信息 分析Download.aspx发现Inherits属性指向dll 下载XXXXXX.Web.dll进行反编译分析 关键代码分析 无文件类型检查 无内容过滤 直接保存上传文件 利用方式 构造上传表单: 反混淆技术 使用de4dot工具反混淆: 支持多种混淆方式: Dotfuscator .NET Reactor Xenocode CryptoObfuscator SmartAssembly等 案例2:开源系统登录绕过+文件上传 系统架构 ThinkPHP二次开发 MVC分层结构 文件上传分析 仅验证MIME类型 无文件内容检查 无后缀名限制 认证绕过分析 认证信息仅从cookie获取 Upload控制器被放行 可伪造cookie绕过认证 利用链 伪造user cookie绕过认证 访问Upload功能 上传Webshell获取权限 四、漏洞优先级参考 在渗透测试中,代码审计应关注以下漏洞优先级: 命令执行 代码执行 文件上传 文件包含 SQL注入 文件下载 逻辑漏洞 SSRF XSS 五、审计必备技能 漏洞原理 :深入理解各类漏洞成因 编程语言 :熟悉常见语言语法和特性 危险函数 :掌握各语言中的危险函数 协议知识 :了解HTTP、数据库协议等 调试工具 : 反编译工具:IL Spy、dnSpy 反混淆工具:de4dot IDE:PHPStorm、PyCharm、IDEA等 六、总结 代码审计是渗透测试中获取高权限的有效手段,需要结合正向和逆向审计思路,关注高危漏洞点,善用工具辅助分析。通过本文案例可以看出,即使是简单的漏洞组合也可能形成完整的攻击链,审计时需保持全局视角。