201-A23-API 接口测试
2023年 08月 04 日

BIGFISH

一、API 接口介绍

1.1 RPC(远程过程调用)

远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用,例:Java RMI。
RPC 一般直接使用 TCP 协议进行通信,通常不涉及到 HTTP。HTTP 下面有2种技术:

Web service 和 RESTful API 都可算作远程过程调用的子集。

1.2 Web Service

  • Web Service 是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。
  • 根据 W3C 的定义,Web 服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。
  • 尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据 SOAP 协议进行传递 XML 格式消息。无论定义还是实现,Web 服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的 Web 服务。另外,虽然 WSDL 不是 SOAP 服务端点的必要条件,但目前基于Java 的主流 Web 服务开发框架往往需要 WSDL 实现客户端的源代码生成。一些工业标准化组织,比如 WS-I,就在 Web 服务定义中强制包含 SOAP 和 WSDL。
  • Web Service 是一种比较“重”和“老”的 Web 接口技术,目前大部分应用于金融机构的历史应用和比较老的应用中。

1.3 SOAP

  • SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 。具体实现可以搜索 Web Services简单实例 ; SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
  • SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。
    soap协议又分为soap 1.1 和 soap 1.2 两个版本
  • 这两个协议间的区别在于soap 1.1里存在soapAction请求头,而soap 1.2没有,soap 1.2里用了action来代替,两者的wsdl文件也不同,体现在命名空间和定义service差别里。

二、SOAP注入

1、SOAP 注入查找

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

2、wsdl分析

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

3、靶机搭建

docker pull jeffzh3ng/fuxi
docker run -itd --name fuxi_docker -p 5000:50020 jeffzh3ng/fuxi:latest

4、漏洞分析

  • 首先访问靶机

img

  • 一般存在注入的地方发生在数据查询处
  • 查看4个功能点功能:AddUser 为添加用户,list 为列举用户,getuser 为获取用户,delete 为删除用户
  • 这里存在漏洞处为获取用户信息处
  • 点击GetUser->Message Layout查看它的消息布局

img

  • 发现username处为string 此处传入为字符串,可能存在注入
  • 通过查看它的wsdl去分析

img

  • 查看此处的GetUser元素,此处元素为内部创建的子元素,这里子元素名称为username,
  • 类型为string
  • 往下看,查找它的operation,也就是它的操作活动

img

  • 找到GetUserHttpGetIn 这个可以看作是 Get User Http Get In 为获取用户的输入
    以此为突破口进行测试
  • 这个靶场的数据库为PostgreSQL 数据库,那么要用 PostgreSQL注入来做
    点击 Test Form输入payload进行测试
  • 输入 aaa‘ or 1=1–

img

  • 再输入aaa’ or 1=2–

img

  • 可以说明此处存在注入,可以进一步使用联合查询来获取用户名密码,或者抓包使用sqlmap进行测试。
  • 按照示例把get请求转换为post

img

  • 保存到文件并给参数标注*
POST /Vulnerable.asmx/GetUser HTTP/1.1
Host: 192.168.10.70
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.10.70/Vulnerable.asmx?page=op&tab=test&op=GetUser&bnd=VulnerableServiceSoap&ext=testform&username=admin%E2%80%99+union+select+aaa%2Caaa--
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: ASP.NET_SessionId=473D11DF9D40456C68995931
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 89

page=op&tab=test&op=GetUser&bnd=VulnerableServiceSoap&ext=testform&username=aaa*
  • 使用sqlmap进行测试
sqlmap -r 222 --dbs --is-dba --dbms=PostgreSQL

img

三、api接口测试工具

  • 市面上常见的API请求构建工具形式有独立的桌面程序、命令行程序、浏览器扩展、Web服务等几种,比较著名的API请求构建工具有Postman、Swagger Inspecter、Soap UI、Apigee等等。
  • 国内有一些公司也通过Web服务的方式提供API测试功能,例如网易数帆的GoAPI,还有像curl这样免费的不需要图形界面也可以直接进行HTTP API测试的工具。

1、soapui使用

  • soapui官网:https://www.soapui.org/
  • soapUI是一个开源测试工具,通过soap/http来检查、调用、实现Web Service的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。把一个或多个测试套件(TestSuite)组织成项目,每个测试套件包含一个或多个测试用例(TestCase),每个测试用例包含一个或多个测试步骤,包括发送请求、接受响应、分析结果、改变测试执行流程等。

img

  • 下载文件后加执行权限,执行后可打开安装向导

img

  • 安装完成后点击finish即可打开soapui

img

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

img

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

img

  • 修改传入数值点击运行也可以进行测试,为api测试常用工具之一

img

img

  • 单击ok后添加api所对应的参数username和password,然后点击绿色三角即可对fuxi api进行测试

2、burp的wsdler插件

  • 抓取访问wsdl的数据包,然后右键,选择Extensions->wsdler->parse wsdl

