代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

admin 2025年4月21日01:53:03评论2 views字数 1449阅读4分49秒阅读模式

如何快速复现 / 挖掘一个漏洞?CodeAuditAssistant 高阶技巧

SpringKill,网络安全建设 | SAST/IAST研究员 | 开源安全工具开发者,专注于静态分析(SAST)、动态分析(IAST)领域的安全研究与工具开发Github:https://github.com/springkill

我和Unam4 最近发布了一个新的IDEA 代码审计辅助插件CodeAuditAssistant ,测试阶段目前也收到了很多反馈,那么今天就从一个漏洞实战案例出发来详细讲解下插件的使用技巧。(本文是SpringKill的调用链审计,以SpringKill的自述角度来讲解如何使用CodeAuditAssistant 挖掘0day)

挖掘目标 - Apache hertzbeat

https://github.com/apache/hertzbeat

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布
代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布
代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布
代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

2024补天大会议题 - JNDI新攻击面探索

PPT地址:https://forum.butian.net/share/3857

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布
Github:https://github.com/unam4

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布
unam4绕过的角度来讲解漏洞发现,SpringKill本文以发现注入点的角度来介绍如何快速挖掘0Day。

第零步:关于调用链

调用链(Call Chain)顾名思义就是方法间的调用所组成的链条,在人工代码审计中我们往往更想快速找到方法被调用的地方进行进一步的确认。

那么这个过程中对于单线程执行的程序(比如我录得视频中的Log4j )其实检测是相对简单的(只需要处理好抽象 / 接口即可,必要时处理依赖注入等,这里不展开说),但是对于一些多线程 执行才能触发的漏洞(比如定时任务),其实是不能轻易从一个调用链发现整个漏洞的调用的(因为设置定时任务运行定时任务可能并不是同一个线程),所以本文从多线程漏洞的识别方式出发,带你感受CodeAuditAssistant 带给你的效率提升。

第一步:查找 SInk

如果不是很特殊的触发点,你都可以通过SinkFinder/Sink 查找器进行查找,当然对于你自己的独家 Sink,可以用传统 ctrlf 大法或者使用后续上线的Sink 自定义功能。

完成调用图构建和Sink初始化之后,通过 Sink 查找我们找到了一个危险的JNDI方法:

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

接下来我们右键点击该方法后,选择作为 Sink 点搜索

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

现在你就可以从搜索结果中看到这个方法的调用链了,我们展开调用链进行查看:

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

跟踪到第一个方法run 中,在这里,调用链的第一部分结束,程序运行时的最后一段结束,接下来我们就要跟踪该类中的字段了,通过查看字段定义,我们继续跟踪到monitorId 字段:

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

ctrl 点击并发现这个字段被赋值的地方:

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

进入后,我们继续手动跟踪,找到 task 方法:

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

接下来找到对task赋值的地方后,我们再次将这个方法作为 Sink 搜索:

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

至此,你找到了这个这个漏洞的起始点Service 层的detectMonitor方法:

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

那么我们再来实际运行一下查看,发现多线程调用中确实同上所述:

代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布
代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布
代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

这个也就是我和 Unam4 的 Hertzbeat 的一系列绕过漏洞的触发过程了,最后附上插件连接:

https://github.com/SpringKill-team/CodeAuditAssistant

授权申请

直接公众号回复CodeAuditAssistant授权 或 代码审计工具授权

原文始发于微信公众号(卫界安全-阿呆攻防):代码审计|SpringKill如何用CodeAuditAssistant挖掘0day教程公布

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

发表评论

匿名网友 填写信息