如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。
免责声明
本博客所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。
前言
记录一次极其简单的代码审计,技术含量较低,适合代码审计小白观看,不喜勿喷。
利用工具
https://github.com/webraybtl/CodeQLpy
第一步:生成数据库初始化,-t指定代码根目录,-c表示为编译后代码,不指定-c表示为.java代码。
python .\main.py -t D:\code\SourceCode\xxxx\ROOT -c
第二步:生成数据库,这一步直接使用上一步命令最终返回的生成数据库的命令在cmd/bash环境中运行即可。
codeql database create out/database/ROOT --language=java --command="D:\tools\CodeAudit\CodeQLpy\out\decode/run.cmd" --overwrite
第三步:开始扫描,运行完成之后最终会返回结果文件,结果文件是csv文件,保存目录在out/result/目录之下。
python .\main.py -d D:\tools\CodeAudit\CodeQLpy\out\database\ROOT
生成的csv文件。
代码审计与漏洞利用
查看生成的csv结果文件,发现有FileWrite,排除掉jsp文件后,可以看到很明显给出了漏洞代码所在类与方法。
定位到漏洞代码位置之后,发现逻辑很简单,就是获取表单中名称为imgFile的文件,最终将上传的文件保存在 /pages/uploads/目录下,期间没有对上传的文件的后缀做校验。
构造poc上传文件发现报错提示:java.io.ByteArrayInputStream cannot be cast to java.io.FileInputStream
类型转换错误,经过搜索后发现是因为文件大小不同时,返回类型不同的问题。
根据描述,我们只要将上传的文件内容写的大一点就行了。