接口测试小记
2023-1-14 20:29:16 Author: only security(查看原文) 阅读量:10 收藏

接口测试很常见,但是每次遇到接口测得都不够全面,这里做个记录。

遇到了一个swagger,可以批量测试,但是如果想深入,得批量替换参数,结果发现参数替换很麻烦,之前都是在burp里直接替换,但是后面发现burp的替换参数那个模块太费劲了,不方便改,于是有了这篇文章

接口测试,笔者习惯导入postman或者是用lijiejie师傅的swagger-exp

0x001 postman

这里导入到postman

导入即可 这里需要修改的一个值,baseUrl的属性

填入api请求的域名地址,保存

最后一步,删除postman的header头,以及挂上burp的代理

挂上burp的代理,这一步是为了方便看请求和响应

点run,继续点run

就可以在burp上看到请求了

swagger的请求,很多接口大概率都是401或者访问不通的,安全防护越来越好、开发人员的安全意识越来越强、接口安全的普及,但是,100个里面有1个接口没有做好限制,基本就是前功尽弃,如下:

这里返回了公司的所有信息,如地址,姓名、手机号、commpanyid等等字段 一般来说,这就算是未授权信息泄露了,但是如何深入其他的接口呢,比如这些响应是200的接口,又有参数

那么我们可以把获得的json数据,进行转换,如下:

转换后

这里转换成post的参数,一来直接加在url后面,如http://xxxx/api?a=1&b=2&c=3

二来也可以进行参数替换

然后根据参数对应关系,编写autoDecoder脚本:

# -*- coding:utf-8 -*-  
# author:f0ngf0ng  
  
# 替换参数  
  
from flask import Flask,Response,request  
from pyDes import *  
import base64,hashlib,json  
  
app = Flask(__name__)  
  
@app.route('/encode',methods=["POST"])  
def encrypt():  
    param = request.form.get('dataBody')  # 获取  post 参数  
    param_headers = request.form.get('dataHeaders')  # 获取  post 参数  
    param_requestorresponse =  request.form.get('requestorresponse')  
    print(param_headers )  
    param_headers = param_headers.replace("company_id=voluptate","company_id=xxxxx")
    param_headers = param_headers.replace("userid=voluptate","userid=yyyyyy")
  

    if param_requestorresponse == "request":  
        print(param_headers.strip() + "\r\n\r\n\r\n\r\n" + param.strip())  
        return param_headers.strip() + "\r\n\r\n\r\n\r\n" + param.strip()  
    else:  
        return param.strip()  
  
  
@app.route('/decode',methods=["POST"]) # 不解密  
def decrypt():  
    param = request.form.get('dataBody')  # 获取  post 参数  
    param_headers = request.form.get('dataHeaders')  # 获取  post 参数  
    param_requestorresponse =  request.form.get('requestorresponse')  
    print(request.form)  
    if param_requestorresponse == "response":  
        return param_headers.strip() + "\r\n\r\n\r\n\r\n" + param.strip()  
    else:  
        return param.strip()  
  
if __name__ == '__main__':  
    app.debug = True # 设置调试模式,生产模式的时候要关掉debug  
    app.run(host="0.0.0.0",port="8888")

如果请求包为json,同样也可以进行替换

autoDecoder配置如下:

实际效果:

0x002 swagger-exp

lijiejie师傅的swaagger-exp工具修改如下:(顺带一提,lijiejie师傅牛逼!)

  1. 增加了直接的代理,发送请求的时候直接发送到burp的默认代理(http://127.0.0.1:8080)
  2. 增加了{{baseUrl}}自定义,有些时候会碰到api的{{BaseUrl}}值错误,导致无法正常发起批量请求 还修改了其他的一些小细节,不过无关紧要 直接输入命令:
python3 swagger.py http://vuln.com/swagger/v1/swagger.json vuln.com

就可以在burp看到请求和响应了

同样,可以在autoDecoder里修改参数,这里不再举例

0x03 总结

  1. 在批量发起含有正确参数的请求后,可以通过burp作为中间桥梁,配合xray,这样测得更全面,而且更细致了
  2. 二开工具可以更好的用于到实际的项目、学习中,也可以更深入学习代码、学习架构
  3. 工具与工具之间可以进行联动,最近对于这点深有感触,在于能不能思考到工具之间的组合

0x04 引用

https://github.com/lijiejie/swagger-exp lijiejie师傅的swagger-exp工具

https://www.postman.com/ postman工具

https://github.com/f0ng/autoDecoder  替换请求包、响应包

公众号回复【接口测试】,获取修改后的swagger-exp脚本。


文章来源: http://mp.weixin.qq.com/s?__biz=MzkzNzE4MTk4Nw==&mid=2247485773&idx=1&sn=b8b8d74117230bb991f8eb8e99125d51&chksm=c2921f01f5e59617579d5329bcf2efc93e3278a6a9f5fa1d1c8f206fb7ad167bc2e3b3831c35#rd
如有侵权请联系:admin#unsafe.sh