hu1y40's blog

hu1y40'blog
天堂的穹空遍布地狱之火的颜色,但也是天堂。
  1. 首页
  2. Trick
  3. 正文

开源组件漏洞分析方法

2023年10月7日 1421点热度 0人点赞 0条评论

0x00 前言

本文主要记载WEB组件漏洞分析方法,包括漏洞信息搜集,补丁分析,PoC编写,修复方案等内容。以总结无PoC,Exp的Nday漏洞的验证手段。

0x01 信息搜集

漏洞信息的搜集有四种组件官方网站,Github,NVD等漏洞数据库,公众号或技术博客等第三方平台。

1.1 官方网站

一般情况下,被广泛使用的组件会有官方网站,其网站上会对历史漏洞进行记录,记录会包含漏洞编号,漏洞影响版本以及修复的commit。

fig:

1.2 Github

开源组件在Github上可以下载历史版本,并且可以看到commit的具体内容,也就是所谓的补丁,依此可以逆推出漏洞成因,以便编写PoC。

fig:

并且Github上搜索漏洞编号可能会出现PoC或exp。

1.3 NVD

NVD有用的信息有漏洞描述,漏洞评分,第三方链接,CWE-ID,从漏洞描述和CWE-ID可以看出该漏洞是什么类型,部分描述可以看出漏洞产生的文件,函数或者原因,第三方链接可能连接到了利用链接,修复通告。

fig:

fig:

1.4 第三方平台

可以从微信公众号,Twitter,谷歌搜索CVE编号。可能会存在漏洞复现相关文章或者相关PoC。

fig:

0x02 补丁分析

补丁分析的本质是代码审计,以漏洞CVE-2021-35515为例发现其补丁是对于数组的成员进行了一个校验,而漏洞本身是一个无限循环漏洞,可以猜想,其漏洞成因可能是该while循环会无限制的迭代。因此我们需要构造使得其无限循环的数据。

fig:

观察代码,想要该循环无线循环就需要让current恒>=0,且current不能一直增长,所以current最好能恒=0。根据current的赋值代码,我们只要让bindPairs[pair].inIndex恒等于0即可。

final int pair = findBindPairForOutStream(current);
current = pair != -1 ? (int) bindPairs[pair].inIndex : -1;

0x03 PoC编写

为了验证漏洞的存在,还需要进行PoC的编写,部分漏洞是由于一个函数产生的,此时将构造好的数据传入漏洞函数便可以验证效果。其详细步骤大概分为以下几步:

  1. 编写调用漏洞函数的Java代码
    • 部分需要HttpServletRequest等Servlet实现的代码可以使用JUnit来写测试用例验证
    • 大部分可以直接传入恶意参数给漏洞方法
    • 一些无关漏洞的验证如CRC可以直接修改数据跳过
    • 创建同名文件可以进行源码Patch
  2. 执行该Java文件并传入构造好的恶意数据
  3. 查看效果

不同的漏洞产生的效果不同,对于Java反序列化,XXE或是任意的命令执行漏洞,可以通过touch命令创建文件,calc命令弹出计算器,访问dnslog生成的网址来判断命令执行是成功。

fig:

对于DoS等拒绝服务的漏洞可以通过调用函数查看是否Java出现异常来判断。如下是一个内存耗尽漏洞的报错案例。

fig:

对于无限循环的漏洞可以通过进行源代码Patch,使用一个参数Count记录代码的执行次数,执行次数过大的时候显然是异常的。也可以调试进行逻辑分析,观察循环过程中的变量情况,推理是否存在无限循环漏洞。

fig:

0x04 修复方案

修复方案通用的便是将漏洞版本的组件提升至漏洞不存在的版本,修复版本一般可以从nvd或组件官网上得知。

其次对于需要通过WEB服务利用的漏洞,可以通过流量测进行检测,对传输的数据包进行一些过滤,如对于反序列漏洞的利用,其流量数据中会存在一些利用链使用到的类的字符,使用WAF,IPS对其进行过滤也可以防止漏洞的利用,当然这只是缓兵之计,重要的还是要从源码层面进行修复。

当官方没有对已有的漏洞进行修复,也就是不存在修复版本的时候,就需要手动对代码进行Patch,这里分为两种情况,第一在调用漏洞函数的时候对传入的参数进行一次过滤,第二是对组件代码进行一些修改在其内部函数进行一些过滤处理(这也是模拟官方修复漏洞的过程)。

标签: Trick
最后更新:2023年10月7日

hu1y40

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 0x00 前言
  • 0x01 信息搜集
    • 1.1 官方网站
    • 1.2 Github
    • 1.3 NVD
    • 1.4 第三方平台
  • 0x02 补丁分析
  • 0x03 PoC编写
  • 0x04 修复方案

分类目录

  • 0day安全
  • Bypass
  • C++Prime
  • CTF
  • DoS
  • DoS
  • FUZZ
  • iot
  • JSONP
  • MISC
  • MISC
  • PHP伪协议
  • Python
  • REVERSE
  • sqli-labs
  • SQL注入
  • Trick
  • UAF
  • WEB
  • WEB
  • XXE
  • 书籍阅读
  • 二进制
  • 代码阅读
  • 信息搜集
  • 信息泄露
  • 加密与解密
  • 双重释放漏洞
  • 反序列化
  • 命令执行
  • 命令执行
  • 堆溢出
  • 密码学
  • 弱加密
  • 提权漏洞
  • 整数溢出
  • 文件上传
  • 未分类
  • 栈溢出
  • 格式化字符串漏洞
  • 模型
  • 汇编语言
  • 渗透测试
  • 漏洞分析
  • 漏洞利用
  • 漏洞战争
  • 漏洞挖掘
  • 病毒分析
  • 越界读取
  • 路径遍历
  • 逻辑漏洞
  • 配置不当
  • 钓鱼
  • 靶场
最新 热点 随机
最新 热点 随机
加密算法 2023年度总结 RTSPServer StackOverflow Vulnerability FUZZ 总览篇 MP4Box 无限循环漏洞 CVE-2023-40477 Winrar RCE漏洞分析
CVE-2022-42252 Apache Tomcat请求走私漏洞 AFL代码阅读 I CVE-2013-0077 Firefox字符串替换整数溢出漏洞 文件上传靶场pass-1-10 CVE-2012-0003 Microsoft Windows Media Player winmm.dll MIDI文件堆溢出漏洞 CVE-2021-35515 Apache Commons Compress拒绝服务漏洞

COPYRIGHT © 2023 hu1y40's blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鄂ICP备2021009673号-1