API接口测试

Locks012024-05-16文章来源:SecHub网络安全社区


创建字典命令

crunch 5 5 0123456789 -o 1.txt

API介绍

API:Application Programming Interface,即应用程序编程接口。接口就是一个位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。像谷歌搜索系统,它提供了搜索接口,简化了你的搜索任务。再像用户登录页面,我们只需要调用我们的登录接口,我们就可以达到登录系统的目的。

针对 api 接口的渗透测试主要有以下方法:

-   弱口令测试,可以针对 api 接口尝试弱口令测试来破解 api 的接口;
    
-   如果 api 接口是表单格式的可以尝试 XSS 等测试方法;
    
-   也可以使用抓包进行用户枚举来尝试对 api 接口进行测试;
    
-   针对 api 登录接口也可以尝试万能密码等来进行测试。

https://www.jianshu.com/p/bd59ea71338e

什么是webservice

  我觉得这个webservice有着狭义和广义的定义.  
  广义的来说,webservice差不多就是字面意思:web + service,也就是 服务(service)网络(web)化的意思。他力求的是跨语言,跨平台的,基于web传输的远程调用能力。他没有强调远程调用使用什么协议,所以你可以自由选择,比如soap 协议(可与基于http,smtp,等各种传输协议),或者常见的基于http的json化的数据传输协议,基于dubbo协议的dubbo服务调用都属于web service的一种实现。  
  狭义的来说,这个首先声明,是我参考网上的资料已经自身的一些经历的解读哈。我认为大家经常谈的webservice是指基于soap协议实现的远程服务调用模型。

什么是soap

  saop定义了数据交互中如何传递消息的规则。比如在http中规定了post请求的传参方式,在数据类型不同的情况下可以使用不同的参数方式。在form格式下是 key=v&key1=v1 ,同样soap也是定义这些东西的。

什么是wsdl

  同样的,当我们用http方式去调用一个服务的时候我们只是知道通用的http协议的传参方式还是不够的,我们仍然需要知道目标服务的接口文档,对了,这就是wsdl,每个服务都有的接口文档,在http上可能就是我们手写的一个wiki文档,在soap中就是一个用wsdl规范编写的wsdl文档,每个服务是有能力自动生成这个文档的。wsdl规范了这个文档应该怎么写。

综上所述:soap可以类比http协议,wsdl可以类比一个http服务的接口文档。

1、WSDL
web服务描述语言,是为描述web服务发布的XML语言

在日常的web测试过程中,除了基于浏览器展现技术的客户端应用程序外,基于SOAP协议进行通信的WebService服务也很常见。WebService的出现是为了解决分布式、跨平台、低耦合而实现的不同编程语言之间采用统一的数据通信的技术规范,在应用程序中,常作为独立的业务模块对外提供具体的业务功能或者为前段提供数据处理的业务接口。因SAOP协议中的接口定义使用XML作为描述性语言,这与php、jsp之类的通信交互在渗透测试上还是有很大的差异。

http消息头中包含SOAPAction字段,且消息体为<soapenv:Envelope>封装的xml文本(更多关于WebService的文章请阅读者自行搜索)。正因为WebService这些特征,所以在渗透测试中我们也需要选择能解析SOAP协议和WSDL描述的软件。这里,我们使用的是SoapUI NG Pro 和Burp Suite。他们各自的作用分别是:

    SoapUI NG Pro: 渗透测试流程的发起,通信报文的解析、集合payload之后通信报文的重新组装等。
    Burp Suite: 代理拦截,跟踪通信过程和结果,对通信进行重放和二次处理等。

CsharpVulnSoap

今天新加了一台ova虚拟机,进行添加

添加时,会弹出网卡错误,更改一下自己适合的网卡就好

因为在导出时,他的网卡是wifi联网,所以会出现这种问题

不多bb,先用nmap探测一波端口

nmap -sV -p1-65535 192.168.1.229

80/tcp open  http    Apache httpd 2.4.7 ((Ubuntu))

访问网站后,进行目录扫描

dirsearch -u http://192.168.1.229/Vulnerable.asmx

