【技术分享】针对SOAP的渗透测试与防护_available soap services 漏洞-程序员宅基地

技术标签: # WEB安全  

本文翻译自:https://blog.securelayer7.net/owasp-top-10-penetration-testing-soap-application-mitigation/

http://p3.qhimg.com/t01e3fc5253a0b8c568.jpg

SOAP概述

简单对象访问协议(SOAP)是连接或Web服务或客户端和Web服务之间的接口。SOAP通过应用层协议(如HTTP,SMTP或甚至TCP)进行操作,用于消息传输。

http://p3.qhimg.com/t018a390a8123f09261.jpg

图1 SOAP操作

 

它是基于xml语言开发的,它使用Web服务描述语言(WSDL)来生成Web服务之间的接口。如果客户端或用户的独立应用程序想要与Web服务连接,则它需要由应用程序生成的服务端点接口(SEI)。这些接口WSDL和SEI是使用自动化工具或手动生成的,它们具有平台无关性。通用描述,发现和集成(UDDI)是Web服务可以发布关于其服务的一个目录,用户可以提交他们的查询。

一个简单的SOAP消息包含:

  • Envelope: 标识XML文档,具有名称空间和编码详细信息。

  • 标题:包含标题信息,如内容类型和字符集等。

  • 正文:包含请求和响应信息.

  • 故障:错误和状态信息。

http://p1.qhimg.com/t01005df9d52935509d.jpg

图2 SOAP请求和响应的示例

图2显示了SOAP请求和响应,其中Web服务请求用户的名称并回复消息。SOAP是一组被定义为执行某些操作的标准协议,因此它只传输请求的数据,无论请求是什么,如果它在其机制中被验证,它将有答复。


常见SOAP漏洞:

SQL 注入:

SOAP请求易受SQL注入攻击,提交参数作为变种 sql查询可以泄露敏感信息。

攻击前:

在执行攻击之前,必须知道Web服务的功能,如图3所示,可以看到以string作为输入的username参数。

http://p7.qhimg.com/t018f7fc9952d4069d5.jpg

图3请求功能分析

输入随机用户名以检查其操作,此时它回应用户名不存在的消息,这可以帮助执行具有可能性的攻击。

http://p0.qhimg.com/t01741508de6b6f4a96.jpg

图4响应信息分析

攻击后:

下面显示的请求是一个攻击者试图通过在参数的位置传递一个sql查询来访问用户详细信息,数据库的错误消息将有助于猜测查询的内容。

http://p9.qhimg.com/t0169e2022df55b3beb.jpg

图5数据库错误消息

http://p5.qhimg.com/t01622549b5800c7e17.jpg

图6 SQL注入请求

如果传递的查询成功中断了数据库语句查询,那么它将回应用户的信息。

http://p4.qhimg.com/t01a4dbdd45906e3819.jpg

http://p4.qhimg.com/t015124dad80365ef29.jpg

图7 SQL注入响应

payload: SQL注入的payload是简单的变形查询,它使数据库获取详细信息,在上面的例子中,使用的数据库是My SQL(来自Fig.5),它可能包含不同的表,知道所有表中的信息可能是不可能的,但是 在这种情况下可以访问某些字段。在图3中,SOAP消息正在使用结合用户名和1=1的OR语句请求管理员帐户的详细信息,并且将其他所有内容标记为“– ”注释,这使得数据库显示所有用户的用户名和签名。在SQL注入中,可以有更多的可能性来执行攻击,例如具有“,”,“ – ”,“or””and”,“insert”或满足条件的任何其他组合查询的语句。

补丁这种类型的攻击可以通过两种方式来进行防护与修复:

白名单:虽然列表只允许某些字符通过,但在此列表中添加admin等字符会使应用程序只接收列出的字符。

过滤:其中涉及通过删除不需要的字符(例如admin'OR'1 = 1'')来过滤用户输入 – 将被清理,以便只有admin通过它。


命令注入

命令注入是通常通过传递具有数据的命令以获得诸如目录结构,网站地图或甚至与web应用相关的敏感信息的攻击。

