WSDL Scanning

Web Service描述语言WSDL 就是用机器能阅读的方式提供的一个正式描述文档而基于XML的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。

This screen is the API for a web service. Check the WSDL file for this web service and try to get some customer credit numbers.

这里显示的是一个Web services的API (Application Programming Interface,应用程序编程接口) 。检查此Web service服务的WSDL文件,并试图得到一些客户的信用卡号。

演示
通过拦截并修改他的请求到我们所要获得的请求得到相应的响应

Webgoat 笔记总结 Web Services II_border

可以看到这里面并没有直接读取用户信用卡号的选项

Webgoat 笔记总结 Web Services II_border_02

尝试提交下First Name可以成功getFirstName

Webgoat 笔记总结 Web Services II_border_03

我们先通过查看WSDL文件得知获得信用卡号的动作代码是getCreditCard
开启Intercept requests再次提交First Name,不过这次我们要拦截并修改他提交的内容了

Webgoat 笔记总结 Web Services II_的_04

修改动作
Webgoat 笔记总结 Web Services II_的_05

Webgoat 笔记总结 Web Services II_阅读_06

SAX

Simple API for XML(简称SAX)是个循序存取XML的解析器API。SAX提供一个机制从XML文件读取资料。它是除了文件物件模型(DOM)的另外一种流行选择。

一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括:

XML 文字 节点

XML 元素 节点

XML 处理指令

XML 注释

事件在任一XML特性遇到时引发,以及遇到他们结尾时再次引发。XML属性也作为传给元素事件资料的一部分。

SAX 处理时单方向性的;解析过的资料无法在不重新开始的情况下再次读取。

演示

web api在后台使用webservices。如果前端的Web服务依赖于所有的输入验证,它很可能会篡改XML的网络接口发送的信息
在这个练习中,试图改变用户的密码,而不是101。

Webgoat 笔记总结 Web Services II_阅读_07

Webgoat 笔记总结 Web Services II_border_08

我们尝试一下 看看回馈信息

Webgoat 笔记总结 Web Services II_的_09

我们看到

而且我们可以看到输入的内容"password"是插入到

<password xsi:type='xsd:string'>后面
<password xsi:type='xsd:string'>password

我们可以根据他的代码尝试写出SAX注入代码

里面包含了id以及密码

<id xsi:type='xsd:int'>101</id>

<password xsi:type='xsd:string'>password</password>

组合起来是:

</password><id xsi:type='xsd:int'>101</id><password xsi:type='xsd:string'>password

最后的password可以自定义 前面的101就是我们可以修改的ID了

Webgoat 笔记总结 Web Services II_阅读_10

输入要改的密码test123, 然后开启WebScarab抓包
点击go

Webgoat 笔记总结 Web Services II_阅读_11

这里是我们将要修改的数值
把SAX注入代码:
</password><id xsi:type='xsd:int'>119</id><password xsi:type='xsd:string'>test123
插入得到

Webgoat 笔记总结 Web Services II_border_12

Webgoat 笔记总结 Web Services II_阅读_13

<?xml version='1.0' encoding='UTF-8'?>

<wsns0:Envelope

xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'

xmlns:xsd='http://www.w3.org/2001/XMLSchema'

xmlns:wsns0='http://schemas.xmlsoap.org/soap/envelope/'

xmlns:wsns1='http://lessons.webgoat.owasp.org'>

<wsns0:Body>

<wsns1:changePassword>

<id xsi:type='xsd:int'>101</id>

<password xsi:type='xsd:string'>test123</password><id

xsi:type='xsd:int'>119</id><password xsi:type='xsd:string'>test123</password>

</wsns1:changePassword>

</wsns0:Body>

</wsns0:Envelope>

You have changed the passsword for userid 119 to 'test123'

代码执行了

Webservices SQL injection

演示要求:
检查web services描述语言(WSDL)文件,并试图获得多个客户的信用卡号码。你不会看到结果返回此屏幕。当你相信你已经成功了,刷新页面,寻找“绿色星星”。

Webgoat 笔记总结 Web Services II_阅读_14

Webgoat 笔记总结 Web Services II_阅读_15

操作选择getCreditCard
并在ID数值处插入SQL代码

1 or 1=1
Webgoat 笔记总结 Web Services II_阅读_16

Webgoat 笔记总结 Web Services II_border_17
登录

执行 1 or 1=1
Webgoat 笔记总结 Web Services II_的_18

并且刷新网页