三款常用IP发包工具介绍(sendip、nessus 和sniffer).doc_第1页
三款常用IP发包工具介绍(sendip、nessus 和sniffer).doc_第2页
三款常用IP发包工具介绍(sendip、nessus 和sniffer).doc_第3页
三款常用IP发包工具介绍(sendip、nessus 和sniffer).doc_第4页
三款常用IP发包工具介绍(sendip、nessus 和sniffer).doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

三款常用IP发包工具介绍来源: ChinaUnix博客 三款常用IP发包工具介绍AntPower 版权所有© 2003 技术文章第1 页共14 页AntPower技术文章三款常用IP 发包工具介绍小蚁雄心成员郎国军著URL修订版本版本时间修订人说明AntPower 版权所有© 2003 技术文章第2 页共14 页1. 简介在从事网络产品尤其是网络安全产品开发时,我们一直面临着一个问题,就是对产品的TCP/IP 协议栈进行稳定性或安全性测试,确保开发产品在遇到各种不规则的错误的IP 包时仍可正常稳定高效地工作,我们知道,在正常的网络环境中,很难产生错误的IP 包,也很难产生我们想要的错误的IP 包,为此,要完成对产品的测试,我们必须自己来制造各种各样错误的IP 包,本篇的目的就是介绍如何利用各种发包工具来制造自己想要的错误的IP 包。2. IP 发包工具介绍目前,有很多常用的产生IP 包的工具,如sendip、nessus、ipsend、ippacket、sniffer 等,下面我们介绍三种比较常用的工具sendip、nessus 和sniffer。2.1. SENDIP 工具SENDIP 是一个LINUX 下的命令行工具,可以通过命令行参数的方式发送各种格式的IP 包,它有大量的命令行参数来规定各种协议的头格式,目前可支持NTP, BGP, RIP, RIPng,TCP, UDP, ICMP 或raw IPv4 和IPv6 包格式,并且可以随意在包中添加数据。SENDIP 可在各种UNIX 或LINUX 版本中运行,本人使用的是SLACKWARE 8.0 和REDHAT 9.0 两个版本。可在网站http:/www.earth.li/projectpurple/progs/sendip.html中下载最新的源代码或RPM包,目前版本为2.5,源码包大小只有54K。2.1.1. 安装过程SENDIP 的安装过程非常简单,首先从前面介绍的网站中下载最新的源代码包,目前为sendip2.5.tar.gz。在LINUX 系统中执行:#tar xzvf sendip-2.5.tar.gz#cd sendip-2.5#make#make install在系统的/usr/local/bin 目录下会产生一个SENDIP 命令文件,同时,在/usr/local/lib 目录下建立一个sendip 目录,并在其下放置ipv4.so、ipv6.so、tcp.so 等与协议相关的模块文件。通过在命令行下运行这个文件,我们可以产生各种各样我们需要的IP 包,还可以通过运行脚本自动发送大量的IP 包。2.1.2. 发包方法SENDIP 可以发送NTP, BGP, RIP, RIPng, TCP, UDP, ICMP、IPv4 和IPv6 等各种格式的数据包,SENDIP 本身是以模块的方式发送各种协议的数据包,用-p 参数指定协议类型,要发送每种协议的数据包, 必须对该协议的数据包格式有一定的了解。通常发送TCP/UDP/ICMP 数据包时,都必须以IP 包进行封装,然后才可以发出去。本节我们将以TCP数据包为例进行讲述。下面介绍一下SENDIP 的命令行格式,以下为直接执行SENDIP 时的输出:Usage: sendip -v -d data -h -f datafile -p module module optionshostname-d data add this data as a string to the end of the packetData can be:rN to generate N random(ish) data bytes;0x or 0X followed by hex digits;0 followed by octal digits;any other stream of bytes(以指定字节的随机数据填充包中的数据段)-f datafile read packet data from file(以指定数据文件中的内容填充包中的数据段)-h print this message(输出帮助信息)-p module load the specified module (see below)(指定协议类型)-v be verbose(运行时输出详细运行信息,如不指定,运行时不输出信息)(协议类型是以模块的方式指定的,用-p 参数指定)Modules are loaded in the order the -p option appears. The headers from each module are put immediately inside the headers from the previos model in the final packet. For example, to embed bgp inside tcp inside ipv4, do sendip -p ipv4 -p tcp -p bgp .Modules available at compile time:ipv4 ipv6 icmp tcp udp bgp rip ntp(支持的协议类型)通常执行格式如下:#sendip v d r64 p ipv4 iv 4 ih 5 il 128 is id p tcp ts 1379 td 23 tt 8 -v:运行时输出详细运行信息,如不指定,运行时不输出信息d r64:用64 字节的随机数值填充IP 包中的数据段p ipv4:指定协议类型为IP 协议(IP 协议有自己的相应参数,以i 开头)iv 4:协议版本为4,即IPV4ih 5:指定IP 头的长度为5420 字节il 128:指定IP 包的总长度为128 字节is :指定IP 包的源地址id :指定IP 包的目的地址p tcp:指定IP 包中封装的包的协议类型(TCP 协议有自己的相应参数,以t 开头)ts 1379:指定TCP 包的源端口1379td 23:指定TCP 包的目的端口为23-tt 8:指定TCP 包的偏移量即TCP 头的长度,没有TCP 选项时为5,即20 字节,有TCP 选项时需要增加。:指定发包的目的主机以上部分为利用SENDIP 发送一个简单的TCP 数据包的方法,下面结合IP 和TCP 数据包的格式详细介绍IP 和TCP 协议的各种参数。具体各种协议的数据包格式可参考TCP/IP 协议中对各种协议数据包格式的介绍,下面我们只介绍IP 数据包的格式和TCP 数据包的格式:IP 数据包的格式:根据IP 数据包的格式,SENDIP 有如下命令行参数可以指定对应的IP 数据包中参数的值。Field nameSize(bits)SendIPoptionDescriptionVersion 4 -iv Always 4(对应“4 位版本”,通常值为4,表示IPV4)Header length 4 -ihIP header length, measured in 32bit words, 5 if there are no options(对应“4 位首部长度”,表示以32 位即4字节为单位的IP 首部长度,如果没有IP 参数的话,通常为5,表示首部长度为20 字节,如有IP 参数的话,需要调整该值)Type of Service/Differentiated Services 8 -iy服务类型(TOS)字段由8 位组成,其中包括3 位的优先权字段(现已被忽略)、4 位的TOS 子字段和1位未用位但必须置0,4 位TOS 子字段分别代表最小时延、最大吞吐量、最高可靠性和最小费用。4 位只能置其中1 位,使用时只要将设置相应位后运算出十进制值即可。如要设置最大吞吐量位(00001000),只需添加参数iy 8 即可。Total Length 16 -il Total length of IP packet including header and data,measured in octets(指定IP 包的总长度,包括IP 头部分和数据部分,以8 位字节为单位,最长为65535)Identification 16 -iiUsed to help reassembled fragmented packets(指定IP包的标识号,用来帮助重新组装分段的IP 包)-ifr 1 bit: reserved, should be 0-ifd 1 bit: dont fragment(可指定-ifd x,下可为0、1 或r) Flags 3-ifm 1 bit: more fragmets(可指定-ifm x,下可为0、1 或r)Fragment offset 13 -ifWhere in the reconstructed datagram this fragment belongs, measured in 64bit words starting from 0(以8字节长度为单位,指定段偏移量)Time to Live 8 -itNumber of routers the packet can pass through before being discarded(值的范围从0 到255,指定TTL,表示该包可通过的路由器的数目,用于防止包在循环路径上无休止地传递)Protocol 8 -ipProtocol associated with the data. See iana for an uptodate list of assigned numbers(用于定义IP 包内部封装的上层协议的协议号,如TCP 为6,可在IANA的网站上/assignments/protocol-numbers获得最新的协议号表)Header checksum 16 -icChecksum of the IP header data (with checksum set to zero)(可指定IP 首部校验和的值,通常由SENDIP 自动生成,不指定该参数,除非要发出带有错误校验和的包)Source Address 32 -is Duhh.(源地址,以点分十进制方式表示)Destination Address 32 -id Cabbage(目的地址,以点分十进制方式表示)Options Variable -io.No options are required. Any number can be added. Seebelow for details(定义各种IP 选项,如果定义了IP选项,则前面的IP 头的长度值要包括IP 选项的长度,不带IP 选项时,该值为20,带IP 选项时,可设定该值,如果要故意制造不匹配的包,可不符合规范。)如果有IP 选项,还可指定IP 选项的值,SENDIP 支持的IP 选项如下表所示。NameSendIPoptionRFC Copy Class NumberType(seeabove)Length(0 notpresent)DescriptionEOL -ioeol 791 0 0 0 0 0Used as padding if needed(使用该选项后,会自动在IP 头中未用到的位补0)NOP -ionop 791 0 0 1 1 0Do nothing. Often used as paddingso the next option starts on a 32 bitboundaryRR -iorr 791 0 0 7 7 variableUsed to record the route of apacket.(记录包走过的每个路由器, 通常用法是: -iorr0f:ff.ff.ff.ff:34 ioeol,其中iorr 表示记录路由,此时系统会自动将IP 选项号置为07,0f 表示指针,即记录的最后一个IP 地址的指针,系统会自动运算该IP 选项的长度)TS -iots 791 0 2 4 68 variableUsed to record the time at which apacket was processed by anintermediate systemLSR -iolsr 791 1 0 3 131 vairableLoose Source Route - let thesource specify the route for apacket.SID -iosid 791 1 0 8 136 4Rarely used, carries the SATNETstream identifier.SSR -iossr 791 1 0 9 137 variableStrict Source Route - same as LSR,but extra hops are not allowed.SEC791,11081 0 2 130 variable Security, rarely usedE-SEC 1108 1 0 5 133 variable Extended Security, rarely used通常在SENDIP 中指定IP 选项时,格式比较特别,下面我们以RR 记录路由选项为例介绍一下,如果要发送一个记录三个IP 的数据包,需要考虑如下,一是指定IP 头的长度要包括IP 选项的长度,而是要指定RR 记录路由选项的指针位置和IP 地址(本来是由系统自动记录IP 和更新指针位置,但现在必须手工指定),那么记录三个IP 包后,指针的位置应是343116,造好后,数据包的格式应该如下:IP 头07 15 16 34(IP1) 34(IP2) 34(IP3) 00(ioeol) tcp20B RR len ptr 4bytes 4bytes 4bytes Ptr具体命令行如下:sendip d r64 p ipv4 iv 4 ih 10 il 128 is id iorr 10:34:34:34ioeol p tcp ts 1379 td 23 tt 8 -ih 10 表示IP 头的长度为104 为40 个字节,去除标准的20 个字节长度,为IP选项预留为20 个字节-iorr 10:34:34:34 中第一个10 表示用16 进制表示的指针的位置,后面为用冒号分隔的三个用点分十进制表示的IP 地址-ioeol 表示用00 结束IP 选项,并用随机数填充后面未用的IP 头位置以上部分只是以RR 记录路由IP 选项为例,介绍了sendip 中指定IP 选项的方法,当然也可以根据自己的要求发送IP 选项不符合常规的数据包。其他的IP 选项与此雷同,但发送AntPower 版权所有© 2003 技术文章第7 页共14 页前需要详细了解IP 选项的格式,才可正确发送。TCP 数据包的格式:根据TCP 数据包的格式,SENDIP 有如下命令行参数可以指定对应的TCP 数据包中参数的值。Field nameSize(bits)SendIPoptionDescriptionSource port 16 -tsSource port number for the connection(以十进制的方式指定TCP 原端口)Destination port 16 -tdDestination port number(以十进制的方式指定TCP 目的端口)Sequence number 32 -tnNumber of the first data octet in this packet. If SYN bit isset, this is the number of the first data octet of the streamtoo.(指定TCP 序列号,如果不指定则随机产生)Acknowledgmentnumber32 -taIf ACK bit is set, the next sequence number the sender isexpecting to receive.Data offset 4 -ttLength of TCP header in 32 bit words(指定TCP 头的长度,单位是以32bits 也就是4 字节为单位)Reserved 4 -trShould be 0. Note, rfc793 defines this as a 6 bit field, butthe last 2 are used by rfc2481 for ECN as below.Flags: ECN 1 -tfeFlags: CWR 1 -tfcECN extension flags, see rfc2481. (指定TCP 标志位,如果要打开哪一位,就在命令行参数中指定相应位的值,如要设置SYN 状态,只需在命令行加入-tfs 1 即可)Flags: URG 1 -tfu Urgent pointer is significant(同上)Flags: ACK 1 -tfa Acknowledgment field is significant(同上)Flags: PSH 1 -tfp Push function(同上)Flags: RST 1 -tfr Reset the connection(同上)Flags: SYN 1 -tfs Synchronize sequence numbers(同上)AntPower 版权所有© 2003 技术文章第8 页共14 页Flags: FIN 1 -tff No more data from sender(同上)Window 16 -twNumber of octet starting from the one in theAcknowledgement field that the sender is willing toacceptChecksum 16 -tcChecksum of the TCP header (with checksum set to 0),data, and a psuedo-header including the source anddestination IP addresses, IP protocol field and a 16 bitlength of the TCP header and data.Urgent pointer 16 -tuIf URG bit is set, tHe offset of the last octet of urgent datain this packet.Options Variable -to.No options are required. Any number can be added. Seebelow for details.如果有TCP 选项,还可指定TCP 选项的值,SENDIP 支持的TCP 选项如下表所示。NameSendIPoptionRFC TypeLength (0notpresent)DescriptionEOL -toeol 793 0 0Used as padding if needed(用00 填充,表示TCP选项结束,把TCP 头后面的位置用随机数填充)NOP -tonop 793 1 0Do nothing. Often used as padding so the nextoption starts on a 32 bit boundaryMSS -tomss 793 2 4Specify the maximum recieve segment size of thesender as a 16 bit number. Only valid when SYN isalso setWSOPT -towscale 1323 3 3The window size should be leftshifted by the valueof the option (an 8 bit number). Only valid whenSYN is also set.SACKOK -tosackok 2018 4 2Selective Acknowledgement is permitted on thisconnectionSACK -tosack 2018 5 variableSelective Acknowledgement of non-contiguousblocks of data. The data in the option is a series of(left edge)-(right edge) pairs giving, respectively,the first sequence number the has been recieved andthe first that hasnt.TSOPT -tots 1323 8 10Timestamp. The first 4 bytes (TSval) are the timethat the packet was sent, the remaining 4 (TSecr)echo the TSval of a packet that was recieved. TSecris only valid when the ACK bit is set.从上表所示,可以看出,TCP 选项可能只有一个单字节参数,如-toeol 和-tonop,也可能由一个Type 号和一个length 长度以及该length 长度指定的字节数的数据组成的参数,使用时sendip 会自动运算length 的长度,所以,不能随意设定TCP 选项的长度,但需要设定TCP 选项的值。AntPower 版权所有© 2003 技术文章第9 页共14 页在设定TCP 选项时,同样要考虑到TCP 头的长度要包括TCP 选项的长度。TCP 选项数据包的格式大致如下:Kind=3 Len=3 数据:移位数TCP 选项号TCP 选项长度TCP 选项数据占一个字节,总长度为三个字节具体命令行格式可参照如下格式:sendip d r64 p ipv4 iv 4 ih 10 il 128 is id iorr 10:34:34:34ioeol p tcp ts 1379 td 23 tt 8 tfa 0 tfs 1 towscale 0 toeol -towscale 0 :指设置TCP 选项3,长度为自动3,TCP 选项的值即移位数为0-toeol :表示TCP 选项结束,后面用随机数填满TCP 头因为用SENDIP 设定TCP 选项时,不能设定长度,所以,如果要设定长度不正确的包,还要借助其他工具,如SNIFFER,用SNIFFER 抓到SENDIP 发送的包后,再将对应的TCP选项的长度改为不规则的值即可。根据前面介绍的内容,我们已经基本可以掌握用SENDIP 发送各种协议数据包的方法,当然我们还可以利用他发送各种不符合标准的数据包,如校验和错误、长度不正确、状态位不正确等各种我们需要的数据包,在使用时,建议与SNIFFER 搭配使用,以验证SENDIP发出的包是否正确,进行有针对性的测试。2.2. NESSUS 工具NESSUS 是一个非常庞大的工具,它可以提供功能完善的安全扫描服务,还可以提供全面的发包功能,用以构造各种格式的网络通信包。本篇只关注NESSUS 的发包功能。NESSUS 由两个部分组成,一部分是服务器,通常运行在POSIX 系统如LINUX/UNIX系统中,负责扫描和攻击,并收集数据,另一部分是客户端,可以运行在LINUX/UNIX 系统或WINDOWS 系统中,负责接收和显示数据。如果只是用来发包,则只需要服务端即可。NESSUS 有专门的维护网站,可以随时到网站下载最新的源代码,并获得全面的帮助。目前,NESSUS 最新的版本为2.0.8a。2.2.1. NESSUS 安装方法安装NESSUS 前要知道NESSUS 可能需要的支撑软件包,一个是GTK,通常POSIX系统下的NESSUS 客户端需要GTK,如果你的系统安装了GTK,则必须确保安装了gtk-config 程序,可到/pub/gtk/v1.2网站下载最新的GTK 程序,如果只在LINUX/UNIX 系统下安装服务端,则可以不需要GTK 包;另一个是OPENSSL 包,如果希望客户端和服务端的通信采用SSL 方式,则需要OPENSSL 包,可到/下载最新的OPENSSL 包,OPENSSL 包是可选的。NESSUS 有三种安装方法:第一种是利用LINUX 下的LYNX 工具直接从网上安装,这种方法很容易,但安全性低,在此不予详细介绍,可到NESSUS 网站上获取相关信息。第二种方法是使用NESSUS 提供的nessus-installer.sh 工具,直接安装,这种方法简单且安全性比较高。第三种方法是获取源码包,然后分别编译再进行安装。下面分别介绍第二种和第三种方法。AntPower 版权所有© 2003 技术文章第10 页共14 页. 采用nessus-installer.sh 方式安装从NESSUS 网站下载最新的nessus-installer.sh 文件到本地LINUX 目录,然后执行#sh nessus-installer.sh系统会自动安装NESSUS 到你的系统中,中间会需要你提供相关的提示信息,一直按回车即可。. 采用源码包方式安装如果采用源码包方式进行安装,需要下载四个软件包,并按顺序进行安装。四个软件包分别如下:nessus-librarieslibnaslnessus-corenessus-plugins安装时必须按顺序安装这四个软件包。安装前,我们必须获得上面所说的四个软件包,目前版本为2.0.8a:nessus-libraries-x.x.tar.gzlibnasl-x.x.tar.gznessus-core.x.x.tar.gznessus-plugins.x.x.tar.gz然后开始进行安装。1. 安装nessus-libraries#tar xzvf nessus-libraries-x.x.tar.gz#cd nessus-libraries-x.x#./configure#make#make install2. 安装libnasl-x.x.tar.gz (执行与上面相同的操作)3. 安装nessus-core.x.x.tar.gz(执行与上面相同的操作)4. 安装nessus-plugins.x.x.tar.gz (执行与上面相同的操作)5. 如果使用的是LINUX 系统,必须确保/usr/local/lib 路径在/etc/ld.so.conf 文件中,如果是SOLARIS 系统, 必须执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH :/usr/local/lib 命令。6. 执行ldconfig 命令7. 如果不想或不能使用GTK 的客户端,可强制使用命令行方式,这时,在执行第三步编译nessus-core 时,可以使用如下命令:#tar xzvf nessus-libraries-x.x.tar.gz#cd nessus-libraries-x.x#./configure -disable-gtk#make#make installAntPower 版权所有© 2003 技术文章第11 页共14 页执行以上命令后,NESSUS 就已经安装在您的系统中了。2.2.2. NESSUS 的发包方法NESSUS 通常采用脚本方式控制发出的包,下面我们以发送圣诞老人攻击包为例,来介绍如何利用NESSUS 发送数据包。圣诞老人包是通过发送TCP Flag 中同时有SYN 和FIN 标志的数据包,穿透防火墙,来达到攻击的目的。为使用NESSUS 发送攻击包,首先要定义一个脚本,在LINUX 下,执行vi sendp 命令,输入如下内容:srcaddr=this_host(); 注:自动获取当前主机的IP 地址ip = forge_ip_packet( ip_v : 4, 注:IP 协议版本为IPV4ip_hl : 5, 注:IP 头的长度为5420 字节ip_tos : 0,ip_len : 40, 注:在这里输入实际的长度40,因为IP 头和TCP 头都为20ip_id : 0xABA,ip_p : IPPROTO_TCP, 注:内部数据包协议为TCPip_ttl : 255,ip_off : 0,ip_src : srcaddr); 注:可在此直接输入IPport = get_host_open_port(); 注:自动获取当前主机上的可用端口if(!port)port = 139; 注:如果没有可用端口,就自动使用139 端口tcpip = forge_tcp_packet( i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论