13.6 WebService 测试
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论