【代碼審計】ThinkPhp6任意文件寫入
saulGoodman
一個專注于紅隊攻防研究的公眾號
ThinkPhp6任意文件寫入
Thinkphp6:任意文件寫入
版本:v6.0.0-v6.0.1
復現(xiàn)過程:
下載配置好tp6 然后 ,在\tp6\app\controller\Index.php 中。寫好,漏洞代碼。

然后再去,tp6\app\middleware.php中吧session 寫入打開

訪問index 控制器,查看

打開正常,傳入a 參數并且抓包

在a參數寫入php代碼。Phpsessid 寫入一個文件名和路徑總長度32位的內容。
發(fā)送

成功寫入
漏洞分析:
根據網上信息漏洞位置在:
tp6/vendor/topthink/framework/src/think/session/Store.php
所以我們直接定位到漏洞位置:

判斷phpsessid的值是否是字符串并且是否長度為32
向下走,找到session保存的位置:

關鍵代碼就是 259-261,這里他判斷session的值如果不為空就是進行序列化然后寫入.其中也沒有過濾。所以如果session 的值 我們能控制 (就比如圖1那樣),就會直接造成一個任意文件寫入的漏洞。
(在src/think/middleware/SessionInit.php文件里有phpsessid的獲取方法。這里就不追了,有興趣的可以自己去查看)


評論
圖片
表情