img

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

img

3、hoppscotch

  • 之前有很多API请求构建工具都是商业软件,或者免费版仅仅提供很有限的功能。其中曾经最流行的Postman在收费之后就很被开发者社区诟病。有位印度裔小哥Liyas Thomas对此极为不爽,就发布了一个新的工具叫:Postwoman,显而易见,Postwoman是专怼Postman的。
  • 2020年8月,Liyas小哥可能觉得一直怼Postman也挺low的,2020年8月决定改名叫hoppscotch了。

3.1 hoppscotch安装

yum -y install docker
docker run --rm --name hoppscotch -p 3000:3000 hoppscotch/hoppscotch:latest
  • 会开始自动pull镜像并开始启动,过程非常慢

img

img

  • 添加fixi的/api/v1/token接口,添加相应的参数和值便可得到结果

img

4、postman

  • Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。
  • 它主要是用来模拟各种HTTP请求的(如:get/post/delete/put..等等),Postman与浏览器的区别在于有的浏览器不能输出Json格式,而Postman更直观接口返回的结果。

4.1 postman安装

tar -xzvf postman-9.15.2-linux-x64.tar.gz
cd Postman
./Postman

img

img

  • 单击Create Collection->add a request创建一个测试任务

img

img

5、工具总结

  • SoapUI 相对Postman 多了一个Soap 协议测试。
  • SoapUI 的功能复杂,界面使用多窗口方式实现,交互复杂,学习成本高,对于使用人员有较高要求。
  • SoapUI的API测试,自动测试需要更强的编程技能。
  • Postman 脱胎于Chorme 的插件,只支持Http 协议的测试。
  • Postman 的界面采用Tab形式,类似chrome 的操作方式,界面简单,功能设计简洁,工程的组织只有Collection 和folder ,层级,概念简洁,易学,易用,对于项目组的学习成本低。
  • Postman 的API 测试,自动测试对于编程的要求相对低一些
  • 如果只是进行Http,https 接口测试建议使用Postman 作为API测试工具,最主要的理由是,简洁易用,学习成本低。
  • hoppscotch功能跟postman功能相似,优点是开源免费、轻量级、页面美观,基于浏览器,不需安装,使用方便。

201-A23-API 接口测试

一、API 接口介绍

1.1 RPC(远程过程调用)

远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用,例:Java RMI。
RPC 一般直接使用 TCP 协议进行通信,通常不涉及到 HTTP。HTTP 下面有2种技术:

Web service 和 RESTful API 都可算作远程过程调用的子集。

1.2 Web Service

  • Web Service 是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。
  • 根据 W3C 的定义,Web 服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。
  • 尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据 SOAP 协议进行传递 XML 格式消息。无论定义还是实现,Web 服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的 Web 服务。另外,虽然 WSDL 不是 SOAP 服务端点的必要条件,但目前基于Java 的主流 Web 服务开发框架往往需要 WSDL 实现客户端的源代码生成。一些工业标准化组织,比如 WS-I,就在 Web 服务定义中强制包含 SOAP 和 WSDL。
  • Web Service 是一种比较“重”和“老”的 Web 接口技术,目前大部分应用于金融机构的历史应用和比较老的应用中。

1.3 SOAP

  • SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 。具体实现可以搜索 Web Services简单实例 ; SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
  • SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。
    soap协议又分为soap 1.1 和 soap 1.2 两个版本
  • 这两个协议间的区别在于soap 1.1里存在soapAction请求头,而soap 1.2没有,soap 1.2里用了action来代替,两者的wsdl文件也不同,体现在命名空间和定义service差别里。

二、SOAP注入

1、SOAP 注入查找

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

2、wsdl分析

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

3、靶机搭建

docker pull jeffzh3ng/fuxi
docker run -itd --name fuxi_docker -p 5000:50020 jeffzh3ng/fuxi:latest

4、漏洞分析

  • 首先访问靶机

img

  • 一般存在注入的地方发生在数据查询处
  • 查看4个功能点功能:AddUser 为添加用户,list 为列举用户,getuser 为获取用户,delete 为删除用户
  • 这里存在漏洞处为获取用户信息处
  • 点击GetUser->Message Layout查看它的消息布局

img

  • 发现username处为string 此处传入为字符串,可能存在注入
  • 通过查看它的wsdl去分析

img

  • 查看此处的GetUser元素,此处元素为内部创建的子元素,这里子元素名称为username,
  • 类型为string
  • 往下看,查找它的operation,也就是它的操作活动

img

  • 找到GetUserHttpGetIn 这个可以看作是 Get User Http Get In 为获取用户的输入
    以此为突破口进行测试
  • 这个靶场的数据库为PostgreSQL 数据库,那么要用 PostgreSQL注入来做
    点击 Test Form输入payload进行测试
  • 输入 aaa‘ or 1=1–

