背景:

  在WEB安全的学习过程中,了解过了原理之后,就是学习各种Payload,这里面蕴藏着丰富的知识含量,是在基本上覆盖了漏洞原理之后的进一步深入学习的必经之路。无理是Burpsuite还是Sqlmap、Awvs亦或是其他工具,包括人工收工构造的Payload都有很高的记录和学习意义,一方面如上所说的提高对WEB安全的掌握和理解,另一方面也对WEB安全自动化测试做积累。

需求:

  记录WEB安全各种报文payload的工具

开发语言:

  Python2.7

依赖第三方库:

  pypcap

  dpkt

程序逻辑:

  配置指定网卡和站定信息,记录本机对指定站定的渗透过程中所产生的所有报文信息。

支持协议和系统:

  目前是1.0.1版本 只支持HTTP/MacOSX

安装和使用:

   无需安装,只需要安装好第三方库支持即可

   python PayloadLogger.py -t 192.168.1.1 -p 80 -i eth1 &

程序代码:

 #!/usr/bin/env python
# -*- coding:utf-8 -*- """
基于HTTP的Burpsuite、Sqlmap等的Payload收集器
作者:陈然
版本:V1.0.1
联系:WeChat-Number -> cr1914518025
""" #脚本信息配置:
_author = "陈然"
_nicky = "挖洞的土拨鼠"
_version = "v1.0.1"
_version_string = """\033[0;32m
基于HTTP的Burpsuite、Sqlmap等的Payload收集器
作者:陈然
版本:V1.0.1
联系:WeChat-Number -> cr1914518025
操作系统:支持Linux、Unix、MacOS X
\033[0m""" #引入依赖的库文见、包
import sys
import time
import pcap
import dpkt
import urllib
import logging
import datetime
from threading import Thread
from optparse import OptionParser #配置全局设置
reload(sys)
sys.setdefaultencoding("utf-8")
logging.basicConfig(filename="./burpsuite_payload_logger.error.log",level=logging.INFO,filemode='a',format='%(asctime)s-%(levelname)s:%(message)s') #定义数据报文栈结构
class packet_queue(object):
"""存储报文的数据结构"""
def __init__(self):
"""创建数据报文结构队列"""
logging.info("创建报文存储结构")
self.size = 0#初始化队列数目
self.packet_list = []#初始化队列
def push(self,packet):
"""向队列中追加一个数据报文"""
logging.info("添加一个报文信息")
self.packet_list.append(packet)
self.size += 1#队列数据报文+1
def pop(self):
"""当队列中的报文数目多于0个的事后,获取队列中的一个数据报文"""
logging.info("获取一个报文信息")
if self.size != 0:
ret = self.packet_list[0]
self.packet_list.remove(self.packet_list[0])
self.size -= 1
return ret
else:
return None
def isempty(self):
"""返回队列是否为空"""
if self.size == 0:
return True
else:
return False #定义Payload记录文件类
class PayloadFile(object):
def __init__(self):
self.file = "./PayloadLogger.txt"
def logit(self,string):
with open(self.file,'a') as fw:
logging.info("记录一个Payload报文数据!")
now = str(datetime.datetime.now())
fw.write("^"*150+"\n"+now+"\n"+string+"^"*150+"\n\n\n\n") #定义全局变量
PacketQueue = packet_queue()#报文存储队列
PayloadLogging = PayloadFile() #定义全局函数
def http_request_analyst(string):
"""解HTTP请求报文"""
logging.info("分析报文请求")
global PayloadLogging
PayloadLogging.logit(string)
string = string[0:-1]
method = string.split(" ")[0]
print "\n"
print "\033[0;32m^\033[0m"*120
print "\033[1;32;40mMethod:%s\033[0m"%str(method)
path = string.split(" ")[1]
print "\033[1;32;40mPath:%s\033[0m"%str(urllib.unquote(path))
protover = string.split(" ")[2].split("\r\n")[0]
print "\033[1;32;40mProtocol Version:%s\033[0m"%str(protover)
string = string.replace("HTTP/1.","\\r\\n\\r\\n\\r\\n")
headers = string.split("\\r\\n\\r\\n\\r\\n")[-1].split("\r\n\r")[0]
for header in headers.split("\r\n")[1:]:
header = header.split(":")
try:
hstr = "%s:%s"%(str(header[0]),str(header[1])) if header[0] not in ["Referer"] else "%s:%s:%s"%(str(header[0]),str(header[1]),str(header[2]))
except Exception,reason:
logging.error(reason)
continue
print "\033[1;32;40m%s\033[0m"%hstr
print "\033[1;32;40mData:%s\033[0m"%string.split("\\r\\n\\r\\n\\r\\n")[-1].split("\r\n\r")[-1].replace("\n","")
print "\033[0;32m^\033[0m"*120
print "\n" #定义Burpsuite报文获取类
class Packet_Sniffer_Filter(Thread):
"""嗅探并过滤报文"""
def __init__(self,destinationip,siteport,iterfacename):
"""创建报文嗅探器"""
logging.info("创建嗅探器")
Thread.__init__(self,name="Packet_Sniffer_Filter")#调用父类构造函数
self.dip = destinationip#过滤器目的地址
self.port = siteport#站点的HTTP服务端口
self.name = iterfacename#本机的嗅探网卡名称
self.sniffer = pcap.pcap(name=self.name)#设置嗅探器嗅探指定网卡
self.sniffer.setfilter("tcp port %s"%self.port)#初步过滤
def run(self):
"""过滤IP地址"""
logging.info("嗅探器线程开始运行")
global PacketQueue
while True:
for packet_time,packet_data in self.sniffer:
packet = dpkt.ethernet.Ethernet(packet_data)#使用dpkt解pcap格式报文
dip = tuple(map(ord,list(packet.data.dst)))#获取目的IP地址
dip = str(str(dip[0])+"."+str(dip[1])+"."+str(dip[2])+"."+str(dip[3]))
logging.info("开始过滤站点")
if dip == self.dip:#过滤目的IP地址
logging.info("压入一个站点报文")
PacketQueue.push(packet.data.data.data)#加入待分析队列
else:
logging.info("过滤一个站点报文")
continue #定义报文分析写文件类
class Packet_Analyst(Thread):
"""报文分析器"""
def __init__(self):
"""创建报文分析器"""
logging.info("创建解析器")
Thread.__init__(self,name="Packet_Analyst")
def run(self):
"""分析队列中的报文"""
logging.info("解析器线程开始运行")
global PacketQueue
while True:
while not PacketQueue.isempty():
packet = PacketQueue.pop()
logging.info("获取一个站点报文")
if packet == '':
continue
try:
logging.info("解析一个站定报文")
http_request_analyst(packet)
except Exception,reason:
logging.error(reason)
continue
time.sleep(1) if __name__ == "__main__":
logging.info("程序启动")
parser = OptionParser()
parser.add_option("-t","--dstip",dest="target",help="Target Site IP Addresses!")
parser.add_option("-p","--port",dest="port",help="Target Site Port!")
parser.add_option("-i","--ifname",dest="name",help="Interface Name!")
parser.add_option("-v","--version",dest="version",action="store_true",help="Show Version!")
parser.add_option("-d","--docs",dest="docs",action="store_true",help="Show Documents!")
parser.add_option("-r","--requirments",dest="reqr",action="store_true",help="Show Requriments!")
(options, arges) = parser.parse_args()
if options.version:
print _version_string
exit(0)
if options.docs:
print """\033[0;32m
使用手册--使用于V1.0.1版本
[1] python PayloadLogger.py -t 192.168.1.1 -p 80 -i eth1 &
\033[0"""
exit(0)
if options.reqr:
print """\033[0;32m
[+] sudo pip install pypcap
[+] sudo pip install dpkt
\033[0"""
exit(0)
if options.target in ["",None]:
logging.info("程序缺乏目标站点地址参数,退出运行!")
print "\033[0;31m[-] 请指定目标站点!\033[0m"
exit(0)
if options.port in ["",None]:
logging.info("程序缺乏目标站点端口参数,默认端口80!")
print "\033[0;32m[-] 目标站点获取端口失败,将使用默认端口80\033[0"
options.port = ""
else:
try:
options.port = int(options.port)
options.port = str(options.port)
except Exception:
logging.info("程序获取目标站点端口参数错误,默认端口80!")
print "\033[0;32m[-] 目标站点获取端口失败,将使用默认端口80\033[0"
options.port = ""
if options.name in ["",None]:
logging.info("程序缺乏网卡参数,退出运行!")
print "\033[0;31m[-] 请指定网卡\033[0m"
exit(0)
logging.info("程序初始化")
PacketSniffer = Packet_Sniffer_Filter(options.target,options.port,options.name)
PacketSniffer.start()
PacketAnalyst = Packet_Analyst()
PacketAnalyst.start()
PacketSniffer.join()
PacketAnalyst.join()

运行效果:

  

WEB安全番外第六篇--关于通过记录渗透工具的Payload来总结和学习测试用例的更多相关文章

  1. WEB安全番外第四篇--关于SQL盲注

    一.SQL盲注: 看不到回显的,无法从返回直接读取到数据库内容的对数据的猜解,属于盲注. 二.第一种--基于布尔类型的盲注: 这种很简单,最典型的例子,就是挖SQL注入的时候常用的: ''' http ...

  2. WEB安全番外第三篇--关于XXE

    一.什么是XXE 1.XML实体简介 (1)在一段时间中,XML都是WEB信息传输的主要方法,时至今日XML在WEB中作为前后台之间传递数据的结构,依然发挥着重要的作用.在XML中有一种结构叫做实体: ...

  3. WEB安全番外第五篇--关于使用通配符进行OS命令注入绕WAF

    一.通配符简介: 一般来讲,通配符包含*和?,都是英文符号,*用来匹配任意个任意字符,?用来匹配一个任意字符. 举个例子使用通配符查看文件,可以很名下看到打卡的文件是/etc/resolv.conf: ...

  4. WEB安全番外第二篇--明日之星介绍HTML5安全问题介绍

    一.CORS领域问题: 1.CORS的介绍请参考:跨域资源共享简介 2.HTML5中的XHR2级调用可以打开一个socket连接,发送HTTP请求,有趣的是,上传文件这里恰恰是multi-part/f ...

  5. WEB安全番外第一篇--其他所谓的“非主流”漏洞:URL跳转漏洞与参数污染

    一.URL跳转篇: 1.原理:先来看这段代码: <?php if(isset($_GET["url_redircetion_target"])){ $url_redirect ...

  6. .net core番外第2篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入

    本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果. 前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html 正文: Autof ...

  7. Python之路番外(第三篇):Pycharm的使用秘籍

    版本:Pycharm2017.3.4Professional Edition 一.Pycharm的基本使用1.在Pycharm下为你的python项目配置python解释器 file --settin ...

  8. web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史

    秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...

  9. 《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)

    1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何自动化测试,这一篇宏哥在网上找了一个问卷调查,给小伙伴或童鞋们来演示一下.上 ...

随机推荐

  1. win7怎么把软件加入开机启动项

    点击开机菜单进入. 2 然后点击菜单栏中的所有程序. 3 在所有程序中找到‘启动’,这个启动就是开机启动项来的. 4 右键进行打开启动项. 5 把快捷方式复制到开机启动项中.如果找不到快捷方式可以右键 ...

  2. innobackupex参数之 --throttle 限速这个值设置多少合理 原创

    innobackupex参数之--parallel --throttle--parallel 此参数用于开启多个子进程并发备份多个数据文件(注意,一个数据文件只会有一个进程完成备份).可以加快备份速度 ...

  3. js学习笔记18----元素创建操作

    1.父级.appendChild(新的元素) 从后面开始追加子元素. 2.父级.insertBefore(新的元素,被插入的元素) 在指定元素前面开始插入一个新元素. 兼容性:在ie下,如果第二个参数 ...

  4. 支付宝前端开源框架Alice(解决各个浏览器的样式不一致的问题)

    /**************** 网址:https://github.com/sofish/Alice /******************       @charset "utf-8& ...

  5. MATLAB中常用的排列、组合、阶乘函数

    1.求n的阶乘,方法如下:a.factorial(n)b.gamma(n+1)c.v='n!'; vpa(v) 2.求组合(数),方法如下:a.combntns(x,m)    列举出从n个元素中取出 ...

  6. 单精度浮点数(float)加法计算出错

    场景: 一个float型的变量赋值1170601,加上19000000,结果出现错误. 原因: float占用4个字节(32位)存储空间,包括符号位1位,阶码位8位,尾数23位.浮点数精度与它的尾数有 ...

  7. RelativeLayout用代码兑现布局

    RelativeLayout用代码实现布局TextView txt1 = new TextView(this);      RelativeLayout.LayoutParams params = n ...

  8. 转载:QT QTableView用法小结

    出自: http://blog.chinaunix.net/uid-20382483-id-3518513.html QTableView常用于实现数据的表格显示.下面我们如何按步骤实现学生信息表格: ...

  9. endl的读法

    endl是“end line”的缩写,所以它应该念作“endELL”而不是“endONE”.

  10. $.ajax的一般用法

    $.post.$.get是一些简单的方法,如果要处理复杂的逻辑,还是需要用到jQuery.ajax() 一.$.ajax的一般格式 $.ajax({ type: 'POST', url: url , ...