http://p3.qhimg.com/t011c01a370595dea42.jpg

图8命令注入请求(1)

在上述lookupDNS web服务中,使用IP地址和命令ls进行请求,其列出了如下所示的应用的目录结构

http://p0.qhimg.com/t01637dcbd63edba25e.jpg

图9命令注入响应(1)

在其他请求ping命令传递与IP地址ping主机,如下所示:

http://p9.qhimg.com/t01a7fc4d8b29dd7c09.jpg 

图10命令注入请求(2)

http://p1.qhimg.com/t016383b6a868b83d84.jpg

图11命令注入响应(2)

payload:对于这种类型的攻击,payload是与用户输入相结合的命令语句,但有些命令是常用的,有些是操作系统特定的,操作系统的类型是可以由HTTP可以看到的简单操作。 诸如ls,adduser,install,kill或join等命令可用于执行操作。

补丁:为了修补命令注入攻击,必须构建严格的验证机制,并且实现其功能,数据库对于包含攻击模式192.168.66.2; ls 和192.168.66.2& & ping c1 localhost 进行验证,以便它只允许字母数字字符。在上述命令中,注入攻击包括特殊字符&或;这将在服务端执行时分离命令和数据,因此必须开发考虑这些情况的函数功能。

 

XML 注入

在XML注入类型的攻击中,SOAP消息的变形请求可以在数据库中进行更改,并对数据库造成严重损坏。

正常功能:创建用户函数在应用程序中创建新用户,这需要几个参数作为输入,如图12所示 


http://p6.qhimg.com/t0104088fcace3546ba.jpg

图12 XML请求

响应将具有带有插入了用户名帐户的消息的return语句,如图13所示

http://p0.qhimg.com/t016e9a6e7bd472c79c.jpg

图13 XML响应

攻击 

在实际的XML注入中,代码的一部分被变形并与请求一起发送,使得代码将在另一侧执行,在图14中,创建用户功能被添加有附加代码以利用服务。

http://p1.qhimg.com/t019a3fbfd5ca284caf.jpg

图14 变形的XML请求

从图15可以看出,web服务被执行具有插入了用户名帐户的消息的代码。该功能执行攻击者插入的参数,而不是实际请求。

http://p0.qhimg.com/t01d77abd52f28d009f.jpg

图15 变形请求的响应

payload:这种类型攻击的有效载荷实际上是在另一端提交的参数,在这种情况下,创建用户XML标签被变形或添加了帐户Alice的详细信息并附加请求,以便它将执行它。

补丁:这种类型的攻击的补丁对createUser的标签字符串进行了严格的限制,它必须使用字符串的长度来定义,并且必须定义wsdl中createUser功能的次数或发生次数。 基于数据和解析器为用户输入开发清理机制,并且还使用文档类型定义(DTD)来验证尝试注入是最佳实践。


SOAP操作欺

每个HTTP请求都包含一个称为SOAP Action的字段,用于执行在其内容中定义的操作。可能由攻击者改变内容,攻击者在客户端和服务器之间操作,一种绕过或中间人攻击。

下面显示的请求消息包含一个称为create user的功能,它可以在SOAP Action字段和SOAP主体中看到。

http://p7.qhimg.com/t01f1c9f9c6fc68abfa.jpg

图16带有SOAP动作字段的SOAP请求

简单地变形(可能不是一个)可以改变其功能,如图17所示

http://p1.qhimg.com/t0196945d96701150f6.jpg

图17 变形的SOAP动作的请求

 在更改请求并将其传递到服务器后,请求将有一个响应,因为它似乎是合法的,并执行其操作删除帐户,可以在图18

http://p3.qhimg.com/t01e2f4841e3b734c6c.jpg

图18 SOAP执行变形请求后的响应

payload:对于这种类型的攻击没有特定的有效载荷,SOAP动作字段被认为是目标,对功能的彻底分析可以提供执行攻击的线索。仅改变SOAP字段可能不足以执行攻击,它可能需要根据所执行的动作来改变请求消息。

