前言

记录一次稍微有点崎岖的渗透实战,看我如果从任意文件读取到上线CS

渗透过程

信息收集

一顿信息收集后,终于找到了这样一个资产,熟悉的师傅可能一眼就看出来了,这是fastadmin,对!没错,当我看到这个fastadmin的时候,就有预感要出货了……

image-20250109161427660

先是试了一下弱口令,因为fastadmin中管理员忘记密码时,会去数据库中手动重置密码,默认重置的密码一般都是123456

尝试了admin 123456不行,接下来干嘛呢?

肯定不是按照常规的思路去测什么登录框SQL注入,js里的未授权接口等等,因为这个是一个fastadmin框架啊,这种肯定是直接打Nday最有效撒,于是我们去收集一下fastadmin都有哪些Nday?

image-20250109163325242

fastadmin Nday列举

下面简单列举一下几个Nday,不作详细解释,附上文章链接

任意文件读取

可以读取数据库配置信息,可用来连接数据库

1
GET /index/ajax/lang?lang=../../application/database HTTP/1.1

前台文件包含getshell

配合对应路径包含上传的图片马getshell

1
POST 图片马
1
GET /index/user/_empty?name=../../public/uploads/20250109/1623aab905a3669b383b80881e44107a.png

分片上传getshell

前提:chunking = true (开启分片上传功能)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//传入xx.php
POST /index/ajax/upload HTTP/1.1
Host: target

------WebKitFormBoundarybw5c2a2bqlLLOMEU
Content-Disposition: form-data; name="file"; filename="Xnip2021-04-02_11-05-27.png"
Content-Type: application/octet-stream

PNG
...
<?php phpinfo();?>
------WebKitFormBoundarybw5c2a2bqlLLOMEU
Content-Disposition: form-data; name="chunkid"

xx.php

------WebKitFormBoundarybw5c2a2bqlLLOMEU
Content-Disposition: form-data; name="chunkindex"

0
------WebKitFormBoundarybw5c2a2bqlLLOMEU

插件getshell

配合插件完成命令执行

任意文件读取

ok,在我们掌握了这些Nday的利用方式后,再回头看看这个站,逐一尝试一些Nday的poc,没有poc的就手动利用

试试任意文件读取,运气非常好直接读到了数据库配置信息,那么我们就有可能能够连上目标的数据库!

image-20250109165214488

拿下Mysql数据库

接下来就是去看数据库是否公网开放,开放在哪一个ip上

架设有CDN,使用海外多地ping找了一下真实ip,成功找到!

image-20250109165449492

那么去看看3306是否开放,ok,很顺畅,可以去试着连接数据库了,看看有无ip限制

image-20250109165648591

也是运气爆棚,Mysql数据库允许公网任意连接,轻松拿下Mysql数据库

image-20250109165855471

进入后台

拿到数据库了,我们首先去找管理员的密码

成功找到了,去MD5碰撞一下看看

image-20250109170408259

解密不出来,说明管理员密码并不是简单密码,复杂密码很难碰撞出来

image-20250109170927624

那咋办呢?简单,既然我们数据库都拿下了,直接把密码改了不就行了(敏感操作,需要授权征得同意,测试完后记得改回来),但是我们修改的密码需要与数据库的加密逻辑、salt值相匹配,这怎么办呢?

去信息收集一下:

刚好fastadmin官网就提供了管理员忘记密码时,重置的默认密码123456加密值和salt值

image-20250109171500555

1
2
3
4
数据库修改fa_admin表的两个字段
密码(password):c13f62012fd6a8fdf06b3452a94430e5
密码盐(salt):rpR6Bv
登录密码是 123456

那么我们直接修改数据库中对应数据,以123456的密码成功登录后台!

image-20250109172345548

信息泄露

接下来简单翻了一遍功能点,找到一些个人信息泄露

有身份证,电话号码,邮箱,还有照片,不得不说有个小姐姐是真的好看【狗头】

image-20250109172939374

image-20250109173035750

image-20250109171907673

GetShell

然后我就想着该拿shell了,于是还是使用fastadmin的可以getshell的历史漏洞,

前台文件包含getshell-失败

用来包含图片马的路径不存在,估计是被管理员修复了,或者版本不匹配

image-20250109174501779

分片上传getshell-失败

没有开启分片上传的功能,失败

image-20250109174801066

插件getshell

发现它压根就没有插件管理的菜单,这说明管理员还是有安全意识的,直接把插件管理模块给禁用了,或者删了也说不定,这就很难办了啊

image-20250109171907673

也就是利用这个漏洞需要后台开启的插件管理的菜单,然后启用其中的某些插件导致任意代码执行,虽然网上的Nday分析文章都能很轻松的利用这个漏洞getshell,那是因为他们的演示demo大都是本地自行搭建的,默认开启了插件管理菜单,但是真实环境中很多站点是直接关闭了这个插件管理菜单的,而且其他Nday全部都试过了,都没法getshell,那又该怎么办呢?

  • 默认情况下是有插件管理菜单的:

image-20250109184557690

image-20250109184526156

另辟蹊径,不使用Nday去getshell 而是利用数据库getshell

into outfile写马-失败

那么Nday都尝试完了,我把注意力放在了数据库上,尝试用执行SQL语句往网站根目录写入一句话木马

当然在此之前先看看有没有写入的权限,secure_file_priv 是只读变量,还·不能通过 SQL 语句直接修改,没有写入权限的话就难办了

很不幸,没有

image-20250109182114760

日志写马-失败

这就更不用想了,必须配合文件包含漏洞利用,但是都有了文件包含了,我还用日志写马干啥呢,直接尝试远程文件包含,或者包含图片马啊

重大突破-绕过模块禁用

到这里尝试了这么多方法,还是没能getshell,但是我还是不甘心,还是想再多试试,于是我去手动的翻找了数据库,虽然数据库配置的一些只读变量我不可控,权限也只是一个普通用户的权限,但是我对数据库的数据完全可控啊,于是我就想,看看能不能找到一些数据,修改了之后就能导致恶意代码注入的,于是我翻遍了每一个表,发现大都是静态资源数据,连可控的将被插入到页面的html代码数据都比较少,更别说有可控的php代码数据了,但是我发现了这么一个表:fa_auth_rule

根据表名和表中的数据来看应该是用于一些板块配置的表

image-20250109202237233

可以看到这里有一个密码箱字段,ismemu字段的值为1,根据它的英文列名可知,这里应该是配置是否要开启密码箱的配置!

可以对应系统验证看看是不是存在密码箱的菜单栏

image-20250109202712535

果然是有的,而且只要是ismemu字段的值为1板块都有,ismemu字段的值为0的板块都没有,说明这里就是配置是否要禁用某个板块的关键所在!

我找到了这个模块,看样子应该是使用模块的总配置模块,因为他的名字是规则管理,和表名非常接近,于是我把它的ismemu字段的值从0改为了1,看看后台是否会多出来一个规则管理的板块呢~

image-20250109203050092

我嘞个豆,还真让我活生生给成功启用出来一个模块总配置页面出来了

image-20250109203342818

那么接下来的思路师傅肯定也想到了,就是去寻找并启用插件管理菜单或者叫模块!

启用插件管理,或者直接在数据库修改插件管理的对应的ismemu字段的值为1也可以

image-20250109203900975

image-20250109204243165

成功启用!总算把你给整出来了!

image-20250109204411408

那么这里不就可以使用前面提到的Nday 插件getshell了吗?

点击一下在线命令执行插件,嗯?怎么回事,难道又要寄了吗?报错提示”当前暂无前台页面”

image-20250109205111807

也就是不让插件被前台使用,再去看看数据库呢

image-20250109205417497

发现该模块的路径应该就是 /command访问无果

image-20250109205635537

再结合报错的意思,该插件只能在后台使用,于是尝试 /admin/command,成功访问到该插件!

image-20250109205745680

接下来就可以愉快的getshell了!

插件getshell-成功

点击add,添加命令,选择生成API文档,接口文件就是webshell名,文档标题就是注入的恶意一句话木马代码

image-20250109210959448

生成命令行,立即执行代码,执行成功!

image-20250109211142917

访问根目录下的x1ly_s.php看看,哟西,生成成功!虽然它看上去只是一个普普通通的API接口文档,但是其实它暗藏玄机哈哈~

image-20250109211337708

输入webshell的密码,看看能不能执行命令

哟西!成功getshell!

image-20250109211512876

可以看到这里的phpinfo页面是乱的,应该就是因为这里是注入的恶意代码的缘故

先使用蚁剑连接,连接成功!

image-20250109214440461

获得100多个旁站系统源码

先来翻翻文件吧

好家伙直接拿下100多套系统源码,可以拿去代码审计,还可以翻找数据库配置文件等敏感信息,继续横向攻击其他站点,还可以……懂的都懂

image-20250109215156713

拿下几十个数据库

简答列举一个数据库配置文件就行,因为实在泄露得太多了,几乎每个站点的数据库都能直接拿下,虽然有些站点的数据库是同一个,但是拿下的数据库数量也是很可观了

image-20250109221130520

image-20250110152041114

上线CS

虽然是linux的平台但是还是可以配合CrossC2插件上线cs,当然,使用msf上线也可以

image-20250110152538058

当然后面的操作就是Linux内网渗透了,提权,权限维持,横向移动等等,由于内网渗透不是本次渗透目的,不想再深入展开,就此为止了

总结

这次渗透,其实就是打的fastadmin Nday而已,本身没有什么含金量,但是它告诉我们的是:一些存在漏洞的模块如果被管理员禁用了,不要就此放弃,只要是没有被直接删除源码的,就说不定还有机可乘,比如这次遇到的,通过修改数据库开启被隐藏的存在漏洞的模块从而getshell,一点点小思路,大佬们轻喷~