在渗透测试中使用fuzz技术

在渗透测试中使用fuzz技术

黑客教程hacker2018-02-13 18:10:0319654A+A-

    序言:文中翻泽自sans.org,有删节。在學習sulley的流程中发觉汉语参考文献非常少,因此抛砖引玉翻泽一会儿,期待对學習合同fuzz检测的同班有协助。文中合适做为學習sulley合同检测流程中参考文献,假如必须學習sulley的应用能够参照其word表格。

背静

前不久,人们收到了1个渗透测试的顶目。分配任务的当时,团体里有的同班承担wifi渗入,有的承担web应用渗入,我分在的任務是对内网開放的网络端口开展检测。我的关键检测范畴包含:从外界能够浏览的体系插口,不包含顾客测的漏洞利用,不包含web应用,不包含外界的资源优化配置类的进攻(例如域名管理类的进攻),不包含账户密码猜解。

早期的扫面中并沒有发觉许多有趣的木马病毒,这也在预料之中。只有Nmap的扫面也发觉了某些令人难忘的目的。如图所示。目的布署了1个CheckPoint虚拟主机做为无线VPN连接。总共開放了2个网关。

Figure-1.png

264网关造成了我的爱好,历经几番核实获知它是CheckPoint VPN 服务端用于通讯的1个入口,应用的是这种私有合同,称为SecuRemote。这一合同是沒有加锁的。网站能寻找某些这一合同存有数据泄露的木马病毒,只有人们顾客这里全是版本更新,找不到这些己知的难题。如今是我的資源也是某些合同材料和大把剩下的任務時间,我先做一会儿合同fuzzing。

合同剖析

做合同fuzz的前提条件也是要了解自身检测的合同。SecuRemote做为私有合同,沒有详尽的word表格,并且因为我没发觉许多人做为反向剖析。因此我得根据抓包自身剖析合同。在Google上检索了一会儿,寻找好多个他人抓的互联网包文档。全是她们抓包让他人帮剖析难题的。根据剖析这种互联网包,我剖析出了SecuRemote合同的某些关键点。

3次握手以后,CheckPoint服务端会上传2个4字节的大包。针对特殊的CheckPoint虚拟主机和服务端而言这2个字节看上去是确定的。在服务端上传下一个包以后,服务器端回到了1个4字节的包。跟服务端发的第一位包很像。

第三个包上传字符串"securemote"到虚拟主机。最终是1个NULL的完毕字节。开使的4个字节看上去是大端储存的后边字符串的长短。由于0x0b恰好是"securemote0"的长短。第三个包发了以后,服务器返回了1个一样的带字符串长度的包,包括了某些虚拟主机的基本信息。依据以前板本的CheckPoint exp,能够获得大量的合同数剧。尽管无法简易的鉴别出每1个比特位意味着的含义。可是依据上边的剖析,还可以寻找某些有趣的朦胧检测目的。

四字节的长短标示。无论怎样,在合同中发觉了标示长短的字节,必须要对它开展朦胧检测。好多个确定的\x00的字节。降低了人们开展枚举组成的频次。在字符串末尾应用NULL结束符。由于合同出示了长短标示,因此结束符没有务必的。因此检测一会儿结束符找不到的状况都是非常好的挑选。

下一阶段也是打算检测样例,开展朦胧检测了。

道具挑选

我较为喜爱的自动化朦胧器是Sulley,1个用python进行的朦胧检测架构。只有开发人员Pedram早已已不保护Sulley。应用Peach都是1个非常好的挑选,peach应用XML开展合同叙述,相对而言我更喜爱python的词法。在sulley中,人们应用基础的数据类型:字符串区,数子区,分隔符和外部值来叙述合同。每这种种类的数剧能够自動基因变异来开展朦胧检测。Sulley也出示了某些高級的作用来叙述繁杂合同,例如测算数剧段距离和开展引言校检。大量详尽的sulley使用说明能够参照Sulley的顶目word表格。下边的角本是对服务端上传的4个字节开展检测。列举应用了s_byte()这一界定一个字节的涵数。将下边的角本储存到sulley的文件名就能够开使检测了。

  1. #!/usr/bin/env python # Fuzzing the initial 4-byte packet from client to CheckPoint VPN server.import time import sys from sulley import * # Time to wait between mutations SLEEP_TIME=0.5# Time to wait before claiming a host is unresponsive TIMEOUT=3# number of crashes to observe before skipping the remainder of a groupCRASH_THRESHOLD=3 # Initialize the Sulley mutation descriptor s_initialize("SecuRemote-Initial-Packet") s_byte("\x51",full_range=True) s_static("\x00\x00\x00")print "Total mutations: " + str(s_num_mutations()) + "\n"print "Minimum time for execution: " + str(round(((s_num_mutations() * (SLEEP_TIME))/3600),2)) + " hours."print "Press CTRL/C to cancel in ", for i in range(5): print str(5 - i) + " ", sys.stdout.flush()time.sleep(1)# For debugging purposes, uncomment these lines to see Sulley's mutations# in hex dump format #print "Hex dump mutation output:" #while s_mutate():# print s_hex_dump(s_render()) sess = sessions.session(session_filename="SecuRemote-Initial-Packet.sess", sleep_time=SLEEP_TIME, timeout=TIMEOUT, crash_threshold=CRASH_THRESHOLD)# Tie this session to the SecuRemote-Simple-String fuzzing casessess.connect(s_get("SecuRemote-Initial-Packet")) # Change this IP address to the target systemtarget = sessions.target("127.0.0.1", 264)# Add the target to the session (can be repeated for multiple targets) sess.add_target(target)# Kick off the fuzzer, monitoring with WebUI on localhost:26000 sess.fuzz()