补丁:为了防止这种类型的攻击,必须在HTTP请求中禁用SOAP Action字段(如createUser或deleteUser),或使用不容易猜到的SOAP Action术语。有时可能需要在这样的事件中强制添加Action字段,开发人员必须考虑SOAPAction:“”(意味着SOAP消息的意图由请求的URI给出)的可能性或SOAP Action:(空字段表示 消息的意图是不指示任何值或URI)。


SOAP参数DOS

每个SOAP请求包含一个被传递以获取一些数据的参数,有一些请求,攻击者可以利用这些请求来执行拒绝服务攻击。 如果应用程序无法执行输入验证或没有参数的边界,可能导致缓冲区溢出,这将使服务不可用。 下图显示的参数用户名没有任何边界限制,因此任何一个都可以将任意长度的字符串传递给应用程序。

http://p5.qhimg.com/t01425f5ec5d7ada156.jpg

 图19没有限制条件的SOAP请求

如果用户名有限制,那么它会有一些异常传递正确的字符串,这将使应用程序安全。


payload:这种类型的攻击的有效载荷是知道在请求中传递的数据类型,因此基于传递最大值或大值的数据类型可以是攻击的方式。

补丁:为了减轻这种类型的攻击,必须使用最小和最大长度或某些边界来定义参数,例如参数用户名包含5个最小值和35个字符串最大长度,可以在处理中轻松验证。

http://p8.qhimg.com/t01f6d8b45960e895a6.jpg

图20 带条件的SOAP请求

 

WSDL

WSDL泄露不能被视为攻击,而是攻击的一个步骤,就像我们所知道的,所有WSDL都知道的包含Web服务的信息,有一些Web服务需要对诸如支付网关或正在收集敏感信息的服务等攻击者隐藏。 任何攻击者都可以通过在搜索引擎中输入“inurl:?wsdl”来搜索Web服务。

http://p6.qhimg.com/t016448fd1dff572579.jpg

图21 wsdl搜索

http://p6.qhimg.com/t0131ec4d3e508e2874.jpg

图22 Web服务WSDL

补丁

用于数据的安全传输的Web应用程序从不依赖于其安全性如使得Web服务的URL,对于搜索引擎和公开内容是隐藏的,并且对诸如机密性,完整性和真实性的特征进行严格保持。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014029795/article/details/105463823

智能推荐

学习JAVA游戏服务器开发需要了解的情况_java游戏服务器开发用到数据库吗-程序员宅基地

文章浏览阅读1.3w次,点赞21次,收藏85次。一,游戏服务器开发的工作介绍近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等。不管出于什么原因吧,做为一名几年的游戏服务器开发者,当然是持欢迎态度的,那么我就先介绍一下游戏服务器开发的工作吧,游戏服务器开发具体要做哪些工作呢?1,团队沟通基本上不管做什么开发,都是一个团队来完..._java游戏服务器开发用到数据库吗

PHP开发——Web的世界_php web开发-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏10次。这篇关于PHP的文章主要介绍了PHP的特性以及其在Web开发、CMS系统、电子商务和数据库连结等应用场景。随着云平台、开发工具和移动应用程序等技术的不断发展,PHP将进一步提高其应用广度和深度。未来的PHP将支持更多的技术,并且将成为与Web开发工具、数据库技术、云平台、移动应用程序等相关的技术。此外,PHP未来的发展将更加高效和易用,使其更适合处理大量数据和请求,并充分考虑用户界面和易用性。_php web开发

windows启动tomcat闪退_tomcat windows闪退-程序员宅基地

文章浏览阅读1.2w次。现象:windows下双击tomcat\bin\startup.bat时闪退原因:缺少环境变量导致解决方法:打开编辑tomcat\bin\startup.bat,头部加入以下代码,一个是JAVA目录,一个是Tomcat目录SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_39SET TOMCAT_HOME=D:\hunk\work\apache-tomcat_tomcat windows闪退

数组内存存储_64位平台数组内存-程序员宅基地

