前言
在软件安全领域,代码审计是识别和预防潜在漏洞的关键防线。本文将结合实战经验,深度探讨代码审计技术,包括如何高效挖掘源码、利用文件上传漏洞,以及破解任意账户登录机制。通过实战步骤和技巧分享,旨在为安全研究人员和开发者提供一套实战性强、技术深入的审计策略。
一、源代码探索
在审计旅程的起始,这里发现代码通常被打包至程序集,存放于bin目录下。这一特性有时会引发运维失误,即备份的bin目录意外暴露,为攻击者提供了直接获取源码的便捷途径。这里使用御剑批量扫描,得以快速识别出潜在的敏感资产,进一步利用这些信息,借助dnSpy等逆向工具,深入探究程序内部逻辑。
获取到的数据量比较可观,下载完毕的文件可直接利用dnSpy工具进行逆向工程操作,以便直观地审查其源代码。
二、代码审计实战:突破文件上传防护的策略
已成功从指定站点获取到业务相关的bin目录,并已借助dnSpy工具顺利实施了代码逆向分析。
初步审查了两个核心文件,其中WebController负责掌管主页的逻辑控制,而ManagerController则专司管理页面的指令调度。
两个页面的路由配置具体如下:
WebController采用简洁的路由模式:控制器名/方法名。
ManagerController则遵循更为细致的层次结构:Manager/控制器名/方法名。
值得注意的是,位于ManagerController下的大多数操作通常预先配置有登录验证机制,我们可将其深入分析暂且安排在后续阶段。
我们先看WebController下所承载的各项功能分析。
众多控制器中,通过细致观察命名规范,不少功能领域已能初见端倪。我的习惯是在深入审计之前,优先审阅一番Filter过滤器,因其往往蕴含着关键逻辑。在此环节中,我发现了一个名为SqlFilter的过滤器,显得尤为引人注目。
该SqlFilter的主要功能旨在监测GET与POST请求中的敏感参数,尤其是诸如单引号(')这样的字符,以确保数据安全性。
一旦检测到此类敏感输入,该过滤器会立即实施拦截措施,从而有效阻断潜在风险。尽管存在绕过SqlFilter的可能性,但鉴于SQL注入攻击路径复杂且耗时,通常倾向于将其作为安全审计的最后一环进行详尽探索。
在审计过程中,我在NoBaseController控制器下留意到一个文件上传功能,该功能封装于upshallfile方法之中,具体实现位于代码的第59行。值得注意的是,该文件存储过程未实施任何文件类型验证措施,暴露出潜在的安全隐患。
流程解析如下:
在该方法的起始部分(第5至7行),程序声明并初始化了三个字符型变量,这些变量的值直接来源于HTTP请求头的相关属性,实现了对请求头信息的基本捕获。
text变量从请求头中提取path属性值,若缺失则默认设定为“~/”,用以定位资源路径。
text2变量负责获取请求头内的sign属性,此乃用于验证请求真实性的重要标识。
text3变量则捕获请求头的time属性,关乎请求的时间戳信息。
紧接着,在代码的第10至17行,程序执行了对text2变量(即签名信息)的检查,确认其是否为空。一旦发现签名缺失,系统将即时反馈“签名失败”的响应,体现了对数据完整性的基本校验。