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

背景:

  在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 &

程序代码:

  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3
  4
  5 """
  6 基于HTTP的Burpsuite、Sqlmap等的Payload收集器
  7 作者:陈然
  8 版本:V1.0.1
  9 联系:WeChat-Number -> cr1914518025
 10 """
 11
 12
 13 #脚本信息配置:
 14 _author  = "陈然"
 15 _nicky   = "挖洞的土拨鼠"
 16 _version = "v1.0.1"
 17 _version_string = """\033[0;32m
 18             基于HTTP的Burpsuite、Sqlmap等的Payload收集器
 19             作者:陈然
 20             版本:V1.0.1
 21             联系:WeChat-Number -> cr1914518025
 22             操作系统:支持Linux、Unix、MacOS X
 23 \033[0m"""
 24
 25 #引入依赖的库文见、包
 26 import sys
 27 import time
 28 import pcap
 29 import dpkt
 30 import urllib
 31 import logging
 32 import datetime
 33 from threading import Thread
 34 from optparse import OptionParser
 35
 36
 37 #配置全局设置
 38 reload(sys)
 39 sys.setdefaultencoding("utf-8")
 40 logging.basicConfig(filename="./burpsuite_payload_logger.error.log",level=logging.INFO,filemode=‘a‘,format=‘%(asctime)s-%(levelname)s:%(message)s‘)
 41
 42
 43 #定义数据报文栈结构
 44 class packet_queue(object):
 45     """存储报文的数据结构"""
 46     def __init__(self):
 47         """创建数据报文结构队列"""
 48         logging.info("创建报文存储结构")
 49         self.size = 0#初始化队列数目
 50         self.packet_list = []#初始化队列
 51     def push(self,packet):
 52         """向队列中追加一个数据报文"""
 53         logging.info("添加一个报文信息")
 54         self.packet_list.append(packet)
 55         self.size += 1#队列数据报文+1
 56     def pop(self):
 57         """当队列中的报文数目多于0个的事后,获取队列中的一个数据报文"""
 58         logging.info("获取一个报文信息")
 59         if self.size != 0:
 60             ret = self.packet_list[0]
 61             self.packet_list.remove(self.packet_list[0])
 62             self.size -= 1
 63             return ret
 64         else:
 65             return None
 66     def isempty(self):
 67         """返回队列是否为空"""
 68         if self.size == 0:
 69             return True
 70         else:
 71             return False
 72
 73
 74 #定义Payload记录文件类
 75 class PayloadFile(object):
 76     def __init__(self):
 77         self.file = "./PayloadLogger.txt"
 78     def logit(self,string):
 79         with open(self.file,‘a‘) as fw:
 80             logging.info("记录一个Payload报文数据!")
 81             now = str(datetime.datetime.now())
 82             fw.write("^"*150+"\n"+now+"\n"+string+"^"*150+"\n\n\n\n")
 83
 84 #定义全局变量
 85 PacketQueue = packet_queue()#报文存储队列
 86 PayloadLogging = PayloadFile()
 87
 88
 89 #定义全局函数
 90 def http_request_analyst(string):
 91     """解HTTP请求报文"""
 92     logging.info("分析报文请求")
 93     global PayloadLogging
 94     PayloadLogging.logit(string)
 95     string = string[0:-1]
 96     method = string.split(" ")[0]
 97     print "\n"
 98     print "\033[0;32m^\033[0m"*120
 99     print "\033[1;32;40mMethod:%s\033[0m"%str(method)
