3.6 中间人攻击
在标准定义中,中间人攻击(MITM,Man-in-the-middle)是指攻击者跟受害者分别建立独立连接的一种侵入式攻击。中间人攻击最常出现在主机系统之间。前不久曾出现过一个漏洞,它侵入了将用户从非安全网页连接到安全网页的系统。这样攻击者可以窃取那些连接到安全Web服务器的用户的数据。后面一节会介绍这个漏洞。常见的中间人攻击会在本书后面章节中介绍。
SSL strip工具
2009年,安全研究员Moxie Marlinspike在DefCon上发布了SSL strip工具。他介绍了SSL会话劫持的基本概念,这是一种中间人攻击的形式。其中网络攻击者代理的是来自用户的HTTPS请求,而非可以被拦截和篡改的通过HTTP发送的请求。SSL strip可以将这种攻击自动化,允许第三方拦截到安全站点的数据连接。随后,人们制定了HTTP严格传输安全协议( HSTS,HTTP Strict Transport Security Speification)来应对这类攻击,但HSTS的部署进程非常缓慢。时至今日,SSL会话劫持攻击依然广为使用。
本节,我们只会用到一个网卡接口。你的虚拟机中可能配了多个网卡接口。我们需要先检查是否启用了多个虚拟的网卡接口。
在桌面的左上角,点击Xterm 链接打开命令行终端。我们用ifconfig 来确定虚拟机上启用了哪些网卡。
具体的命令是ifconfig | grep "eth" ,它会从所有各式各样的网口中过滤出以太网卡,然后输出显示如下:
如果启用了不止一个网卡,调用命令ifdown 后跟网卡名来将其关闭。举个例子,我们有两个名为eth0 和eth1 的网卡,可以调用ifdown eth0 命令来关闭网卡eth0 。你可以关闭所有不用的网卡。
要让SSL strip中间人攻击(MITM)能工作,你需要两部分信息。首先,需要知道目标的IP地址。其次,需要充当子网网关的路由器的IP地址。由于这种攻击方式只对跟目标相同的第二级网段起作用,所以需要找出我们的默认网关。可以再次利用命令行终端。
在终端会话中调用如下命令:
route -n
或者用带过滤功能的shell命令route -n | grep 'UG' | awk '{print $2}' 直接输出默认网关。
1. 开始攻击:重定向
在开始从SSL会话中收集注入用户凭据一类的信息之前,我们需要先完成一些任务。需要先运行允许我们重定向网络请求的工具。此外,需要重定向攻击主机中抓取的请求,这样才能将用户数据包转发给SSL strip工具。我们先要在Iptables和Arpspoof工具中启用IP转发功能。
下面三步会进行IP转发、arpspoof重定向和端口转发配置。这些命令都是在命令行终端中执行的。启用IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
在这个例子中,我们需要知道受害者或目标主机的IP地址。这是为了避免让所有攻击主机对整个网络发起ARP地址洪水引起注意。在实际的攻击场景中,理想情况下都是针对整个二级网段运行arpspoof (如果不知道受害者的IP地址,这是默认的做法),同时可以选择利用抓包和嗅探工具来进一步判定受害者的IP地址。在有多台主机的环境中,这种做法可能会引起数据的流动变慢,同时使得攻击者被发现的几率加大。命令是:
arpspoof -i eth0 -t victimip default_gateway_ip
建议不要将该进程放到后台执行,而是保留该窗口,重启一个新的终端会话来进行其他操作。
2. 使用iptables建立端口重定向
这一步操作可以帮助攻击者抓取发往HTTP服务器上TCP 80端口的数据,并将其重定向到SSL strip的监听端口。在本例中,对于目标端口和重定向目标,重定向会在TCP的10000端口上完成。攻击者可能会使用任何可用的端口。这里选择的重定向目标也必须为SSL strip设置监听端口。命令如下:
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 10000
如果要禁用PREROUTNIG 规则,你可以将-A 替换成-D 来清除所有在用的规则。
iptables -t nat -F #清空
iptables -t nat -L #检查
iptables 有许多选项。你可以使用命令man iptables 查看其他命令选项。
现在已经一切就绪,可以开始用SSL strip抓取数据了。
在新打开的命令行窗口中启动sslstrip ,运行如下命令来运行SSL strip工具,并开始监听TCP 10000端口:
sslstrip -l 10000
在目标主机上,访问在线邮件服务,如https://www.hotmail.com ,并登录。
使用应用菜单中的快捷键跳到SSLStrip目录。另外打开一个终端窗口,输入如下命令:

你现在应该能看到SSL strip攻击的结果了。
在下面的例子中,用户名和密码都被遮挡处理了。但在你的屏幕上应该是以明文方式可见的。
![]()