[xkungfoo2012]web service hack

46
Web Service Hack Pnig0s@ 知知知知

Upload: pnig0s-pnig0s

Post on 16-Jun-2015

1.364 views

Category:

Technology


6 download

DESCRIPTION

pnig0s xkungfoo2012 web service hack methodology focus on soap webservice

TRANSCRIPT

Page 1: [xKungFoo2012]Web Service Hack

Web Service HackPnig0s@ 知道创宇

Page 2: [xKungFoo2012]Web Service Hack

About Me:

From: 知道创宇安全研究团队 www.Knownsec.com 1 , Web 安全研究 2 ,核心产品研发

FreeBuf 核心成员 www.FreebuF.com --- 国内外实时安全资源资讯聚合

Page 3: [xKungFoo2012]Web Service Hack

他们在使用 Web 服务:

Page 4: [xKungFoo2012]Web Service Hack

1 ,提供 IP 地址来源查询接口 2 , QQ 在线状态查询接口

多种多样的 Web 服务:

Page 5: [xKungFoo2012]Web Service Hack

3 ,验证码生成接口

多种多样的 Web 服务:

Page 6: [xKungFoo2012]Web Service Hack

1, 什么是 Web 服务

2, 发现 Web 服务及信息搜集

3,Web 服务弱点及攻击手法

内容概要:

Page 7: [xKungFoo2012]Web Service Hack

Web服务

UDDI

WSDLSOAP

XML

Go

什么是 Web 服务:

Page 8: [xKungFoo2012]Web Service Hack

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 服务所在位置:

Page 9: [xKungFoo2012]Web Service Hack

<portType> 标签中提供了当前所有调用接口名称及调用方法的类型 :

<wsdl:portType name="newsserverSoap"><wsdl:operation name="Gethuodong"><wsdl:input message="tns:GethuodongSoapIn"/><wsdl:output message="tns:GethuodongSoapOut"/></wsdl:operation></wsdl:portType>

什么是 Web 服务:

Page 10: [xKungFoo2012]Web Service Hack

<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>

Page 11: [xKungFoo2012]Web Service Hack

什么是 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>

Page 12: [xKungFoo2012]Web Service Hack

发现 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

Page 13: [xKungFoo2012]Web Service Hack

Google Hack 查询结果:

Page 14: [xKungFoo2012]Web Service Hack

Seekda 中查询 Amazon 提供的 Web 服务:

Page 15: [xKungFoo2012]Web Service Hack

Xmethods 中的第三方 Web 服务列表:

Page 16: [xKungFoo2012]Web Service Hack

Yeah baby,that’s enough.

Oh man,are u kidding me?

1 , WSDL , DISCO 文件信息泄露: payCheck.asmx?wsdl payCheck.asmx/wsdl payCheck.asmx?disco

Web 服务信息搜集:

Page 17: [xKungFoo2012]Web Service Hack

国内某游戏厂商在线支付平台 Web 服务:

WSDL 文件信息泄露

Page 18: [xKungFoo2012]Web Service Hack

DISCO 文件信息泄露:

1 , WSDL 中的信息一般是无害的,但也会导致大量业务逻辑被暴露出来。

2 ,没有什么比 WSDL 和 DISCO 文件泄露的信息再多了,通过它们你几乎可以了解该 Web 服务的全部细节,可是 XML 文件看上去很难直观的展示出 Web 服务的相关信息。 So , do it ur self.

Page 19: [xKungFoo2012]Web Service Hack

Python 脚本遍历 WSDL 文件:

Page 20: [xKungFoo2012]Web Service Hack

公开的 Web Service 测试工具:

.Net WebService Studio

Page 21: [xKungFoo2012]Web Service Hack

Foundstone 出品 WSDigger:

提供了简单的漏洞 Fuzzing 功能

Page 22: [xKungFoo2012]Web Service Hack

WSDigger 生成的报告:

Page 23: [xKungFoo2012]Web Service Hack

Fuzzing 工具 WS-Attacker :枚举 Web 服务接口信息, SOAP 请求测试, Web 服务Fuzzing

Page 24: [xKungFoo2012]Web Service Hack

商业版自动化 Web 服务测试神器 SoapUI :

Page 25: [xKungFoo2012]Web Service Hack

针对 Web 服务安全问题自动化 Fuzzing 过程:

Page 26: [xKungFoo2012]Web Service Hack

攻击 Web 服务及测试案例

Page 27: [xKungFoo2012]Web Service Hack

1 , Web 服务依赖于 XML 格式化语言和 SOAP 协议,由于之前所讲的一些特性,这些技术正在变得越来越流行,广泛的被各大企业厂商应用到实际服务中。但很少有相关人员意识到 Web 服务会带来的严重安全问题,攻击者通过实施 Web 服务攻击可以直接渗透到相关服务的核心部分,造成巨大的损失。

2 ,目前针对 Web 服务攻击的防护可以说是安全防御的一个盲区,如WAF , IDS 等防护产品。而由于 Web 服务的开放性和灵活度非常高,所以已有的一些 Web 服务防御措施效果也并不明显。

