king

ARP欺骗的实现

king 安全防护 2022-12-30 267浏览 0

ARP欺骗是用处很大的一个技术,我们的路由器整天在欺骗我们的PC,没有这个欺骗我们就不能上网。

先稍微说下我们每天经历的ARP欺骗,比如早上开路由器开PC,我们上Google,PC在发送IP包之前(假设Google的IP为173.194.72.94,当然事先要先通过DNS服务器获取Google的IP,这个不多谈)要先这个IP包装配为以太网帧,所以PC必须要知道Google服务器端MAC,才能填充好以太网帧。要想知道Google的MAC地址,我们的PC就要发送ARP广播请求,跟你一个局域网里的所有以太网设备都能收到这个请求,你希望有人告诉自己与173.194.72.94匹配的MAC地址是多少,因为我们的PC跟Google的服务器不在一个局域网里,所以Google服务器没法收到你的ARP请求,但是如果这个局域网中有其他PC知道的话,它收到这个请求就会给你发送ARP应答告诉你,如果没人知道怎么办?只能靠骗了!这个骗子就是路由器,这也是它的一个职责。路由器用自己的MAC地址冒充Google服务器的MAC地址,给你发ARP应答糊弄你,你收到应答后喜得不行,然后把所有帧都发给了路由器。下面我们就看路由器时怎么欺骗你的。

路由器能捕捉到这个局域网里广播帧,假设路由器捕捉到的PC的ARP广播帧写成十六进制为:

[plain]

FFFFFFFFFFFFCE1A8206DA0708060001080006040001CE1A820C6B07C0A8127A000000000000C0A8127B00000B00482A00000D00000060FB5EFB61FB

按以太网帧结构把这个帧分解后为:

[cpp]

FFFFFFFFFFFF—目的MAC,因为是广播帧,所以MAC地址全为1

CE1A8206DA07—源MAC,这里就是你PC的MAC

0806——帧类型(以太网帧都是这个数)

0001—-硬件类型(以太网帧都是这个数)

0800—-协议类型(以太网帧都是这个数)

06—-硬件地址长度(以太网帧都是这个数)

04—-协议地址长度(以太网帧都是这个数)

0001——操作字段(0001为ARP请求,0002为ARP应答)

CE1A820C6B07—源mac,还是你的PC的MAC地址

C0A8127A——-源IP地址,就是你的PC的ip

000000000000—目的mac,因为不知道,所以把这6个字节胡乱填充一下就好

ADC2485E——-目的ip,就是Google的IP

00000B00482A00000D00000060FB5EFB61FB—这18个字节都是填充,就是为了凑够以太网帧最小长度60字节

然后路由器收到PC的ARP广播请求后就给你发送应答,这个应答帧为:

[plain]

CE1A8206DA07000A3501FA1708060001080006040002000A3501FA17ADC2485ECE1A8206DA07C0A8127A00000B00482A00000D00000060FB5EFB61FB

按照以太网帧格式拆分后为:

[cpp]

CE1A8206DA07—目的MAC,ARP应答不是广播帧,它直接把PC的MAC地址当成目的MAC

000A3501FA17—源MAC,这个是冒牌的,值本来该是Google服务器的MAC地址,但是这里路由器用自己的MAC来冒充

0806——帧类型(以太网帧都是这个数)

0001—-硬件类型(以太网帧都是这个数)

0800—-协议类型(以太网帧都是这个数)

06—-硬件地址长度(以太网帧都是这个数)

04—-协议地址长度(以太网帧都是这个数)

0002——操作字段(1为ARP请求,2为ARP应答)

000A3501FA17—源MAC

ADC2485E——-源IP地址,这个必须是ARP请求中的那个目的IP,也就是Google的IP。这个是重中之重,我的代码在这犯过错误,如果PC收到应答后检查这个IP发现与自己请求的目的IP不一样,心说,莫名其妙,我什么时候请求这个IP的MAC地址了?滚!它就会果断抛弃这个帧,然后继续请求,谁知道Google的MAC地址呀!!!

CE1A8206DA07—目的mac也就是PC的MAC地址

C0A8127A——-目的ip,就是PC的IP

00000B00482A00000D00000060FB5EFB61FB—这18个字节都是填充,为了凑够以太网帧最小长度60字节,这个应答完全照抄了请求的填充,这些数都无所谓。

PC在收到这个帧后,就真以为那个MAC地址是Google的,然后就把帧一股脑全发给路由器了。之后你就可以上Google了。

继续浏览有关 安全 的文章
发表评论