Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

kento996/CodeScan

Open more actions menu
 
 

Repository files navigation

CodeScan

image

工具概述

该工具目的为对大多数不完整的代码以及依赖快速进行Sink点匹配来帮助红队完成快速代码审计,开发该工具的初衷是以Sink​到Source​的思路来开发,为了将所有可疑的Sink点匹配出来并且凭借第六感进行快速漏洞挖掘,并且该工具开发可扩展性强,成本极低,目前工具支持的语言有PHP,Java(JSP)

编译

./build.sh

# 会生成所有版本在releases下

功能

  1. 框架识别
  2. 涵盖大部分漏洞的Sink点的匹配(如图) image
  3. 可自定义定制化修改黑白名单内容
  4. 多模块化多语言化代码审计
  5. 进行融于鉴权代码的快速匹配抓取
  6. 根据Jar进行静态分析(默认分析)
  • mysqlconnect-->jdbc
  • Xstream --> xml/json

使用

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


Example:
	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作为示例

高扩展性

很简单的自定义,如果需要自定义一些匹配规则,首先可以在这里加入

image

其次如果需要新增漏洞类型,只需要三步(这里以Sql为例)

  1. 新建SQL目录
  2. 定义一个方法叫 SqlCheck
  3. 写一个sqlcheck.txt(生成的文件名) + 你自定义的规则
  4. 最后在这里加入包名+方法名即可

image

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",
}

所以这也导致了一个问题,不能从顶层上直接扫描

image

请把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

案例

案例请参考我的博客

https://zjackky.github.io/post/develop-codescan-zwcz53.html

TODO

  • 将结果从TXT转为Excel
  • Sink点继续完善
  • ASP

支持项目

  • 如果有师傅发现Bug或者有更好的建议请提issue感谢
  • 要是各位师傅通过本人的小工具挖到一些好洞记得回头点点Stars诶

免责申明

  • 如果您下载、安装、使用、修改本工具及相关代码,即表明您信任本工具
  • 在使用本工具时造成对您自己或他人任何形式的损失和伤害,我们不承担任何责任
  • 如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任
  • 请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款,并选择接受或不接受
  • 除非您已阅读并接受本协议所有条款,否则您无权下载、安装或使用本工具
  • 您的下载、安装、使用等行为即视为您已阅读并同意上述协议的约束

更新日志

2024/09/29

  • 开源

2024/10/7

  • 将扫描结果写入result目录中

鸣谢

xiaoqiuxx(github.com)

About

一款轻量级匹配Sink点的代码审计扫描器,为了帮助红队过程中快速代码审计的小工具

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Go 98.1%
  • Shell 1.9%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.