文件管理 · 2022年8月15日

pktgen发包教程|发包长度大于1518的发包工具

Ⅰ 发包长度大于1518的发包工具

三款常用IP发包工具介绍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 的安装过程非常简单,首先从前面介绍的网站中下载最新的源代码包,目前为sendip-2.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 包。AntPower 版权所有&; 2003 技术文章http://www.antpower.org 第3 页共14 页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 mole] [mole options] hostname-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 mole load the specified mole (see below)(指定协议类型)-v be verbose(运行时输出详细运行信息,如不指定,运行时不输出信息)(协议类型是以模块的方式指定的,用-p 参数指定)Moles are loaded in the order the -p option appears. The headers fromeach mole are put immediately inside the headers from the previos model inthe final packet. For example, to embed bgp inside tcp inside ipv4, dosendip -p ipv4 -p tcp -p bgp ….Moles 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 10.0.0.1 –id 30.0.0.1 –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1 -v:运行时输出详细运行信息,如不指定,运行时不输出信息 –d r64:用64 字节的随机数值填充IP 包中的数据段 –p ipv4:指定协议类型为IP 协议(IP 协议有自己的相应参数,以i 开头) –iv 4:协议版本为4,即IPV4 –ih 5:指定IP 头的长度为5×4=20 字节 –il 128:指定IP 包的总长度为128 字节 –is 10.0.0.1:指定IP 包的源地址 –id 30.0.0.1:指定IP 包的目的地址AntPower 版权所有&; 2003 技术文章http://www.antpower.org 第4 页共14 页 –p tcp:指定IP 包中封装的包的协议类型(TCP 协议有自己的相应参数,以t 开头) –ts 1379:指定TCP 包的源端口1379 –td 23:指定TCP 包的目的端口为23 -tt 8:指定TCP 包的偏移量即TCP 头的长度,没有TCP 选项时为5,即20 字节,有TCP 选项时需要增加。 30.0.0.1:指定发包的目的主机以上部分为利用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 areno options(对应“4 位首部长度”,表示以32 位即4字节为单位的IP 首部长度,如果没有IP 参数的话,通常为5,表示首部长度为20 字节,如有IP 参数的话,需要调整该值)Type ofService/DifferentiatedServices8 -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,AntPower 版权所有&; 2003 技术文章http://www.antpower.org 第5 页共14 页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: don't 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 fragmentbelongs, measured in 64bit words starting from 0(以8字节长度为单位,指定段偏移量)Time to Live 8 -itNumber of routers the packet can pass through beforebeing discarded(值的范围从0 到255,指定TTL,表示该包可通过的路由器的数目,用于防止包在循环路径上无休止地传递)Protocol 8 -ipProtocol associated with the data. See iana for anuptodate list of assigned numbers(用于定义IP 包内部封装的上层协议的协议号,如TCP 为6,可在IANA的网站上http://www.iana.org/assignments/protocol-numbers获得最新的协议号表)Header checksum 16 -icChecksum of the IP header data (with checksum set tozero)(可指定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 bitAntPower 版权所有&; 2003 技术文章http://www.antpower.org 第6 页共14 页boundaryRR -iorr 791 0 0 7 7 variableUsed to record the route of apacket.(记录包走过的每个路由器, 通常用法是: -iorr0f:ff.ff.ff.ff:10.0.0.234 –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 包后,指针的位置应是3+4×3+1=16,造好后,数据包的格式应该如下:IP 头07 15 16 10.0.0.234(IP1) 20.0.0.234(IP2) 30.0.0.234(IP3) 00(ioeol) tcp20B RR len ptr 4bytes 4bytes 4bytes Ptr具体命令行如下:#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234–ioeol –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1 -ih 10 表示IP 头的长度为10×4 为40 个字节,去除标准的20 个字节长度,为IP选项预留为20 个字节 -iorr 10:10.0.0.234:20.0.0.234:30.0.0.234 中第一个10 表示用16 进制表示的指针的位置,后面为用冒号分隔的三个用点分十进制表示的IP 地址 -ioeol 表示用00 结束IP 选项,并用随机数填充后面未用的IP 头位置以上部分只是以RR 记录路由IP 选项为例,介绍了sendip 中指定IP 选项的方法,当然也可以根据自己的要求发送IP 选项不符合常规的数据包。其他的IP 选项与此雷同,但发送AntPower 版权所有&; 2003 技术文章http://www.antpower.org 第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 技术文章http://www.antpower.org 第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 hasn't.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 技术文章http://www.antpower.org 第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 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234–ioeol –p tcp –ts 1379 –td 23 –tt 8 –tfa 0 –tfs 1 –towscale 0 –toeol 30.0.0.1 -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 有专门的维护网站,可以随时到http://www.nessus.org 网站下载最新的源代码,并获得全面的帮助。目前,NESSUS 最新的版本为2.0.8a。2.2.1. NESSUS 安装方法安装NESSUS 前要知道NESSUS 可能需要的支撑软件包,一个是GTK,通常POSIX系统下的NESSUS 客户端需要GTK,如果你的系统安装了GTK,则必须确保安装了gtk-config 程序,可到ftp://ftp.gimp.org/pub/gtk/v1.2 网站下载最新的GTK 程序,如果只在LINUX/UNIX 系统下安装服务端,则可以不需要GTK 包;另一个是OPENSSL 包,如果希望客户端和服务端的通信采用SSL 方式,则需要OPENSSL 包,可到http://www.openssl.org/下载最新的OPENSSL 包,OPENSSL 包是可选的。NESSUS 有三种安装方法:第一种是利用LINUX 下的LYNX 工具直接从网上安装,这种方法很容易,但安全性低,在此不予详细介绍,可到NESSUS 网站上获取相关信息。第二种方法是使用NESSUS 提供的nessus-installer.sh 工具,直接安装,这种方法简单且安全性比较高。第三种方法是获取源码包,然后分别编译再进行安装。下面分别介绍第二种和第三种方法。AntPower 版权所有&; 2003 技术文章http://www.antpower.org 第10 页共14 页2.2.1.1. 采用nessus-installer.sh 方式安装从NESSUS 网站下载最新的nessus-installer.sh 文件到本地LINUX 目录,然后执行#sh nessus-installer.sh系统会自动安装NESSUS 到你的系统中,中间会需要你提供相关的提示信息,一直按回车即可。2.2.1.2. 采用源码包方式安装如果采用源码包方式进行安装,需要下载四个软件包,并按顺序进行安装。四个软件包分别如下: nessus-libraries libnasl nessus-core nessus-plugins安装时必须按顺序安装这四个软件包。安装前,我们必须获得上面所说的四个软件包,目前版本为2.0.8a: nessus-libraries-x.x.tar.gz libnasl-x.x.tar.gz nessus-core.x.x.tar.gz nessus-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 技术文章http://www.antpower.org 第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 头的长度为5×4=20 字节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( ip : ip, 注:表示IP 层协议采用前面定义的IP 协议包th_sport : port, 注:可在这里直接输入端口th_dport : port, 注:可在这里直接输入端口th_flags : TH_SYN|TH_FIN, 注:设置TCP 状态的SYN 和FIN 标志位th_seq : 0xF1C,th_ack : 0,th_x2 : 0,th_off : 5, 注:TCP 头的长度位5×4=20 字节th_win : 512,th_urp : 0);result = send_packet(tcpip,pcap_active:FALSE);编辑完上面的脚本后,保存退出,运行如下命令:#nasl –t 目的IP 地址测试脚本如:#nasl –t 10.0.0.227 sendpAntPower 版权所有&; 2003 技术文章http://www.antpower.org 第12 页共14 页通过Sniffer 抓包,就会发现有相应的圣诞老人包。在我的使用过程中,发现NESSUS 好像不支持发送带有IP 或TCP 选项的包。具体发包的参数可参考http://www.nessus.org/doc/nasl.html2.3. SNIFFER 工具用SNIFFER 发包时,有两种方式,一种是直接利用Packet Generator 工具,从0 开始用16 进制的方式造一个数据包,这种方法难度较高,因为要自己算出校验和,除非需要重现在网络上抓到的一个16 进制格式的数据包,另外一种方式是利用已经抓到的数据包修改一下,再发送出去,具体实现方法分别如下。2.3.1. 利用Packet Generator 直接造包在SNIFFER 中,选择Tools|Packet Generator 菜单,系统弹出窗口如下:按图中的红色框中的按钮,系统会弹出一个构造包内容的对话框,如下所示:AntPower 版权所有&; 2003 技术文章http://www.antpower.org 第13 页共14 页在上图中可输入包的内容,还可规定发包的个数和包的长度。2.3.2. 利用已抓的包发包利用已抓的包进行修改,可以避免大量的运算和输入,只需要更改自己需要更改的地方,然后发出去即可。如上图所示,按包的大致要求,用其他工具造好包后,用SNIFFER 抓包,或者直接将网络上的可疑包抓过来,然后,用鼠标邮件单击该包,弹出如上图所示的快捷菜单,从中选择Send Current Frame 菜单,系统就会弹出如下图所示的发包窗口:AntPower 版权所有&; 2003 技术文章http://www.antpower.org 第14 页共14 页按要求更改包的内容,即可发送。需要注意的是如果更改了IP 地址或其他头中的内容,则需要更新校验和,对MAC 或选项的更改不需要更改校验和。3. 总结通过对比前面的三种发包工具,我们发现每种工具都有自己的优点和缺点,SENDIP 比较短小而且功能较齐全,比较适合在日常测试中使用,SNIFFER 发包工具最自由,可以发出任何可能的数据包,NESSUS 工具功能比较全面,但在发包方面不如SENDIP,所以,建议如果是测试需要的话,应该采用SENDIP 和SNIFFER 相结合的方式,如果同时还要使用扫描等其他功能,可以采用NESSUS 工具。