首页 > 其他分享 >漏洞挖掘学习

漏洞挖掘学习

时间:2022-11-06 18:57:30浏览次数:88  
标签:SSRF 学习 漏洞 复现 挖掘 授权 执行 代码执行

引言

自己学习Java安全也有半年了,但是学了又好像没有学还是停留在复现漏洞用脚本的水平,自己也很困惑,就找点文章看看。

明确观点

问题

  • 怕麻烦,觉得环境搭建困难,操作麻烦
  • 看见大量代码,无处下手
  • 机械式复现,无论是动手调试,还是打payload,都是一种机械复现
  • 觉得项目很大,高手不知道已经挖过多学少遍了,早没了
  • 沉迷学习,缺少实践(大忌)

必须改掉这些问题,树立以下核心观念:

  • 挖洞有手就行,不一定需要很高超的技巧
  • 挖洞需要学习基础,但不能陷入到无限理论中
  • 挖洞需要的不是天赋,需要的是专注、勇气、自信和努力

为什么复现很多却挖不倒洞

漏洞复现和漏洞挖掘有着本质的区别,当复现漏洞的时候,已经有很多参考:

  • xxx组件存在xxx漏洞这个信息提示
  • 可能有了一些泄漏部分的payload截图
  • 可能有了完整的复现文章

在这些前提下,你的目标会变得很明确,随着条件的完善复现的难度越来越低,当已经有完整复现文章的时候,你甚至不需要自己去思考跟着操作即可。那么你在复现的时候如果不进行反思和归纳就会沦为F8工具人,整个流程下来你只是知道了这回事。如果你长期进行漏洞复现,然后第一次接到一个漏洞挖掘项目的时候会发生什么?你失去了前面漏洞复现时候所说的几个前提条件,失去了这些条件给你框定的明确路径后,由于你从来没有真正的自我决策过所以你陷入了无法决策的思维恐慌中。在一个真正挖掘项目里,你需要独立的去规划自己的工作流程,对每一次测试方向做决策,如果你缺少这种能力就应该从复现工作中进行总结归纳锻炼自己这种思维。

漏洞利用的逻辑

先来看几个概念:

  • 可控输入:也就是source点(污点分析)
  • 目标输出:sink点
  • 程序机制:就是处于source与sink点之间对整个数据进行各种变化
  • trick:一些技巧,例如绕沙箱,绕过过滤,溢出到执行命令等

一个漏洞利用链如下:

这个图里输入1是用户侧可控的输入,输出3可以认为是最终的命令执行函数,那么中间的输出1可能是写配置文件,输出2可能是发送请求到别的端口,通过机制4和机制5将这些中间输出进行转化与搬运,最终把几个点串联起来做到输入1到输出3的命令执行。上面这个图主要还是关注一个数据传播和转化,那么再加上各个流程中可能会用到的trick就最终得到了一个完整的利用

技能

有了整体的思路后,我们需要对漏洞进行分类

漏洞类型 分类标签 效果
SQL注入 代码执行 执行部分SQL语句,可能造成命令执行、数据获取、读写文件
XSS 代码执行 有限或无限的Javascript代码执行,可能获取cookie凭证
命令注入 命令执行 直接拼接命令执行系统命令
反序列化 代码执行 有限或无限的执行java代码,或根据gadget的不同执行各类操作,比如读写文件、发起请求等
SSRF 网络请求 有限制或无限制的发起各类请求转发,将部分可控数据通过网络进行转发
加密缺陷 伪造 加解密的问题可以统一归为各类伪造,包括伪造凭证、数据包签名等
任意读 敏感信息获取 读取各类敏感信息
任意写 写文件 写各种文件,通常配合系统机制或者框架机制,任意写文件大概率可以串代码执行或者命令执行
未授权访问 权限校验缺失 权限校验缺失,可以访问各类需要鉴权的接口
内存溢出 代码执行 内存溢出后如果利用成功通常可以造成任意代码执行、改变程序判断条件

漏洞类型可以参考Owasp所有的类型,每一个漏洞能达到的效果,都要熟知,列举完后,就是一些组合:

  1. 未授权访问+命令执行
  2. 未授权访问+反序列化
  3. 未授权访问+任意写+系统机制(PHP的webshell或者Linux的crontab)
  4. 未授权访问+SSRF+本地进程未授权+命令注入
  5. 加密缺陷可构造凭证+后台命令执行功能
  6. 未授权访问+SSRF+内存溢出

还有一些特定场景的连招:

  1. XSS+electron
  2. 未授权+fastjson
  3. 人工点击+XSS+electron