很感到遗憾历经上边的检测,并沒有发觉令人难忘的結果。以便更深层次的对目的体系开展评定,必须人们的Sulley保持某些合同情况,对合同开展更深层次的检测。

对有情况的合同开展检测

在SecuRemote的实例中,从服务端发送给VPN虚拟主机的头2个包对人们而言并不足打动人。服务端互换的第三个包才更趣味,包括了1个字符串和长短值,及其NULL结束符。以便检测VPN虚拟主机对这一部位的畸型包的回到,人们必须在sulley中先模似前边的二步。随后再上传那步的畸型包。Sulley中早已出示了有关的插口。在上传每1个畸型包以前,Sulley会查验1个称为pre_send的回调函数。根据界定人们自身的回调函数,写入socket,进行复位的头2个4字节包的上传,随后载入虚拟主机的回到。以后再上传人们的检测畸型包。开展检测的角本给出:

  1. #!/usr/bin/env python from sulley import *SLEEP_TIME=0.5TIMEOUT=3CRASH_THRESHOLD=3# The function Sulley will run prior to sending each mutation.  We leverage# it to setup the target system with the initial packets and response in the# protocol exchange prior to our target packet. def preconn(sock):    sock.send("\x51\x00\x00\x00")    time.sleep(0.5)     sock.send("\x00\x00\x00\x21")    # Set a socket timeout on the recv so we aren&#039;t waiting indefinitely if    # the server crashed from a previous test case.    sock.settimeout(5)    response = sock.recv(4)     print "Setup response: ",    for i in response:        print "%02x" % ord(i),     print s_initialize("SecuRemote-Simple-String")# Create a size field, which is based on the content of the named block# Sulley uses ">" to indicate big-endian values, "<" is little-endian s_size("client-name-string", length=4, endian=">")# This is the block of data used for filling in the s_sizeif s_block_start("client-name-string"):    # "securemote" is the default string     s_string("securemote")     # constant null terminator    s_byte("\x00") s_block_end() sess = sessions.session(session_filename="Securemote-Simple-string.sess", sleep_time=SLEEP_TIME, timeout=TIMEOUT, crash_threshold=CRASH_THRESHOLD)# Call preconn() before each mutation is sent to setup the target sess.pre_send = preconn


根据这类方法,能够再次对别的的恳求包开展检测。

成效

人们总共开展了很多夜里的fuzz检测,根据纪录的数剧发觉,的确发觉了某些小难题,某些畸型的数据文件会造成VPN业务重新启动,超过Dos的作用。顾客对人们的这一汇报也很认同。


点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 4条评论
  • 怎忘森槿2022-05-28 04:22:05
  • host is unresponsive TIMEOUT=3# number of crashes to observe 
  • 澄萌做啡2022-05-28 06:12:39
  • e = sock.recv(4)     print "Setup response: ",    for i&nb
  • 弦久鹿岛2022-05-28 05:04:48
  • et sess.pre_send = preconn根据这类方法,能够再次对别的的恳求包开展检测。成效人们总共开展了很多夜里的fuzz检测,根据纪录的数剧发觉,的确发觉
  • 性许猫卆2022-05-28 06:40:13
  • 传,随后载入虚拟主机的回到。以后再上传人们的检测畸型包。开展检测的角本给出:#!/usr/bin/env python from sulley import *SLEEP_T

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理