目录
1.1、简述:
1、SOAP (简单对象访问协议)是一种使用XML格式封装数据、基于消息的通信技术。各种在不同操作系统和架构上运行的系统也使用它来共享信息和传递消息。它主要用在Web服务中,通过浏览器访问的Web应用程序常常使用SOAP在后端应用程序组件之间进行通信
由不同计算机执行单项任务以提高性能的大型企业应用程序经常使用SOAP。采用Web应用程序作为现有应用程序前端的情况也经常可以见到SOAP。应用程序通常使用SOAP在不同的组件之间通信,以确保模块性和互用性
2、由于XML是一种解释型语言, 因此SOAP也易于受到代码注入攻击。XML元素通过元字符< 、>、/以语法形式表示。如果用户提交的数据中包含这些字符,并被直接插入SOAP消息中, 攻击者就能够破坏消息的结构,进而破坏应用程序的逻辑或遭成其他不利影响
1.2、示例:
转账操作
1、POST提交HTTP请求进行转账(假设没有足够的转账金额)
2、处理请求的过程中,应用程序在两个后端组件之间传送SOAP消息
关键值:
False 将元素(ClearedFunds)的值设为False,因此收到SOAP消息的组件将拒绝转账。
3、通过各种方法注入SOAP消息. 从而破坏应用程序的逻耜
如:
A、在POST提交HTTP请求最初的元素之前插入一个CleacedFunds元素(同时保待SQL语法的有
效性)。如果应用程序处理它遇到的第一个CleacedFunds元素, 那么即使账户中没有资金, 也
可以成功进行转账B、使用XML注释完全删除原始SOAP消息中的一个元素, 并用攻击者自己设计的元素代替被删除的元素
C、尝试在一个注入的参数内完成整个SOAP消息并将消息的剩余部分注释掉。但由于没有结束注释与起始注释相匹配,这种攻击会生成完全错误的XML语法,从而被许多XML解析器拒绝。这种攻击并不能在所有XML解析库中起作用,它只对定制或自主研发的XML解析器奏效
2.1、过程:
1、轮流在每个参数中提交一个恶意XML结束标签, 如。如果没有发生错误, 那么输入可能没有插人到SOAP消息中, 或者以某种方式被过滤了
2、如果出现错误,提交一对有效的起始与结束标签, 如
。如果这对标签使错误消失, 那么应用程序很可能易于受到攻击 3、插入到XML格式消息中的数据随后以XML格式被读取并返回给用户。如果修改的数据项在应用程序的响应中返回, 看看提交任意XML内容是否会以相同的形式返回,或已通过某种方式被规范化。
测试:test和test
如果发现其中一个值的返回结果为另一个值, 或只返回test, 那么可以确认输入被插入到了XML消息中
4、如果HTTP请求中包含几个可放入SOAP消息的参数,尝试在参数中插入起始注释字符