created | updated |
---|---|
2023-01-10 23:21:35 +0800 |
2023-01-13 12:48:26 +0800 |
遇到了一个swagger,后面发现参数替换很麻烦,之前都是在burp里直接替换,但是后面发现burp的替换参数那个模块太费劲了,还不好改,于是有了这篇文章
swagger个人习惯导入postman或者是用lijiejie师傅的swaggerexp
导入即可 这里需要修改的一个值,就是baseUrl 填入api的地址,记得保存
最后一步,删除postman的header头,以及挂上burp的代理
就可以在burp上看到请求了 swagger的请求,很多接口大概率都是401或者访问不通的,安全防护越来越好、开发人员的安全意识越来越强、接口安全的普及,但是,100个里面有1个接口没有做好限制,基本就是前功尽弃,如下:
这里返回了公司的所有信息,如地址,姓名、手机号、commpanyid等等字段 一般来说,这就算是未授权信息泄露了,但是如何深入其他的接口呢,比如这些响应是200的接口,又有参数 那么我们可以把获得的json数据,进行一个转换,如下: 转换后 这里转换成post的参数,一来直接加在url后面,如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,同样也可以进行替换
当然,也可以配合xray,这样测得更全面,而且更细致了