Files
poc2jar/pythonexp/poc2jarpiliang.py
2021-08-08 21:44:33 +08:00

92 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding:utf-8 -*-
# author:f0ngf0ng
# 入参为yml文件 url.txt yml文件里有时间条件、关键词条件
# command写死在java里直接python3 xxxx.py xx.yml即可
# java输出为文件
# 如http://x.x.x.x ————————vul
# http://x.x.x.x ———————
import requests
import csv,yaml,os
from concurrent.futures import ThreadPoolExecutor
import sys
proxies = {
'http':'127.0.0.1:8080',
'https':'127.0.0.1:8080'
}
def exp(url,ymlfile):
global words
# 获取当前脚本所在文件夹路径
curPath = os.path.dirname(os.path.realpath(__file__))
# 获取yaml文件路径
yamlPath = os.path.join(curPath + '/..' , ymlfile)
# open方法打开直接读出来
f = open(yamlPath, 'r', encoding='utf-8')
cfg = f.read()
d = yaml.load(cfg, Loader=yaml.FullLoader) # 用load方法转字典
for _ in d:
if _ == "method":
method = d[_] # 请求方法
if _ == "uri":
uri = d[_] # 请求的uri
if _ == "param":
param = d[_] # 加在uri后面的带入的参数
if _ == "data":
data = d[_] # 请求体,如果没有的话,就为空,后续发请求需要判断
if _ == "others":
headers = d[_] # 将others参数设置为headers头
if _ == "condition":
words = d[_]['words'] # 关键字条件
time = d[_]['time'] # 时间条件
for value in headers: # 因为有纯数字需要转成string
if type(headers[value]) == int:
headers[value] = str(headers[value])
try:
if method == "GET":
requests.packages.urllib3.disable_warnings()
r = requests.get(url + uri + "?" + param, headers=headers, timeout=5, verify=False )
elif( method == "POST" ):
requests.packages.urllib3.disable_warnings()
r = requests.get(url + uri + "?" + param, data=data ,headers=headers, timeout=5, verify=False )
elif( method == "PUT" ):
requests.packages.urllib3.disable_warnings()
r = requests.put(url + uri + "?" + param, data=data ,headers=headers, timeout=5, verify=False )
# 把响应头和响应体转换成string
total = ""
for _ in r.headers:
total = total + _ + ":" + r.headers[_] +'\n'
total = total + r.text
if words != "":
if words in total:
url = url + '…………vul'
print(url)
except Exception as e:
pass
if __name__ == '__main__':
data = open('pythonexp/url.txt') # 批量IP
ymlFile = sys.argv[1]
reader = csv.reader(data) # 50是线程
with ThreadPoolExecutor(50) as pool:
for row in reader:
if 'http' not in row[0]:
url = 'http://' + row[0]
else:
url = row[0]
pool.submit(exp, url , ymlFile)