没东西水了,而且没成功,索性就放出来吧。
很久以前的案例,由于太过丢人,一直不怎么敢提,有些资源当时也没截完全,就顺手看看吧闲着无聊,开日!
目标是谁好呢?随便找一个吧。
* 电?很 NB,就他了!
外网搜一堆资产,不是自研,就是一些功能简单的前端 Nodejs,一眼能打的资产很少。
怎么办呢?这时候我们发现了一个很好的目标
系统名称 eipplus,一看就是个类似 OA 系统一样的东西,功能一定很多。同时一搜公网资产
很好,很有精神!同代码的站点,非常非常的多,就从他作为突破口!
总而言之,先搞到一套源码先。之后就是开始平淡无奇的供应链环节,辣么多站,总不至于一个都打不下来吧
平淡无奇供应商找个注入
平淡无奇 getshell
平淡无奇发现目标
平淡无奇打死
怎么打死的呢?利用内网数据正好撞到 sysadmin 的密码,然后登录上去后台上传 Logo 图片直接传马成功
下载源码!一看
人当场裂开,怎么还是sourceguardian加密的。当场想哭。不过在这之前,至少我们能见到他们系统内部长啥样以及他们的代码架构具体是啥了。
本地起个环境,大概的模样长这样
随手截的一些图,大伙看个乐呵就行
以及大致的目录结构
到此为止,我们已经拥有了目标代码,只不过是加密的,以及一个同站的高权限后台。但是我们目标系统肯定是没有 sysadmin 权限的
现在我们的方案有几个:
- 配合目录和后台,黑盒寻找未授权打死
- 寻找后门工具/开发者工具,想办法解密然后打死
- 寻找越权,然后从低权限越权到高权限,再利用我们后台传马的功能直接打死目标
看看其他可能的漏洞点,这类系统的漏洞点无非就是几个,我们只要关注如下地方
- 相册
- 附件
- 上传
- 系统环境管理
- 系统更新
都测了一通过后,发现安全做的勉强还行,普通用户都没办法访问系统更新和系统环境管理这些后台功能,相册和附件那没有直接一眼低权可以访问的 getshell 的点
只能第二个方法,我们看看目录结构
对于黑盒看目录结构,我们重点关注几个东西
- 文件管理(filemanager),看看有无未授权
- 开发工具(tools/develops),有没有开发遗留后门
- 各类工具(utils),主要是看有没有未授权
- 日志(log) , 主要是看有没有信息泄漏
- 配置文件(config),其实一般看不出来啥,但是我写出来只是单纯觉得一旦能看出来啥就很厉害
- 管理后台(admin),主要还是看未授权
注意是黑盒情况下,因为我们目前没办法获得完整源码,所以没办法深入查看详细业务去审计漏洞,实际白盒的话还有很多漏洞是会出现在业务代码里的
只要看到这些关键词,基本都是很有意思的东西,都可以想办法打开访问访问试试,看看有没有什么未授权接口或者开发遗留
其中有几个东西很有意思,一个是
这个文件夹下面很有可能会有开发的一些系统调试工具,比如 SQL 查询工具啊文件管理工具等 以及
虽然说是 iso,但是其实本质上应该还是个 zip 相关工具,就有可能出现 zip 畸形目录漏洞,利用../../ 这样逃逸导致任意文件写入之类的
以及顺手看了看后台 admin 目录下的内容,都是很有意思的东西
以及还有一个很好玩的文件
推测这是用于授权的证书,只不过这个 <?php,非常的有意思
简单初步黑盒测了一通,完全没有未授权接口,人都傻了,怎么办?开逆咯
sourceguardian 12 加密,去淘宝查了下价格,一个文件 5R。这几千个文件,tnnd 逆到猴年马月,而且看都看不出来,没办法,只好装工具先自己手动看字节码逆了
装了个 vld,一个字节一个字节的看,对着 developtools 和 admin 下的东西,看了半天,P 都没看出来
人直接脑溢血,越想越气,越气就越怒,怒怒怒到极致邪气了,服气,不服不行,怎么办?恶像胆边伸,要不我们直接把开发商打了吧。
直接去代码里看这个开发商,很容易的看出开发商是谁
本系统由百 * 资通维护
进行一波信息搜集
甚至发现他们有 git
好,很有精神,就日它了!但是 TMD git 访问不到,怎么办?
以及一些 git 泄漏,但是都没什么卵用。
其他站点不是都是 eipplus 这套系统的测试站,就是一个单纯啥都没有的前端。怎么办呢?
这时候,我们发现了一个东西
30 天免费试用?
抱着试一试的态度,注册了申请
结果真的发来了,乐,对自己的系统这么自信
这不干他?直接一眼顶针,故技重施,后台,系统管理,上传 LOGO 图片,一看,tmd 修了,上传失败
只能继续看其他东西了,继续回到刚刚的思路,系统环境管理看完了,看系统更新
更新 Saas 服务?以及刚刚 admin 目录下那个 saas.txt 并且带 <? 的 php 文件
嘿哟喂,这不巧了吗?于是乎,添加一句话
上传,死!果然,直接 liences 他们是直接用 include 加载的,乐
顺带看了一下,他们这全套源码都是 ROOT 部署的,十分的 NB,web 目录全部没有权限写,只有这个 saas.txt 我们有权限修改
一看,不用打 git 了,他们部署的站点,直接就没加密,愉快的下源码
虽然说站点第二天就被应急了,amazone 有什么 agent 检测的吗?不知道怎么回事,不过这不碍事。
愉快开审咯!
继续整理现有资产
- 我们拥有的:完整的白盒代码
- 目标的低权限账户,虽然我们手头暂时没有,但是我们先假设我们有,辣么多员工如果一个账户都搞不到那还是别打肾透了.jpg,对自己自信一点
所以现在的需求很简单,就从之前的半黑盒完全转变成了白盒。这下门道就多多了。比如业务代码啊框架啊就有很多可以审的地方了
先按照找 Java 的管理,找 Fastjso… 噢不对,这是 PHP 代码,也一样。 首先先看 autoload 这类自动加载
一眼 Guzzlehttp
再搜 unseralize,结果真的有!!
在 calendarcsv_import.php 目录下,并且普通用户可以访问!
直接用 PHPGGC 构造请求 (详细 payload 不是这样,要进行一些编码,但是这里为了方便查看就直接这样了,大家看看就行)
POST /eipplus/calendar/csv_import.php
action=next
next=1
trans=111
fieldsep=1
cal_fields=O:24:"GuzzleHttp\Psr7\FnStream":2:{s:33:" GuzzleHttp\Psr7\FnStream methods";a:1:{s:5:"close";a:2:{i:0;O:23:"GuzzleHttp\HandlerStack":3:{s:32:" GuzzleHttp\HandlerStack handler";s:9:"phpinfo()";s:30:" GuzzleHttp\HandlerStack stack";a:1:{i:0;a:1:{i:0;s:6:"assert";}}s:31:" GuzzleHttp\HandlerStack cached";b:0;}i:1;s:7:"resolve";}}s:9:"_fn_close";a:2:{i:0;O:23:"GuzzleHttp\HandlerStack":3:{s:32:" GuzzleHttp\HandlerStack handler";s:9:"phpinfo()";s:30:" GuzzleHttp\HandlerStack stack";a:1:{i:0;a:1:{i:0;s:6:"assert";}}s:31:" GuzzleHttp\HandlerStack cached";b:0;}i:1;s:7:"resolve";}}
本地测试轻松写出
想着勾八目标直接写 webshell tnnd 不就行了?结果想起来他们这全套都是部署在 ROOT 下面
不管了先试试!冲!
https://osheip.**.com.tw/eipplus/home/index.php 121public/121public
轻轻松松搞到个账户先
漏洞点也存在
写出!寄,没写成功,但是也不算太糟,至少已经成功了 98% 了,距离完美只差临门一脚
继续整理思路,现在我们已经有 getshell 的方式了,虽然说 web 目录不可写,但是那个 saas.txt 文件是可以写的。并且 guzzle 写文件用的是 file_put_contents,默认写出是写相对路径,我们压根不需要 web 目录的绝对路径就能定位到 saas.txt 的地址。假如如果我们只要 getshell 不管后续,我们只要用这个反序列化直接对着 saas.txt 覆盖成我们的马就行,但是这样会有一个问题
如果直接写的话就会覆盖原本 saas 配置,导致直接网站直接爆炸,并且就算我们 getshell 后,也没办法恢复成原样,因为我们压根不知道原本的 saas 配置导致光速被发现。所以我们就只剩下最后一个目标,挖个洞。把 saas.txt 下回来!,然后在夜深人静的时候,光速写入 saas.txt,连上 shell 再把 saas.txt 改回去。
接下来就面临噩梦了,必须得审业务代码,他们这个 B 代码总共有 500M,属于是最害怕的一集出现了!!
没办法,硬着头皮上了,什么 file_get_contents 啊,fopen 啊什么一大堆看了一遍,不是修了就是写的十分的安全。痛苦,悲
看了两个多小时,终于终于终于终于终于,不愧是天天天天天才的我,终于读成功了。
继续回到上面一个重点关注列表:
- 相册(输)
- 附件
- 上传(输)
- 系统环境管理(输)
- 系统更新 (输)
具体流程如下:
发布帖子
随便添加个附件
抓包,修改tmp_name,让他进行跨目录
直接查看源码,在common_functions.inc.php中,可以发现代码对于tmp_name是直接进行拼接的,没有任何过滤!!!
然后我们发布文件后,下载的文件就会变成我们的 tmp_name 的文件。只要我们把 tmp_name,指向 saas.txt 这个文件,然后发布,然后再下载我们自己的附件,就可以把 saas.txt 下回来了!爽!
不愧是我,天才中的天才
本地测试成功,远程测试成功
saas.txt 下回来成功,现在所有拼图都已经集齐
现在就是等待夜深人静的时候上去 csv_import 啪的一下打死这破站,然后开开心心的冲内网美滋滋了
为了防止被发现,开始清理帖子走人,成败就等夜深人静时刻
然后。。。。就没有然后了。
晚上回来,发现,无法登录了都。。
天才你 mlg 臭嗨,笨比,你就是个纯纯纯纯笨比,笨比中的笨比,啊啊啊啊啊
原来笨比,竟是我自己。
当我沉浸在下回 saas.txt 洋洋得意中的时候,我手贱删除了帖子。
但是我没有意识到,删除贴子的时候,会删除附件,然后由于这个帖子的附件已经成功被我重定向到 saas.txt,我一删除附件,saas.txt 也就跟着一起消失了。
然后站就这么炸了,一键白打。
完
来自 2024 的点评
这事很早很早的时候弄得,那时候还是太年轻了啊。那时候只学会供应链的其一,没学会供应链的其二。终究搞得还是太费力气了,在自己不熟悉的领域(代码审计)上硬磕
测试站应该深入继续,而不是死盯着源码,应该直接拿下 git 然后悄悄往里面投毒,或者往发布的 release 版本里面投毒,这种源码加密站点投毒是最方便的。基本检查不出来。当时应该离 git 很近了。
不过无所谓了,反正就是休闲时日一日的东西。继续滚去干活了
暂无评论内容