img

  • 再输入aaa’ or 1=2–

img

  • 可以说明此处存在注入,可以进一步使用联合查询来获取用户名密码,或者抓包使用sqlmap进行测试。
  • 按照示例把get请求转换为post

img

  • 保存到文件并给参数标注*
POST /Vulnerable.asmx/GetUser HTTP/1.1
Host: 192.168.10.70
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.10.70/Vulnerable.asmx?page=op&tab=test&op=GetUser&bnd=VulnerableServiceSoap&ext=testform&username=admin%E2%80%99+union+select+aaa%2Caaa--
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: ASP.NET_SessionId=473D11DF9D40456C68995931
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 89

page=op&tab=test&op=GetUser&bnd=VulnerableServiceSoap&ext=testform&username=aaa*
  • 使用sqlmap进行测试
sqlmap -r 222 --dbs --is-dba --dbms=PostgreSQL

img

三、api接口测试工具

  • 市面上常见的API请求构建工具形式有独立的桌面程序、命令行程序、浏览器扩展、Web服务等几种,比较著名的API请求构建工具有Postman、Swagger Inspecter、Soap UI、Apigee等等。
  • 国内有一些公司也通过Web服务的方式提供API测试功能,例如网易数帆的GoAPI,还有像curl这样免费的不需要图形界面也可以直接进行HTTP API测试的工具。

1、soapui使用

  • soapui官网:https://www.soapui.org/
  • soapUI是一个开源测试工具,通过soap/http来检查、调用、实现Web Service的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。把一个或多个测试套件(TestSuite)组织成项目,每个测试套件包含一个或多个测试用例(TestCase),每个测试用例包含一个或多个测试步骤,包括发送请求、接受响应、分析结果、改变测试执行流程等。

img

  • 下载文件后加执行权限,执行后可打开安装向导

img

  • 安装完成后点击finish即可打开soapui

img

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

img

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

img

  • 修改传入数值点击运行也可以进行测试,为api测试常用工具之一

img

img

  • 单击ok后添加api所对应的参数username和password,然后点击绿色三角即可对fuxi api进行测试

2、burp的wsdler插件

  • 抓取访问wsdl的数据包,然后右键,选择Extensions->wsdler->parse wsdl

img

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

img

3、hoppscotch

  • 之前有很多API请求构建工具都是商业软件,或者免费版仅仅提供很有限的功能。其中曾经最流行的Postman在收费之后就很被开发者社区诟病。有位印度裔小哥Liyas Thomas对此极为不爽,就发布了一个新的工具叫:Postwoman,显而易见,Postwoman是专怼Postman的。
  • 2020年8月,Liyas小哥可能觉得一直怼Postman也挺low的,2020年8月决定改名叫hoppscotch了。

3.1 hoppscotch安装

yum -y install docker
docker run --rm --name hoppscotch -p 3000:3000 hoppscotch/hoppscotch:latest
  • 会开始自动pull镜像并开始启动,过程非常慢

img

img

  • 添加fixi的/api/v1/token接口,添加相应的参数和值便可得到结果

img

4、postman

  • Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。
  • 它主要是用来模拟各种HTTP请求的(如:get/post/delete/put..等等),Postman与浏览器的区别在于有的浏览器不能输出Json格式,而Postman更直观接口返回的结果。

4.1 postman安装

tar -xzvf postman-9.15.2-linux-x64.tar.gz
cd Postman
./Postman

img

img

  • 单击Create Collection->add a request创建一个测试任务

img

img

5、工具总结

  • SoapUI 相对Postman 多了一个Soap 协议测试。
  • SoapUI 的功能复杂,界面使用多窗口方式实现,交互复杂,学习成本高,对于使用人员有较高要求。
  • SoapUI的API测试,自动测试需要更强的编程技能。
  • Postman 脱胎于Chorme 的插件,只支持Http 协议的测试。
  • Postman 的界面采用Tab形式,类似chrome 的操作方式,界面简单,功能设计简洁,工程的组织只有Collection 和folder ,层级,概念简洁,易学,易用,对于项目组的学习成本低。
  • Postman 的API 测试,自动测试对于编程的要求相对低一些
  • 如果只是进行Http,https 接口测试建议使用Postman 作为API测试工具,最主要的理由是,简洁易用,学习成本低。
  • hoppscotch功能跟postman功能相似,优点是开源免费、轻量级、页面美观,基于浏览器,不需安装,使用方便。

赞 (0)

猜您想看

201-B10-metasploit

metaspl...

01

第二章:两个链表求交集

c语言链表[h...

02

201-A12-文件包含漏洞(下)

一、PHP中文...

03

101-D8-jenkins

jenkins...

04

Linux彻底删除Nginx

1.先执行一下...

05

201-B4-更为细致的信息搜集

一 端口及服务...

06

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论