目录
爬虫获取
需求
代码
从Burp Suite请求体中获取参数
爬虫获取
需求
url参数分三种情况
1. json格式
2. form格式
3. xml格式
已知入参情况有两种
1. Burp Suite 拷贝的请求头信息
2. 爬虫抓取的请求头信息
已知参数位置情况有两种
1. url路径中
2. post请求中的参数
最终返回结果
从入参中获取所有参数已 key :value 方式展示出
代码
get_params.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-import jsondef get_params(url, data, json_b):params = {}if '?' in url and '=' in url:data = url.split('?')[1]if data[:1] == '?':data = data[1:]elif data:if json_b:params = dataelse:try:params = json.loads(data.replace('\'', '"'))return paramsexcept json.decoder.JSONDecodeError:passelse:return Noneif not params:parts = data.split('&')for part in parts:each = part.split('=')if len(each) < 2:each.append('')try:params[each[0]] = each[1]except IndexError:params = Nonereturn paramsif __name__ == "__main__":#url = "http://172.16.12.129:8080/aaaa.php?aaa=3&bbb=4"url = "http://172.16.12.129:8080/aaaa.php"data = 'handle=<link rel=attachment href="file:///etc/passwd">&insert=Generate+%3E%3AD%3C'#data = {"handle": "aaa", "insert": "bbb"}print(get_params(url, data, isinstance(data, dict)))
从Burp Suite请求体中获取参数
import re
import json
import urllib.parseclass Requester(object):protocol = "http"host = ""method = ""action = ""headers = {}data = {}params = {}"""path: burp suite保存的请求头文件路径ssl: 判断http/httpsproxies: 代理"""def __init__(self, path, uagent, ssl, proxies):try:# 读取请求文件with open(path, 'r') as f:content = f.read().strip()except IOError as e:print("找不到文件")exit()try:content = content.split('\n')# 解析 method 和 操作 URIregex = re.compile('(.*) (.*) HTTP')self.method, self.action = regex.findall(content[0])[0] # 请求方法、请求路径# 分析标头for header in content[1:]:name, _, value = header.partition(': ')if not name or not value:continueself.headers[name] = valueself.host = self.headers['Host']# 分析 user-agentif uagent != None:self.headers['User-Agent'] = uagent# 分析 data(区分json、form、xml格式)self.data_to_dict(content[-1])# 处理HTTPS请求if ssl == True:self.protocol = "https"self.proxies = proxiesself.params = get_params(self.action, self.data, isinstance(self.data, dict))except Exception as e:print("错误的格式或原始数据 !")def data_to_dict(self, data):if self.method == "POST":# JSON 数据if self.headers['Content-Type'] and "application/json" in self.headers['Content-Type']:self.data = json.loads(data)# XML 数据elif self.headers['Content-Type'] and "application/xml" in self.headers['Content-Type']:self.data['__xml__'] = data# FORM 数据else:for arg in data.split("&"):regex = re.compile('(.*)=(.*)')for name,value in regex.findall(arg):name = urllib.parse.unquote(name)value = urllib.parse.unquote(value)self.data[name] = value