ICMP 报文自定制

来源:互联网 发布:csol怒海狂鲨加6数据 编辑:程序博客网 时间:2024/06/09 17:21

看腻了分析ICMP的文章?就是找不到具体实例?


上篇是转载别人的,通过教程成功发送了一堆ICMP 应答包,但是采用的是两败俱伤的方式,

除此之外,包里有我的MAC,IP信息,攻击别人,别人只要一抓包就知道是谁是攻击者,

这种攻击是不可取的,今天准备伪造发送者的信息,(依然是两败俱伤,不过慢慢来,改天再试试构造欺骗包,借刀杀人)

 以下是wireshark截的一个完整的数据包,分析一下,接着开始伪造,然后再用winpcap发送伪造包


表里,无背景的是16进制数据,有背景的分析(解释),最后一栏是字节数,这个包合计是78字节

这是数据包:


分析开始:


20 6a 8a 60 02 09

b8 70 f4 1c c3 08

12

 目的MAC

 源MAC

 

08 00

45 00  ①见后面详解

4

Type IP(0x0800)

Differentiated Services Codepoint: Default (0x00

 

00 40

54 c0

4

Total length:60,包括头部和数据

标识符,用于对较大的上层数据包分段操作,和后面两个字节内容联合使用

 

00 00

80     01

4

Fragment offset:0

TTL      Protocol: ICMP (1)

 

85 bf

 

2

Header checksum 0x85bf (correct)

 用来做IP头部的正确性检测,但不包含数据部分.

路由器会为每个通过的数据包重新计算这个值

 

73 9b 3c be   

73 9b 3c 49

8

SenderIP            

       ReciverIp   到此20字节IP头 分析完毕

 

00 00

24 e2

4

Type code    ICMP头开始

checksum(correct)

 

02 00    

00 00

4

identifier

Sequence number(LE)

 

53 c8 31 01 45 45

 

6

45 45 45 45 45 45 45 45 45 45

45 45 45 45 45 45

16

45 45 45 45 45 45 45 45 45 45

45 45 45 45

14



处解释:IP头部前8bit(一个字节,即1byte)=version(4bit)+header length(4bit),其中version就是IP版本协议号,此处为IPV4→0100(2进制),

header length IP包头长度,本区域值= IP头部长度(单位为bit)/(8*4);由于我们没有加别的什么信息,所以是最小长度20字节,即20x8/(8x4)=5,换成二进制就是0101,

 所以第一个字节 就是01000101(二进制),换为16进制就是45,   

  注:还好我认真看了下IP头部构造,要不然直接看wireshark给的解释Differentiated Services Codepoint(DSCP,差分服务代码点),看到这个概念就快晕了,^_^

00 是服务类型,00是最普通的,优先级最低



ICMP报文被封装在IP数据报内部传输

就是说我们要构造的包为:  以太网头部+IP头部+ICMP头部+ICMP数据

构造开始(括号内为字节数):

目的MAC(6)+源MAC(6)+帧类型-IP0x0800(2)+  偷下懒,我觉得只要改了源mac就能达到我的目标了,走起.

UCHAR buf

OK,我直接贴我实验的截图吧


可以看到IP头部校验和出错,改一下,

改了之后没有什么错误提示了,现在是2014年4月2日 02:57:04,有点晚了,等我明天去舍友电脑上抓包看看到底有没有发送成功.

还要解决一下为什么IP头校验和改变的问题

我构造的发送数据是

u_char buf2[]={
0x20,0x6a,0x8a,0x60,0x02,0x09,//以太网头,目的MAC   此处为舍友MAC
0x00,0x1a,0xa9,0x15,0x6c,0x9b,//以太网头,源MAC,此处为随意填的(真的是随意的么?嘿嘿嘿)
0x08,0x00, //以太网头,帧类型,此处为IP
0x45,0x00, //IP头 版本,长度,服务类型
0x00,0x40, //IP头部和数据总长度
0x54,0xc0,0x00,0x00,//标识符,用于分段操作什么的
0x80,0x01, //TTL,protocol 协议类型,1是ICMP
0x85,0x7f, //IP头部的checksum,校验码,不包含数据部分
0x73,0x9b,0x3c,0xfe,//senderIP
0x73,0x9b,0x3c,0x49,//接收方IP
0x00,0x00, //ICMP type和code
0x24,0xe2, //校验和
0x02,0x00,00,00,//标识符和序列号
0x53,0xc8,0x31,0x01,//发起时间戳
0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,
0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,
0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,
0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45 //填充的32字节数据
};

之后用winpcap发送即可,具体请百度之


让我吐槽一下CSDN的排版问题,可视化控件根本用不了,只能在源代码里改样式,对于我这种没学过CSS(还是什么的,不是很清楚)真心蛋疼,就拿上面这个表格来说

第一列,第二列宽度本来都是1211,觉得太长了,到源代码里把width="1211"改成了width="700",第一列改好了,第二列就不知道怎么改了,晕▄︻┳═一

0 0
原创粉丝点击