【Python小练习】使用Python编写POC 脚本-下篇
常用库
urllib – 用于操作URL的模块
urllib.request -- 打开和读取url
urllib.error -- 包含 urllib.request 抛出的异常
urllib.parse -- 解析 URL
requests – 实现的简单易用的HTTP库,比urllib更加简洁
requests.get(url,headers,data,verify=False,proxies=proxy,timeout=10)
url —— 请求的url
headers —— 请求时构造的请求头
data —— 请求时带入的数据
verify —— 取消https告警
proxies —— 代理设置
timeout —— 请求响应超时处理
re – 正则表达式模块,使用简洁的字符表达式,匹配字符串中想要的结果
使用的正则语法,建议将请求源码复制到在线正则匹配网站,进行正则语法构造。
正则在线测试:https://c.runoob.com/front-end/854
json – 将Python数据处理成json格式或者将json数据处理成Python数据格式
json.dumps 将 Python 对象编码成 JSON 字符串
json.loads 将已编码的 JSON 字符串解码为 Python 对象
lxml – XML和HTML的解析器,其主要功能是解析和提取XML和HTML中的数据,也可以定位特定元素及节点的信息
lxml 定位元素节点涉及到Xpath语法
from lxml import etree
html = etree.HTML(response.text)
result = html.xpath('xpath语句')
print(result)
optparse – 命令行参数模块,在Poc中经常看到一些参数 -h(–hlep)、-u(–url)等参数,就是使用的此模块
parser = optparse.OptionParser() # 导入OptionParser对象后才可以使用add_option
parse.add_option('-u','--user',dest='user',action='store',type=str,metavar='user',help='Enter User Name!!') # 添加需要的参数和内容
parse.set_defaults(v=1.2) #也可以这样设置默认值
options,args=parse.parse_args()
base64 – 对字符串进行base64加密解密模块
base64.b64encode() —— 编码函数
base64.b64decode() —— 解码函数
multiprocessing – 多进程,在处理一些数据量较大的请求时可以使用多进程来较少处理时间。(Pyhton的多线程是假的并不是并发而是串发的)
from multiprocessing import Process
def Poc():
xxxx
....
if __name == '__main__':
for i in rangge(5):
thread = Process(target=Poc,args=str(i))
thread.start()
Thread.join()
通用脚本模版
实际情况怎么方便怎么来
import requests
import re
from requests.packages.urllib3.exceptions import InsecureRequestWarning
def Poc(url):
target_url = url + 'payload' #验证存在漏洞的url
# 代理池设置
proxy = {
'http':'127.0.0.1:812',
'http':'127.0.0.1:8123'
}
# 请求头部分构造
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36', #模拟浏览器请求
'cookie':'xxxxxxxxxxxxxx', #有些请求需要带上cookie才可以请求到想要的内容
'Connection':'close' #关闭多余的连接请求
}
data = {'name':'xxxx','value':'xxxx'} #向url中带入请求的数据
# 使用try except对异常进行处理
try:
requests.packages.urllib3.disable_warnings(InsecureRequestWarning) #取消SSL验证告警
response = requests.get(url=target_url,headers=headers,data=data,verify=False,proxies=proxy,timeout=10) #请求漏洞的url
if response.status_code == 200:
result = re.search(r'_____',response.text,re.I) #使用正则匹配页面请求,下划线处填写正则规则
print('正在获取结果:{}'.format(result.group(1)))
else:
print('请求失败:{}'.format(response.status_code))
except Exception as e:
print('请求失败: {}'.format(e))
if __name__ == '__main__':
url = str(input('请输入检测的url:'))
Poc(url)