当然不止这些combo,你能想象到的组合都可以试一试,一般来说要实现RCE,最后一个终结技都是要跟上代码执行或者命令执行或者是写文件的漏洞类别,而在终结技前面的漏洞类别通常选各类未授权以及各类数据搬运如SSRF,甚至于XXE也能作为SSRF来用。这也是为什么我们需要把每种漏洞类型所能造成的效果都罗列一下,这种罗列有助于组合combo。(一旦你思路打开,受限制的反序列化也可以是一种SSRF) 在我们罗列各类漏洞类型和他们所能造成的影响时,我们不应该过多的关注自己是否实际掌握具体的利用方式,比如学web的通常不懂内存溢出,那么他们可能就不会考虑内存溢出作为其中一个RCE的终结技。但实际上,你就算是不会,你在寻找整个利用链路的时候都应该把它考虑进去,如果链路能走通再考虑实际的利用。

决策

有了前面的铺垫,拿到一个全新项目就可以做规划:

  1. 搜集信息,对功能和三方组件进行了解,大致对可能的combo有个预测
  2. 根据预测的combo搜寻对应的sink,找出几个可能的独立的漏洞片段
  3. 尝试进行简单的片段串联,如果能够快速串联那么很有可能就已经RCE了
  4. 如果几个漏洞片段无法串联,那么需要深入学习整个程序的内在运作机制包括所在系统的一些机制
  5. 利用各种机制曲线的将几个漏洞片段串联到一起
  6. 串联完毕后,深入到解决具体的细节问题,比如利用一些trick来绕过过滤、穿透沙箱等
  7. 期间可以配合黑盒测试的一些方式来进行调试,避免纯白盒的单步跟进,最终完成RCE

漏洞复现关注点

我们学习各种漏洞复现技巧的时候,我们应该关注什么?根据我前面说的,我们应该重点看这个文章里运用了哪些技巧,比如如何绕过过滤、用了哪些偏门gadget。其次关注这个产品、这个组件它的整体框架逻辑是什么样的,他有哪些有趣的功能机制是可以拿来串联链。我们可以忽略什么?繁琐的各种函数跟进,根本毫无意义,随便看看就行了,除非你也专门研究这个产品的0day挖掘那么你可以细致的看一看,如果你想用它来挖别的产品那么你可以直接忽略掉很多没有用的函数跟进,只看那些对数据有一定复杂过滤操作的典型函数就行了。

年轻人如何挖掘第一个RCE (seebug.org)

标签:SSRF,学习,漏洞,复现,挖掘,授权,执行,代码执行
From: https://www.cnblogs.com/gk0d/p/16819409.html

相关文章

  • [Java反序列化]JavaCC链学习(8u71前)
    文章目录​​写在前面​​​​前置​​​​Transformer​​​​TransformedMap​​​​ChainedTransformer​​​​InvokerTransformer​​​​ConstantTransformer​​​​......
  • Java 线程池之ThreadPoolExecutor学习总结
    前提javaversion"1.8.0_25"池简述软件开发活动中,我们经常会听到数据库连接池、内存池、线程池等各种“池”概念,这些“池”到底是什么东西呢?程序的世界里,我们可以将池简单......
  • Java 线程池之ThreadPoolExecutor学习总结
    前提javaversion"1.8.0_25"池简述软件开发活动中,我们经常会听到数据库连接池、内存池、线程池等各种“池”概念,这些“池”到底是什么东西呢?程序的世界里,我们可以将池简单......
  • JavaScript 学习-50.实现页面菜单拖放(Drag 和 Drop)
    前言拖放是一种常见的操作,即抓取对象以后从一个位置拖到另一个位置。在HTML5中,拖放是标准的一部分,任何元素都能够拖放。拖放(Drag和Drop)在拖曳操作中,被拖曳的元素称做源......
  • Java学习File类的判断和获取功能
    方法名说明publicbooleanisDirectory()测试此抽象路径名表示的File是否为目录publicbooleanisFile()测试此抽象路径名表示的File是否为文件publicbooleanexists()测试......
  • 自学Java的学习步骤与基本态度
     一般来说,刚开始学Java,需要掌握的基础并没有那么多,但是却需要牢牢掌握。如:Java数据类型、String基本类型封装类、MySQL等基础知识,属于必备技能,不论你是什么目的学习Java,此......
  • 2022-2023-1 20221418 《计算机基础与程序设计》第十周学习总结
    2022-2023-120221418《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程(2022-2023-1-计算机基础与程序设计)这个作业要求在哪里(2022-2023......
  • python学习第五周总结
    面向对象前戏之人狗大战#编写代码简单的实现人打狗狗咬人的小游戏(剧情需要)"""推导步骤1:代码定义出人和狗"""person1={'name':'jason','age':18,......
  • 20221427第十周学习总结
    2022-2023-120221427《计算机基础与程序设计》第十周学习总结作业信息班级链接(2022-2023-1-计算机基础与程序设计)作业要求(2022-2023-1计算机基础与程......
  • 第十二章学习笔记
    第十二章学习笔记一、 教材内容总结摘要:本章讨论了块设备I/O和缓冲区管理;解释了块设备I/O的原理和I/O缓冲的优点;论述了Unix的缓冲区管理算法。12.1块设备I/O缓......