声明:该公众号大部分文章来自作者日常学习笔记,未经授权,严禁转载,如需转载,联系洪椒攻防实验室公众号。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。
接口相关的测试,http 协议的接口大家平常基础的很多,基本上问题不大。webservice 接口如何测试呢?
通俗来讲 soap 协议开发的接口对应的服务就是web service接口,通过 SOAP 在 Web上 提供的软件服务,使用 WSDL 文件进行说明,并通过 UDDI 进行注册。有以下几个特点
基于Web的服务:
http 协议开发的接口对应的服务,我们叫http service。
Webservice是基于 SOAP 协议传输数据,SOAP 又是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。
WSDL(Web Services Description Language)基于XML语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端能理解的标准格式。
基于 XML 的,所以 WSDL 既是机器可阅读的,又是人可阅的,这将是一个很大的好处。——可以视为接口文档。
在渗透测试过程中,会通过扫目录或者是其他方式得到各种的WebService页面:
许多文章都是写的使用postman、WSDigger、soapui等等,但我觉得这些都是给开发人员用的。
作为一名渗透测试工程师、当然还是burpsuite使用的最顺手了。burp官方提供了一个测试工具:Wsdler,在burp的Bapp Store就可以直接安装
wsdl接口打开是这样的:http://xxxx.com/services/UserService?wsdl
在burp里找到请求消息,然后右键选择Extensions、选择Wsdler就可以了:
然后会在wsdler模块得到像下面这种:
工具会自动生产xml格式的请求包,标注的地方是需要我们根据具体接口信息去构造的。
个人很喜欢这种Web servers,因为里面的wsdl接口大多数会存在未授权漏洞(个人觉得,遇到十个有七八个存在未授权)。
IIS的webserver大部分可以直接在页面进行调试的,比如:
http://xxxxxx:83/WebService.asmx?op=homemenu
输入admin即可获取数据:
页面直接调试就基本上看到的是正常的post请求,但如果页面没有调试的webserver该怎么测试呢?
从页面看到的请求是http://xxxxx.com:83/WebService.asmx
这种其实是支持SOAP协议的,直接将请求变为WebService.asmx?wsdl即可 然后再利用burp工具wsdler自动生成xm格式请求、一样的可以获取数据:
除了正常获取数据,还可以测试SQL注入、XXE等,根据web service有什么接口进行具体测试
sqlmap一把梭即可,运气好有文件上传时,直接构造上传getshell。
这是一次某次hw中的实战案例,目标存在一个iis的web server页面 还可以对物联网设备进行控制:
然后某个接口存在SQL注入,直接os-shell获取权限,powershell上线进入内网,打穿出局
某次渗透测试中,目标单位OA系统存在Web server,发现存在一个用户接口queryUsers
wsdler工具自动生成xml格式,需要自行构造参数,
参数有userid、userName、orgSysCode,优先尝试userid=1,username=admin,其他不知道的参数可以留空,发包测试、可以看到并没有返回数据,可能构造的不对,各位师傅遇到了自行尝试。
笔者个人习惯(也算是一点小经验吧),在遇到这种涉及page、size参数的,我索性直接将其他参数删掉,只保留page、size参数,往往会出东西:
直接获取所有的用户信息,再利用id查询密码:
直接获取OA系统所有的账号密码,md5解密即可登陆系统获取大量敏感信息。
某次SRC项目挖掘中遇到一个asp.net的站点,不存在目录遍历漏洞,但是是怎么发现存在WebService的呢?
搜索接口:
发现接口是/Services/xxxx.asmx,直接访问显示拒绝访问:
但是在xxxx.asmx后面加上?wsdl,即可获取到所有接口:
再利用burpsuite自带工具wsdler生成数据包,直接获取敏感信息。
WebService测试还是比较简单的,主要就是根据有哪些接口、然后再针对的进行测试。而且大多数存在未授权和SQL注入,个人还是很喜欢遇到WebService的(特别是IIS,很容易有注入)。
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款