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