POC 指 Proof of Concept(概念验证),是指一个可行性验证,即通过构建一个小型系统或单项功能来验证技术的可行性和正确性。POC 脚本,就是为了验证特定安全漏洞或安全问题而编写的脚本,可用于检测该漏洞是否存在,以及漏洞的利用方式和危害范围。
Python 中常用的函数库
sys
sys模块是与python解释器交互的一个接口
requests
requests 是 Python 中一个广泛使用的 HTTP 库,用于发送 HTTP
import requests
# 发送 GET 请求
response = requests.get('https://www.csdn.com')
print(response.status_code)
print(response.text)
# 发送 POST 请求
data = {'username': 'root', 'password': 'root'}
response = requests.post('https://www.example.com/login', data=data)
print(response.status_code)requests.get(url,headers,data,verify=False,proxies=proxy,timeout=10) url —— 请求的url headers —— 请求时构造的请求头 data —— 请求时带入的数据 verify —— 取消https告警 proxies —— 代理设置 timeout —— 请求响应超时处理
struct
struct模块提供了用于在字节字符串和Pytdon原生数据类型之间转换函数
struct模块基本功能
按指定格式将python数据转换为字节流数据;
将字节流数据转换为指定的python数据类型;
处理二进制文件数据;
处理C语言中的结构体。
base64
对bytes类型数据进行编码,并得到bytes类型的密文数据(实现Base64编码和解码的标准模块)
import base64
base64.b64encode() —— 编码函数 base64.b64decode() —— 解码函数
re
re模块是python提供的一套关于处理正则表达式的模块
- findall 查找所有. 返回list
search 会进⾏匹配. 但是如果匹配到了第⼀个结果. 就会返回这个结果. 如果匹配不上search返回的则是None
match 只能从字符串的开头进⾏匹配
finditer, 和findall差不多. 只不过这时返回的是迭代器(重点)
compile() 可以将⼀个⻓⻓的正则进⾏预加载. ⽅便后⾯的使⽤
split() 函数用于根据正则表达式模式的匹配结果分割字符串,并以列表形式返回分割后的子串
sub() 函数用于在字符串中查找并替换所有符合正则表达式模式的子串,然后返回替换后的字符串
BeautifulSoup
BeautifulSoup 是一个 Python 第三方库,用于解析 HTML 和 XML 文档。可以使用它来遍历、搜索和修改文档,并提取所需的信息。
from bs4 import BeautifulSoup
html = """
<html>
<head><title>这是一个标题</title></head>
<body>
<p class="content">这是一个段落。</p>
<a href="https://www.example.com">这是一个链接</a>
</body>
</html># 创建 BeautifulSoup 对象
soup = BeautifulSoup(html, 'html.parser')
# 选取元素
title = soup.title
p = soup.select_one('p.content')
a = soup.select_one('a[href="https://www.example.com"]')
# 获取元素属性
print(title.text)
print(p.text)
print(a['href'])
json
import json
# 将 Python 对象转化为 JSON 格式
dict_data = {'name': 'dream', 'age': 21}
json_data = json.dumps(dict_data)
print(json_data)
#将 JSON 格式转化为 Python 对象
json_str = '{"name": "dream", "age": 21}'
dict_obj = json.loads(json_str)
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()
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()
socket
Python提供了两个基本的socket模块。一个是socket,它提供了标准的BSD Socket API;另一个是socketServer,它提供了服务器中心类,可以简化网络服务器的开发
socket.socket(family, type[,proto]):创建并返回一个新的 socket对象
sock.setsockopt( lvl, optname, val ):设置指定 socket选项的值
sock.sendto( data[, flags], addr ):通过 socket发送数据
sock.close():关闭 socket