目录导航
log4jsscanner简介
用于分析 JAR 文件的 log4j 漏洞文件系统扫描器和 Go 包。[针对本地系统的jar包进行扫描]
log4jscanner 下载地址
①GitHub
- log4jscanner-v0.1.0-darwin-amd64.tar.gz 1.35 MB
- log4jscanner-v0.1.0-darwin-arm64.tar.gz 1.3 MB
- log4jscanner-v0.1.0-linux-amd64.tar.gz 1.44 MB
- log4jscanner-v0.1.0-linux-arm64.tar.gz 1.34 MB
- log4jscanner-v0.1.0-windows-amd64.zip 1.44 MB
- Source code (zip)
- Source code (tar.gz)
②云中转网盘
https://yzzpan.com/#sharefile=Al20tnRv_26022
解压密码:www.ddosi.org
安装方法
预编译的二进制文件可作为发布资产使用。
要使用现有的Go安装从源代码安装,请使用 go install:
go install github.com/google/log4jscanner@latest
或者直接从 repo 构建:
git clone https://github.com/google/log4jscanner.git
cd log4jscanner
go build -o log4jscanner
使用方法
以exe为例

用法: log4jscanner [flag] [目录]
log4j漏洞扫描器。扫描程序遍历提供的目录
试图找到易受攻击的jar文件。输出易受攻击的jar文件路径stdout。
Flags:
-s, --skip Glob pattern to skip when scanning (e.g. '/var/run/*'). Glob模式扫描时要跳过的目录(例如 '/var/run/*' )可能提供了很多次。
-w, --rewrite 当检测到存在漏洞的jars时重写它们。
-v, --verbose 输出详细信息
命令行工具
这个项目包括一个扫描目录,将任何检测到的 JAR 打印到标准输出。
$ log4jscanner ./jar/testdata
./jar/testdata/bad_jar_in_jar.jar
./jar/testdata/log4j-core-2.1.jar
./jar/testdata/log4j-core-2.12.1.jar
./jar/testdata/log4j-core-2.14.0.jar
./jar/testdata/log4j-core-2.15.0.jar
./jar/testdata/vuln-class.jar
或者,该--rewrite
标志可以就地从检测到的 JAR 中主动删除易受攻击的类。
$ zipinfo /tmp/vuln-class.jar | grep Jndi
-rw-r--r-- 3.0 unx 2937 bx defN 20-Nov-06 14:03 lookup/JndiLookup.class
-rw-r--r-- 3.0 unx 5029 bx defN 20-Nov-06 14:03 net/JndiManager.class
-rw-r--r-- 3.0 unx 249 bx defN 20-Nov-06 14:03 net/JndiManager$1.class
-rw-r--r-- 3.0 unx 1939 bx defN 20-Nov-06 14:03 net/JndiManager$JndiManagerFactory.class
$ log4jscanner --rewrite /tmp
/tmp/vuln-class.jar
$ zipinfo /tmp/vuln-class.jar | grep Jndi
-rw-r--r-- 3.0 unx 5029 bx defN 20-Nov-06 14:03 net/JndiManager.class
-rw-r--r-- 3.0 unx 249 bx defN 20-Nov-06 14:03 net/JndiManager$1.class
-rw-r--r-- 3.0 unx 1939 bx defN 20-Nov-06 14:03 net/JndiManager$JndiManagerFactory.class
在 MacOS 上,您可以使用以下命令扫描整个数据目录:
$ sudo log4jscanner /System/Volumes/Data
扫描器还可以通过传递 glob 模式来跳过目录。在 Linux 上,您可以选择扫描整个根文件系统,但跳过特定于站点的路径(例如/data/*
目录)。默认情况下,log4jscanner 不会扫描魔法文件系统,例如 /proc 和 /sys。
$ sudo log4jscanner --skip '/data/*' /
对于大量定制,例如向外部端点报告,该工具的大部分逻辑都通过jar.Walker
API公开。
Package
解析逻辑可通过jar
包获得,并可用于扫描存储在其他代码存储库中的资产。由于 JAR 使用 ZIP 格式,因此此包在archive/zip.Reader
.
import (
"archive/zip"
// ...
"github.com/google/log4jscanner/jar"
)
func main() {
rc, err := zip.OpenReader(pathToJARFile)
if err != nil {
if errors.Is(err, zip.ErrFormat) {
// File isn't a ZIP file.
return
}
log.Fatalf("opening class: %v", err)
}
defer rc.Close()
if !jar.IsJAR(&rc.Reader) {
// ZIP file isn't a JAR file.
return
}
result, err := jar.Parse(&rc.Reader)
if err != nil {
log.Fatalf("parzing zip file: %v", err)
}
if result.Vulnerable {
fmt.Println("File is vulnerable")
}
}
查看examples/
完整程序的目录。
误报情况
已观察到扫描仪的误报。在自动重写 JAR 或根据扫描结果采取其他缓解措施时要小心。
如果您确实遇到了误报,请提交一个问题。
项目地址
GitHub
https://github.com/google/log4jscanner
转载请注明出处及链接