100     path = string.split(" ")[1]
101     print "\033[1;32;40mPath:%s\033[0m"%str(urllib.unquote(path))
102     protover = string.split(" ")[2].split("\r\n")[0]
103     print "\033[1;32;40mProtocol Version:%s\033[0m"%str(protover)
104     string = string.replace("HTTP/1.","\\r\\n\\r\\n\\r\\n")
105     headers = string.split("\\r\\n\\r\\n\\r\\n")[-1].split("\r\n\r")[0]
106     for header in headers.split("\r\n")[1:]:
107         header = header.split(":")
108         try:
109             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]))
110         except Exception,reason:
111             logging.error(reason)
112             continue
113         print "\033[1;32;40m%s\033[0m"%hstr
114     print "\033[1;32;40mData:%s\033[0m"%string.split("\\r\\n\\r\\n\\r\\n")[-1].split("\r\n\r")[-1].replace("\n","")
115     print "\033[0;32m^\033[0m"*120
116     print "\n"
117
118
119 #定义Burpsuite报文获取类
120 class Packet_Sniffer_Filter(Thread):
121     """嗅探并过滤报文"""
122     def __init__(self,destinationip,siteport,iterfacename):
123         """创建报文嗅探器"""
124         logging.info("创建嗅探器")
125         Thread.__init__(self,name="Packet_Sniffer_Filter")#调用父类构造函数
126         self.dip = destinationip#过滤器目的地址
127         self.port = siteport#站点的HTTP服务端口
128         self.name = iterfacename#本机的嗅探网卡名称
129         self.sniffer = pcap.pcap(name=self.name)#设置嗅探器嗅探指定网卡
130         self.sniffer.setfilter("tcp port %s"%self.port)#初步过滤
131     def run(self):
132         """过滤IP地址"""
133         logging.info("嗅探器线程开始运行")
134         global PacketQueue
135         while True:
136             for packet_time,packet_data in self.sniffer:
137                 packet = dpkt.ethernet.Ethernet(packet_data)#使用dpkt解pcap格式报文
138                 dip = tuple(map(ord,list(packet.data.dst)))#获取目的IP地址
139                 dip = str(str(dip[0])+"."+str(dip[1])+"."+str(dip[2])+"."+str(dip[3]))
140                 logging.info("开始过滤站点")
141                 if dip == self.dip:#过滤目的IP地址
142                     logging.info("压入一个站点报文")
143                     PacketQueue.push(packet.data.data.data)#加入待分析队列
144                 else:
145                     logging.info("过滤一个站点报文")
146                     continue
147
148
149 #定义报文分析写文件类
150 class Packet_Analyst(Thread):
151     """报文分析器"""
152     def __init__(self):
153         """创建报文分析器"""
154         logging.info("创建解析器")
155         Thread.__init__(self,name="Packet_Analyst")
156     def run(self):
157         """分析队列中的报文"""
158         logging.info("解析器线程开始运行")
159         global PacketQueue
160         while True:
161             while not PacketQueue.isempty():
162                 packet = PacketQueue.pop()
163                 logging.info("获取一个站点报文")
164                 if packet == ‘‘:
165                     continue
166                 try:
167                     logging.info("解析一个站定报文")
168                     http_request_analyst(packet)
169                 except Exception,reason:
170                     logging.error(reason)
171                     continue
172             time.sleep(1)
173
174
175 if __name__ == "__main__":
176     logging.info("程序启动")
177     parser = OptionParser()
178     parser.add_option("-t","--dstip",dest="target",help="Target Site IP Addresses!")
179     parser.add_option("-p","--port",dest="port",help="Target Site Port!")
180     parser.add_option("-i","--ifname",dest="name",help="Interface Name!")
181     parser.add_option("-v","--version",dest="version",action="store_true",help="Show Version!")
182     parser.add_option("-d","--docs",dest="docs",action="store_true",help="Show Documents!")
183     parser.add_option("-r","--requirments",dest="reqr",action="store_true",help="Show Requriments!")
184     (options, arges) = parser.parse_args()
185     if options.version:
186         print _version_string
187         exit(0)
188     if options.docs:
189         print """\033[0;32m
190             使用手册--使用于V1.0.1版本
191             [1] python PayloadLogger.py -t 192.168.1.1 -p 80 -i eth1 &
192         \033[0"""
193         exit(0)
194     if options.reqr:
195         print """\033[0;32m
196             [+] sudo pip install pypcap
197             [+] sudo pip install dpkt
198         \033[0"""
199         exit(0)
200     if options.target in ["",None]:
201         logging.info("程序缺乏目标站点地址参数,退出运行!")
202         print "\033[0;31m[-] 请指定目标站点!\033[0m"
203         exit(0)
204     if options.port in ["",None]:
205         logging.info("程序缺乏目标站点端口参数,默认端口80!")
206         print "\033[0;32m[-] 目标站点获取端口失败,将使用默认端口80\033[0"
207         options.port = "80"
208     else:
209         try:
210             options.port = int(options.port)
211             options.port = str(options.port)
212         except Exception:
213             logging.info("程序获取目标站点端口参数错误,默认端口80!")
214             print "\033[0;32m[-] 目标站点获取端口失败,将使用默认端口80\033[0"
215             options.port = "80"
216     if options.name in ["",None]:
217         logging.info("程序缺乏网卡参数,退出运行!")
218         print "\033[0;31m[-] 请指定网卡\033[0m"
219         exit(0)
220     logging.info("程序初始化")
221     PacketSniffer = Packet_Sniffer_Filter(options.target,options.port,options.name)
222     PacketSniffer.start()
223     PacketAnalyst = Packet_Analyst()
224     PacketAnalyst.start()
225     PacketSniffer.join()
226     PacketAnalyst.join()

运行效果:

  

原文地址:https://www.cnblogs.com/KevinGeorge/p/8650367.html

时间: 2024-10-13 04:22:46

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

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

