返回介绍

13.6 WebService 测试

发布于 2024-10-11 00:03:35 字数 4210 浏览 0 评论 0 收藏 0

13.6.1 测试原理和方法

WebService 是一种跨编程语言和跨操作系统平台的远程调用技术。XML+XSD、

SOAP(Simple Object Access Protocol)和 WSDL(Web Services Description Language)就

是构成 WebService 平台的三大技术,其中 XML+XSD 用来描述、表达要传输的数据;

SOAP 是用于交换 XML 编码信息的轻量级协议,一般以 XML 或者 XSD 作为载体,通过

HTTP 协议发送请求和接收结果,SOAP 协议会在 HTTP 协议的基础上增加一些特定的

HTTP 消息头;WSDL 是一个基于 XML 的用于描述 Web Service 及其函数、参数和返回值的

语言。

通过上面的描述,我们可以知道 WebService 就是一个应用程序向外界暴露出一个能通

过 Web 进行调用的 API。这个 API 接收用户输入的参数,然后返回相关的数据内容。如果

一个 WebService 完全信任用户的输入,不进行过滤,则有可能导致 SQL 注入漏洞的发生。

13.6.2 测试过程

如图 13-34 所示,攻击者在测试前,通过爬虫或者目录扫描等方法找到服务器的

WebService 链接,接着使用 WVS(Web Vulnerability Scanner)的 Web Services Editor 功能

导入各个接口函数,通过关键词(如 Get、Exec)定位到相关的接口函数,通过 HTTP

Editor 对每一个接口函数的输入参数进行测试(如 SQL 注入、文件上传等),如果出现预

期效果(如数据库报错、不同的延时等),则存在漏洞。

图 13-34 WebService 测试流程图

步骤一:找到服务器的 WebService 的链接,在 WebService 后面加上“?wsdl”,服务器

便会返回 WSDL 描述函数信息,如图 13-35 所示。

步骤二:如图 13-36 所示,使用 WVS(Web

Vulnerability

Scanner),单击左边栏

的“Web Services Editor”。

在 Operation 选项列表中,可以看到 WebService 定义的多个函数,选择其中一个,

WVS 便会显示需要输入的参数值。在选择的时候,我们尽量选择一些可能会涉及数据库

操作的函数,比如函数名以 Get 开头的,一般是从数据库返回一些信息;比如以 Exec 开头

的,一般是直接执行 SQL 语句或者特定指令。如图 13-37 所示,这里选择的是

ExecNonQuery 函数,从函数名可以看出,这应该是用来执行非查询语句的接口。其中接

收一个名为 sql 的参数,从命名看,这个参数应该用来指定要执行的 SQL 语句。

图 13-35 获取 WebService 链接

图 13-36 使用 WVS 查看 WebService

图 13-37 查看 ExecNonQuery 函数的参数细节

步骤三:如图 13-38 所示,单击“HTTP Editor”切换到 HTTP 请求界面,我们可以发送

SOAP 请求,以及接收请求后的响应。

图 13-38 单击“HTTP Editor”切换到 HTTP 请求

如图 13-39 所示,我们修改 sql 参数的值为“1'”,查看响应内容。

图 13-39 修改 sql 参数

如图 13-40 所示,结合微软官方的文档信息,System.Data.SqlClient.SqlConnection 是.NET Framework 连接 SQL Server 的类库,由此可知后端数据库使用的是 SQL Server 数

据库。

步骤四:如图 13-41 所示,在了解数据库类型后,我们可以使用具体的非查询类的

SQL 语句去测试输入参数是否存在 SQL 注入漏洞。这里要使用 select 语句等查询类的 SQL 语

句,其返回响应为 false。

图 13-40 分析异常信息

图 13-41 测试非查询语句

测试是否存在漏洞,应该使用延时类的 SQL 语句,通过返回响应的时间间隔来确认是

否可以直接执行 SQL 语句。这里由于是 SQL Server,应该使用 SQL Server 的延时语句,所

以使用“waitfor delay'0:0:3'”,这里'0:0:3'代表 3 秒。如图 13-42 所示,WVS 显示的时间

间隔大于 3000 ms,与 SQL 语句延时的时间一致,存在漏洞。

图 13-42 延时注入 3 秒

如图 13-43 所示,延时 5 秒“waitfor delay'0:0:5'”。

图 13-43 延时注入 5 秒

步骤五:剩下的利用步骤和常规的 SQL 注入测试一致,使用 Wireshark 或者 Burp Suite 将 WebService 的请求抓取下来,保存到文本文件。在需要测试的参数值处添加星

号“*”,如图 13-44 所示。

图 13-44 保存请求到文件中

然后通过 sqlmap 对参数进行检测即可,sqlmap 对应的具体参数是-r,如图 13-45 和图

13-46 所示。

图 13-45 使用 sqlmap 进行测试

图 13-46 确认漏洞存在

13.6.3 修复建议

(1)为 WebService 添加身份认证,认证成功后才允许访问和调用。

(2)WebService 中接收输入参数的函数,在后端应该对输入参数进行过滤及净化,

在处理后才入库查询。

(3)在敏感功能的函数中,添加密码认证,认证后才允许调用敏感功能的函数。

实践篇

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文