虚拟情景
某cve,能通过多个组件完成利用(这里举例为8个),同时不同组件能够使用一个统一的入口进行调用。
在调用组件之后,有一个统一的位置会存储着我们访问的结果,我们需要对产生的结果额外发出请求来匹配其中的内容,从而判断这个系统中是否存在相关的漏洞。
试考虑写出这个漏洞对应的yaml poc
优化之前,普通写法
那么结合这个场景,我们可以有以下的思路不同组件,同一个入口
不同组件,同一个入口
可以编写多个rule,在path填写不同的组件参数,同时在最终的表达式中使用
或进行分隔不同组件的返回结果或许不太相同
不同组件的返回结果或许不太相同
在表达式的匹配中,使用正则或者其他匹配语句对不同的特性进行匹配
每次利用后需要匹配一些额外信息
每次利用后需要匹配一些额外信息
这个需要搭配第一条使用,在每一个这种rule后再加上其他的辅助rule进行匹配
优化之后,使用payloads进行编写
那么考虑一下上边写出的内容,我们发现貌似不同rule之间是有一定规律的,而且poc总体看上去过为冗长,不利于阅读。这里给出考虑到的问题不同组件,同一个入口
不同组件,同一个入口
既然入口相同,只是后边的参数或者部分路径不同,或许可以提取出不同的部分,归纳相同的部分,将这些内容分离
不同组件的返回结果或许不太相同
不同组件的返回结果或许不太相同
虽然返回的内容不大相同,但是貌似对于返回的结果都有相似的匹配方式,那么将这些内容分离单独写出
每次利用后需要匹配一些额外信息
每次利用后需要匹配一些额外信息
考虑到第一条的抽象理解,貌似也不需要每个rule都要额外写一遍,只需要直接写出,让这些额外的内容自动去结合能够进行抽象理解的rule即可
- 天然抽象出了漏洞的利用路径,忽略了一些暂时无需多加关注的信息,能让我们更加关注于如何通过这样一条路径去分辨漏洞的存在与否
- payload的
名称和内部具体需要填充的内容都可以以key的形式进行呈现,非常有利于我们对不同的利用方式进行区分与修改,同时不必去费尽心思去想如何对不同的rule进行命名 - 大幅缩短了所编写poc的长度,在方便日常阅读的同时更有利于后续整体的大小优化
- 在需要添加一些利用手段时,只需要在payload中继续添加利用方式即可,而不用再回到rule中,重新了解rule该去如何编写
非常推荐将rule抽象为payloads进行处理