[15:17:45] 404 -    4KB - /Vulnerable.asmx/.ashx
[15:17:45] 404 -    4KB - /Vulnerable.asmx/.asmx

打开burp

使用burp添加wsdler插件

进入虚拟机,password就是密码

查看IP后,访问网站,通过SOAP来进行交互

url上,如果有wsdl的话,进行解析,操作

http://192.168.1.229/Vulnerable.asmx?wsdl

规定了执行规范

进入burp抓包,右击,Extensions Wsdler ParseWSDL

选择AddUser进行主动探测,Do active scan进行漏洞扫描

渗透笔记

https://blog.csdn.net/qq_33020901/article/details/98482408

API接口类

hoppscotch安装

使用docker直接可完成启动

docker run --rm --name hoppscotch -p 3000:3000 hoppscotch/hoppscotch:latest

随后访问http://IP:3000 成功打开页面代表安装成功。

搭建开源安全工具fuxi

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

其官方API文档链接为:

https://github.com/jeffzh3ng/fuxi/blob/v2.1/docs/fuxi_api_doc_chinese.md

0x01 接口认证

接口认证方式

接口采用进行身份认证 token,访问后端接口均需要带有token字段,token 可以通过get、post等方式传入,但建议将token放在header中。调用方式如下:

GET: http://x.x.x.x/api/v1/who?token=db4bf8e722e8aaf8e352d4349b5d1e5a6095d1d0
POST: {"data": "xxx"}&token=db4bf8e722e8aaf8e352d4349b5d1e5a6095d1d0
Header: {"token": db4bf8e722e8aaf8e352d4349b5d1e5a6095d1d0}

如何获取token

http://172.16.60.22:5000/api/v1/token?username=fuxi&password=whoami
{
  "status": {
    "status": "success",
    "code": 10200,
    "message": "authentication success"
  },
  "result": "4e7fd3ad13654e647fa68da8aa198844ba82054a",
  "timestamp": 1674787530
}

/api/v1/scanner/poc/task

http://172.16.60.22:5000/api/v1/scanner/poc/task?token=4e7fd3ad13654e647fa68da8aa198844ba82054a
{
  "status": {
    "status": "success",
    "code": 10200,
    "message": ""
  },
  "result": [
    {
      "tid": "63d3382e6811834ebfeaa596",
      "name": "poc_task_202301271031",
      "freq": "once",
      "status": "completed",
      "vul_count": 1,
      "op": "fuxi",
      "date": "2023-01-27 02:34:22",
      "end_date": "2023-01-27 02:34:22"
    }
  ],
  "timestamp": 1674787804
}

关于用户权限

fuxi 为默认管理员用户,默认密码为 `whoami`

fuxi 作为管理员具备完全用户管理权限,可以新增用户,修改用户信息、删除用户、修改密码等

普通用户具备平台使用及修改当前用户信息权限

0x02 接口列表

以下所有接口无特殊说明,均需传入token,不再做具体说明

账号管理相关接口

/api/v1/token

接口描述:用户token管理

请求模式

参数

功能描述

GET
username(string, required)  
password(string, required)

获取当前用户token

PUT
username(string, required)  
password(string, required)

刷新当前用户token

poc扫描模块接口

/api/v1/scanner/poc/task

接口描述:新增poc扫描任务,获取当前任务列表

GET请求不需要参数,获取扫描任务列表

POST请求

name(string,required)    任务名称
target(string,required)  扫描对象 逗号相隔
poc(string,required)     扫描插件ID 逗号相隔  all 
threads(int)                  
freq(string,required)      任务周期 once一次  daily weekly monthly
http://172.16.60.22:5000/api/v1/scanner/poc/task?token=4e7fd3ad13654e647fa68da8aa198844ba82054a

{
  "status": {
    "status": "success",
    "code": 10200,
    "message": "The task was created successfully"
  },
  "result": "",
  "timestamp": 1674788296
}

接口类测试的思路总结

有工具能吐吐吐呢,就直接吐吐吐,如同WSDL一样

没有的话呢,就是看API的说明书,如果API一样

但实际上,测试接口类本质都是识别出来http请求