利用Chrome或Firefox保存的Har文件http/https请求,可用于遍历字典提交From表单.
少说废话直接上代码
Github地址:https://github.com/H0xMrLin/wuppwn
#encoding:utf-8
import sys;
#Yeah,我没有注释。懒得写
HelpContent="""
Help:
+=====================================================================================================================+
WupPwn.py
Python3 WupPwn.py HarFileName [pd=filedName:Value|pd=filedName:$DicFileName] [if=responseContent] [ifnot=responseContent] [ifend=responseContent] [out=OutFileName]
HarFileName har文件名 谷歌或Firefox web抓包保存为har entries下可以看到所有请求的地址及参数 可以删除一些不必要的请求让程序更快运行
pd 设置上传数据 字段名:值 或者 字段名:字典
if=xxx 如果内容是xxx那就记录 可多个用||隔开
ifnot=xxx 如果内容不是xxx哪就记录 可多个用||隔开
ifend=xxx 如果内容是xxx那就记录并结束 可多个用||隔开
out=xx.txt 输出记录到文件
see=on|off 查看每次尝试破解响应
Current request method have: GET/POST
*且目前不支持http请求头带 RFC 标识 (RFC-eg: ':method':'POST')可以检查是否有
md5=XXX 将 指定字段名的值进行md5加密再暴力破解 一般=password||passwd||pwd ...
th=5 设置5个线程同时运行
版本警告:
《!》: 切勿用作违法使用,仅供渗透测试,如非法使用该工具与作者无关。 Makerby:Pwn0_+x_X
+=====================================================================================================================+
""";
if(len(sys.argv) <=1):
print(HelpContent);
sys.exit(1);
if(sys.argv[1].lower()=="h" or sys.argv[1].lower()=="-h" or sys.argv[1].lower()=="help"or sys.argv[1].lower()=="-help"):
print(HelpContent);
sys.exit(1);
import os;
import json;
import urllib.request;
import requests;
import socket;
import hashlib;
import threading;
import traceback;
import uuid;
import copy
from hyper.contrib import HTTP20Adapter;
socket.setdefaulttimeout(3);
CAllowRequestMethod=["get","post"];
HARFile=sys.argv[1];
harfp=open(HARFile,"rb");
harContent=harfp.read();
HarJSON=json.loads(harContent);
Body=HarJSON["log"]
print("Version :"+Body["version"]);
print("Request Count :"+str( len(Body["entries"])))
AimUrlAPar={};
for reqBody in Body["entries"]:
AimUrlAPar[reqBody["request"]["url"]]={};
AllowRequest="×";
if(reqBody["request"]["method"].lower() in CAllowRequestMethod):
AllowRequest="√";
else:
print(" "*5,"[",AllowRequest,"]",reqBody["request"]["method"],"tt"+reqBody["request"]["url"].split("?")[0])
continue;
print(" "*5,"[",AllowRequest,"]",reqBody["request"]["method"],"tt"+reqBody["request"]["url"].split("?")[0])
Parameter= reqBody["request"]["queryString"] if reqBody["request"]["method"].lower()=="get" else reqBody["request"]["postData"]["text"]
#print(Parameter)
if(reqBody["request"]["method"].lower()=="post"):
if "application/json" in reqBody["request"]["postData"]["mimeType"]:
Parameter=json.loads(Parameter)
else:
Parameter=reqBody["request"]["postData"]["params"];
tmpPar={};
for item in Parameter:
tmpPar[item["name"]]=item["value"];
Parameter=tmpPar;
AimUrlAPar[reqBody["request"]["url"]]["paramtertype"]=reqBody["request"]["postData"]["mimeType"].lower()
elif(reqBody["request"]["method"].lower()=="get"):
Par={};
#print("get")
for item in Parameter:
Par[item["name"]]=item["value"]
Parameter=Par;
headers={};
headNotContains=["Content-Length"];
for headFiled in reqBody["request"]["headers"]:
if headFiled["name"] in headNotContains:
continue;
headers[headFiled["name"]]=headFiled["value"];
cookies={};
for headFiled in reqBody["request"]["cookies"]:
cookies[headFiled["name"]]=headFiled["value"];
#print(cookies);
AimUrlAPar[reqBody["request"]["url"]]["arguments"]=Parameter
AimUrlAPar[reqBody["request"]["url"]]["header"]=headers
AimUrlAPar[reqBody["request"]["url"]]["cookies"]=cookies
AimUrlAPar[reqBody["request"]["url"]]["method"]=reqBody["request"]["method"].lower()
AimUrlAPar[reqBody["request"]["url"]]["httpversion"]=reqBody["request"]["httpVersion"].lower()
#系统存储
kPMd5={};
#用户参数设定
pds=[];
ifC=[];# 最小优先级
ifN=[];# 其二优先级
ifE=[];# 最大优先级
otFile="";
ascMD5=[];
testsee="off";
see="off";
th=0;
#因为我不太喜欢指令的参数化模块 所以我直接写了个硬代码 注:python的模块有时候很讨厌.
def setbaseParamters(Key,Value):
global see,otFile,testsee,th;
Key=Key.lower();
if(Key=="pd"):
FILEDSUM=Value.split(":");
filedName=FILEDSUM[0];
filedValue=FILEDSUM[1];
if(filedValue[0]=="$"):
apArr=[];
filedP=open(filedValue[1:],"r");
redValueLines=filedP.readlines();
for val in redValueLines:
apArr.append({filedName:val.replace("n","")});
pds.append(apArr);
else:
pds.append([{filedName:filedValue}]);
elif(Key=="if"):
ifcItems=Value.split("||");
for item in ifcItems:
ifC.append(item);
elif(Key=="ifnot"):
ifcItems=Value.split("||");
for item in ifcItems:
ifN.append(item);
elif(Key=="ifend"):
ifcItems=Value.split("||");
for item in ifcItems:
ifE.append(item);
elif(Key=="md5"):
md5Items=Value.split("||");
for item in md5Items:
ascMD5.append(item);
elif(Key=="see"):
see=Value.strip().lower();
elif(Key=="out"):
otFile=Value.strip().lower();
elif(Key=="testsee"):
testsee=Value.strip().lower();
elif(Key=="th"):
th=int(Value.strip().lower());
return;
curThs={};
def pdLoop(index,havePar={},myThead=None):
global curThs,kPMd5;
for item in pds[index]:
FiledName=list(item.keys())[0];
FiledValue=list(item.values())[0];
if(FiledName in ascMD5):
m5Obj=hashlib.md5(bytes(FiledValue,encoding="UTF-8"));
Sourcevalue=FiledValue;
FiledValue=m5Obj.hexdigest();
kPMd5[FiledValue]=Sourcevalue;
havePar[FiledName]=FiledValue;
if(index>0):
if(th>0 and len(curThs)>%s"%(text,otFile));
return ;
for index in range(len(sys.argv)-2):
parIndex=index+2;
parItem= sys.argv[parIndex];
try:
Item= parItem.split("=");
key=Item[0];
value=Item[1];
setbaseParamters(key,value);
except:
print("Error paramter(%s)"%(parItem));
#print(AimUrlAPar);
if(len(pds)-1>=0):
pdLoop(len(pds)-1)
总结
到此这篇关于Python如何利用Har文件进行遍历指定字典替换提交的数据的文章就介绍到这了,更多相关Python用Har文件遍历指定字典替换提交的数据内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!
Python相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile
热门相关搜索
路由器设置
木托盘
宝塔面板
儿童python教程
心情低落
朋友圈
vim
双一流学科
专升本
我的学校
日记学校
西点培训学校
汽修学校
情书
化妆学校
塔沟武校
异形模板
西南大学排名
最精辟人生短句
6步教你追回被骗的钱
南昌大学排名
清朝十二帝
北京印刷学院排名
北方工业大学排名
北京航空航天大学排名
首都经济贸易大学排名
中国传媒大学排名
首都师范大学排名
中国地质大学(北京)排名
北京信息科技大学排名
中央民族大学排名
北京舞蹈学院排名
北京电影学院排名
中国戏曲学院排名
河北政法职业学院排名
河北经贸大学排名
天津中德应用技术大学排名
天津医学高等专科学校排名
天津美术学院排名
天津音乐学院排名
天津工业大学排名
北京工业大学耿丹学院排名
北京警察学院排名
天津科技大学排名
北京邮电大学(宏福校区)排名
北京网络职业学院排名
北京大学医学部排名
河北科技大学排名
河北地质大学排名
河北体育学院排名



