首页
社区
课程
招聘
[原创]SOAP注入的介绍与实战
发表于: 2022-10-10 22:16 1087

[原创]SOAP注入的介绍与实战

2022-10-10 22:16
1087

本文将介绍SOAP的相关内容,并结合一道CTF题目进行实战练习,帮助读者更容易掌握SOAP注入。PS:第一次在看雪发帖,求优转正。

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

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

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

格式如下所示:

注意必须使用XML编码,Envelope、Encoding命名空间,不能包含DTD(外部实体)引用,也不包含XML处理指令。
下面将以一道CTF题目进行辅助讲解,帮助读者更好发掘SOAP注入。

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

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

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

这里解释一下该请求包后面的xml格式的内容是怎么构造出来的。

可以发现,存在Envelope,Header,Body,但是没有Fault。要想解释清楚它是如何构造的,还需要结合原xml文档/ws_soap.php?wsdl如下所示:
图片描述

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

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

1.获取数据库名

使用-r参数读取文件内容进行操作,后面跟的是soap.txt所在的绝对路径,--batch是在遇到选择时默认选yes,--dbs就是爆数据库名。
图片描述
得到了几个数据库名,我们要的flag就在whalwl这个数据库名中。
2.获取数据库表名

根据数据库名探测表名
图片描述
得到几个表名,很明显flag应该在this_flag表中。
3.获取数据库列名

根据数据库名和表名探测列名
图片描述
获取到了flag列,最后获取flag内容即可

运行即可成功得到flag
图片描述

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

<?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 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 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>
<?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>

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//