一.通配符简介: 一般来讲,通配符包含*和?,都是英文符号,*用来匹配任意个任意字符,?用来匹配一个任意字符. 举个例子使用通配符查看文件,可以很名下看到打卡的文件是/etc/resolv.conf: 1 └─[$]> sudo head -5 /???/r????v.c??f 2 # 3 # macOS Notice 4 # 5 # This file is not consulted for DNS hostname resolution, address 6 # resolution, o

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

一.CORS领域问题: 1.CORS的介绍请参考:跨域资源共享简介 2.HTML5中的XHR2级调用可以打开一个socket连接,发送HTTP请求,有趣的是,上传文件这里恰恰是multi-part/form-data恰恰符合要求,不需要preflight,所而且可以带cookie等认证信息.完美的绕过了所有的跨域共享防御机制. 1 <script language=javascript type=text/javascript> 2 functiongetMe() 3 { 4 varhttp;

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

秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知,不问自晓,古今行事,未之有也 」 我们都知道如今流行的框架:Vue.Js.AngularJs.ReactJs.已经逐渐应用到各个项目和实际应用中,它们都是MVVM数据驱动框架系列的一种. 在了解MVVM之前,我们先回想一下前端发展的历史阶段,做到心中有数,才会更好理解. 这段回想历史.由于网上就可查不少资料,

(5.2)uboot详解——省电模式(番外)

(5.2)uboot详解--省电模式(番外) 这篇文章将对uboot的省电模式进行分析,这里介绍的内容与uboot的启动其实关系不大,如果关心uboot的启动过程,可以跳过这节以及后面的小节,直接到第6章. 省电模式和cpu的工作模式(异常)其实关系也不大,省电模式主要是依靠时钟来分类的,因为外设的工作必须要时钟,当停止给外设提供时钟的时候,相应的外设也会停止工作,所以省电管理就是根据控制是否给相应的设备提供时钟或电源来达到节电的目的. ARM有四中节电模式: 普通模式:这种模式下,会给所有的外

编程珠玑番外篇

1.Plan 9 的八卦 在 Windows 下喜欢用 FTP 的同学抱怨 Linux 下面没有如 LeapFTP 那样的方便的工具. 在苹果下面用惯了 Cyberduck 的同学可能也会抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻烦的事情. 其实一点都不麻烦, 因为在 LINUX 系统上压根就不需要用 FTP. 为什么呢? 因为一行简单的配置之后, 你就可以像使用本机文件一样使用远程的任何文件. 无论是想编辑, 查看还是删除重命名, 都和本机文件一样的用. 这么神奇的功能到底如何

(apache+tomcat集群+memcached番外篇)单台tomcat的session信息的2种持久化方式

为什么要实现搭建tomcat集群环境呢?主要因为单个tomcat无论从吞吐量和并发数上,会达到一定的极限.如果访问量超过单个tomcat的承受能力的话,tomcat一般要么拒绝提供服务,要么直接宕掉.所以,必须要依靠tomcat集群技术.举个最简单的例子,拿"送快件"比喻,如果一个人,5分钟送一件,一小时之内,送10个,一个人完全能胜任这项工作.假设现在到了双十一,要求1小时,送100个, 那怎么办?只能安排更多的人加入"送快件"这项工作中来.这其实和集群一个道理.

[反汇编练习-番外篇] Delphi专攻

[反汇编练习-番外篇] Delphi专攻 鉴于OD在Delphi反汇编这一块的薄弱,狠狠研究了下当前的手段. 大家常用的反编译除了OD(ollydebug).IDA,还有Delphi用的Dede,C#用的NetReflector,还有几个跟踪易语言的.其实反汇编的利器还有很多,在吾爱云盘中收录了: AS3.Sorcerer.v2.72.CracKed.By.REPT.7z 28-Mar-2014 10:59 5M C32Asm.rar 28-Dec-2013 14:52 1M DJ.Java.D

Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是很完全所以导致部分同学在有些地方做开发的时候遇到了一些阻力,收到这些朋友同学们的咨询反馈之后我也做了一些反思和总结,其中一部分同学说少了GlobalConstants这个文件(这个真心占的不少),还有一部分就是说源码的问题,所以今天特意抽了时间补充下这两点! (一)关于GlobalConstants

[uboot] (番外篇)uboot 驱动模型(转)重要

[uboot] uboot流程系列:[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)[project X] tiny210(s5pv210)从存储设备加载代码到DDR[uboot] (第一章)uboot流程——概述[uboot] (第二章)uboot流程——uboot-spl编译流程[uboot] (第三章)uboot流程——uboot-spl代码流程[uboot] (第四章)uboot流程——uboot编译流程[uboot] (第五章)uboot流程——u