3 ,访问权限控制是目前 Web 服务的主要防御和控制措施,一个Web 服务接口如果权限设置不当,相关的高权限接口直接暴露在外,被恶意利用就会产生严重的后果。

Web 服务安全概述:

Page 28: [xKungFoo2012]Web Service Hack

发现Web服务(UDDI,Web服务查询网站,GoogleHack)

针对Web服务请求WSDL,DISCO文件。

针对每个接口人工或自动化Fuzzing进行安全测试

If ur lucky,u can pwn it!

一般 Web Service 渗透测试步骤:

Page 29: [xKungFoo2012]Web Service Hack

国内某旅游网

1, 正常 SOAP 请求及响应信息:

2, 请求 北京’ :

典型的报错注入点

Error-Based Sql Injection:

Page 30: [xKungFoo2012]Web Service Hack

请求北京 ‘ and 1=@@version or ‘1‘=‘1 :

爆出当前MSSQL 信息

请求北京 ‘ and 1=user or ‘1’=‘1: 还是 DBO

关联案例: WooYun-2011-01860(Jannock, 某商城 SQL 注入 )

Page 31: [xKungFoo2012]Web Service Hack

国内某软件厂商

向一个私有接口发起请求:

直接获取服务器数据库连接信息

关联案例 :wooyun-2010-04665(巭 ,北辰国旅 /海涛假期服务器高危漏洞 )

一些私有的 Web 服务接口,没有做好访问权限设置导致接口完全暴露在外,可以被任何人调用,从而被攻击者利用获取一些敏感信息,以便进一步进行渗透。

服务器信息泄露:

Page 32: [xKungFoo2012]Web Service Hack

一个 GetFile 接口,没有对特殊字符进行过滤和限制可以导致任意文件下载: 1, 发送空参数请求暴出网站绝对路径:

2, 请求目标网站的 Web.config配置文件 :

任意文件下载:

Page 33: [xKungFoo2012]Web Service Hack

Base64 解码后的配置文件文件内容 :

成功获取到了经过 Base64编码后的文件内容:

Page 34: [xKungFoo2012]Web Service Hack

国内某 SNS交友社区

获取用户接口 GetUser 未做权限访问控制,任何人可以调用该接口查看任意用户信息。注册一个帐号 ,使用自己的 ID 调用 GetUser 接口:

个人账户信息一览无余

任意用户资料查看:

Page 35: [xKungFoo2012]Web Service Hack

更换用户 ID 发送请求:

可以查看到其他用户 的账密信息

由于目标网站用户 ID 可预测,因此通过此漏洞,该站上百万的用户账密资料可以被攻击者轻易获取。

关联案例 : wooyun-2010-01209(Jannock, 39健康网多处越权漏洞 )

Page 36: [xKungFoo2012]Web Service Hack

发现 XML Injection : 1 ,在 SOAP消息中,使用标签作为参数,如: </xmli> 会导致报错。 2 ,使用一对标签作为参数,如 <xmli></xmli>, 观察报错是否消失。

当使用 XML 存储一些敏感数据或使用 XML 格式化数据时,一些 Web 服务接口没有对用户的输入进行转义,导致攻击者可以插入任意 XML 标签,进行越权访问或恶意操作。

XML Injection :

Page 37: [xKungFoo2012]Web Service Hack

通过 XML Injection我们注入一个具有管理员权限的用户

测试 Xml 文件中的用户信息: ID=0为管理员权限 ID=500为普通用户权限

Page 38: [xKungFoo2012]Web Service Hack

上面针对的是使用 XML 格式化数据进行的 XML注入,同时我们还可以发送以下请求针对 SOAP 请求本身进行XML注入:

使用注入的帐号登录成功 ,得到管理员权限 :

注入 XML 标签之后的 userdb.xml 文件内容:

Page 39: [xKungFoo2012]Web Service Hack

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:

Page 40: [xKungFoo2012]Web Service Hack

使用不存在的用户 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’]");

登录成功,具备管理员权限

Page 41: [xKungFoo2012]Web Service Hack

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 文件

Page 42: [xKungFoo2012]Web Service Hack

SharePoint Server 是一个服务器功能集成套件,提供全面的内容管理和企业搜索。该套件中提供了一个用于文档格式转换的 Web 服务,攻击者通过向 ConvertFile 接口发送畸形的 SOAP 请求来上传恶意文件并执行任意代码。影响版本 :SharePoint 2007 sp2

开启文档转换服务的 SharePoint :

服务监听在 8082端口:

(MS10-104) SharePoint Server Arbitrary File Upload RCE

Page 43: [xKungFoo2012]Web Service Hack

利用 MSF执行 Payload 成功,获得一个 Meterpreter session :

通过 WireShark截获的 Metasploit向 SharePoint 服务器发送的数据包:

Page 44: [xKungFoo2012]Web Service Hack

<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路径及名称

Page 45: [xKungFoo2012]Web Service Hack

我们的成果分享及交流途径

通过官方博客: http://blog.knownsec.com/

通过官方微博: @ 知道创宇

Page 46: [xKungFoo2012]Web Service Hack

Thanks everyone!

@Pnig0s To:M