文章浏览阅读201次。数组内存存储1. 基本类型数组的初始化2. 引用类型数组的初始化1. 基本类型数组的初始化 int[] array; array = new int[5]; for (int i = 0 ; i<array.length;i++){ array[i] = i + 1 ; } System.out.println(Arrays.toString(array));内存分析:2. 引用类型数组的初始化//定义Person类class Person{ private S_64位平台数组内存

Vue 食用指南-程序员宅基地

文章浏览阅读738次,点赞13次,收藏16次。本文记录了 Yukiii 学习 Vue 期间的心得和相关功能的具体实现及 Vue 的基本使用方法,方便后续开发时的查阅~

【Android】高版本访问网络失败问题,解决方法整合_android eperm (operation not permitted)-程序员宅基地

文章浏览阅读6.4k次,点赞3次,收藏25次。报错各种问题,真的很烦java.net.SocketException: socket failed: EPERM (Operation not permitted)java.net.SocketException:socket failed:EACCES (Permission denied)java.io.IOException: Cleartext HTTP traffic to 10.0.2.2 not permittedD/Netw at java.net.Socket.creat_android eperm (operation not permitted)

随便推点

软件测试全网最全复习总结-别杠,杠就是你对_软件规范化和标准化的原因不包括-程序员宅基地

文章浏览阅读1.1w次,点赞104次,收藏452次。今天仍然拼命看书,因为明天就要考了。学期的成绩就全仗这两天挣,现在更感到考试无用与无聊。——季羡林文章目录概述软件测试分类及流程黑盒测试等价类划分边界值分析法决策表法正交测试法极差法方差法白盒测试单元测试集成测试国际化和本地化测试可靠性测试测试与质量分析报告_软件规范化和标准化的原因不包括

iOS —— use_frameworks! 作用-程序员宅基地

文章浏览阅读1.3k次。通过cocoapods管理应用程序时,在Podfile文件中,**use_frameworks!*cocoapods会生成对应的 frameworks 文件 在Link Binary With Libraries:会生成Pods_工程名.framework,包含了其它用cocoapods导入的第三方框架的.framework文件1、纯OC项目中,通过cocoapods导入OC库时,一般都不使用use_frameworks!2、纯swift项目中,通过cocoapods导入swift库时,必须使用u..._use_frameworks!

Python菜鸟晋级04----raw_input() 与 input()的区别_pycharm没有raw input-程序员宅基地

文章浏览阅读2.5k次。raw_input() 与 input()均是python 的内建函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。举两个小例子>>> raw_input_A = raw_input("raw_input: ")raw_input: abc >>> input_A = input("Input: ")Input: abcTraceback (most recent ca_pycharm没有raw input

高通AR增强现实多卡识别和扩展跟踪Unity_imagetarget扩展追踪-程序员宅基地

文章浏览阅读1k次。只需修改ARcamera上的Max Simutaneous Tracked Images 的值就好了。初始是1,默认只能识别一张图。 扩展跟踪是一个更简单的事情,高通把这个功能封装成了ImageTarget的一个属性 Extended Tracking,只要将其勾上就可以了._imagetarget扩展追踪

对于三星手机的手工root方法-程序员宅基地

文章浏览阅读172次。现在很多一键化的root工具,但是仍然有不少的三星手机是无法用全自动方式进行root的,这时候,我们可以选择使用手工的方式进行root,本文章对手工root的一些方法进行一些介绍。   常规方法:..._三星手机用面具root

2021年佛山高考成绩查询,2021年高三佛山一模,看佛山高中排名-程序员宅基地

文章浏览阅读1.7k次。原标题:2021年高三佛山一模,看佛山高中排名2021年1月11日佛山进行了新高考改革后第一次佛山一模考试,作为高考风向标,各高中的成绩具有很大参考意义。结合2018年中考录取分数、2021年佛山一模、2020年佛山一模对佛山56所高中进行简要分析,从而展望2021年高考。 1-10名石门中学稳居第一,佛山一中重夺第二,南海中学增长强劲,顺德一中略显颓势,李兆基中学增长强劲,郑裕彤中学加工能..._佛山国华纪念中学2021年高考成绩

推荐文章

热门文章

相关标签