通過Thinkphp框架漏洞所發現的安全問題
在一次偶然的機會發現公司某個網站存在thinkphp的遠程命令執行漏洞,自此對這個漏洞愛不釋手。這究竟是為什么呢?主要原因有2點:如果網站存在這個漏洞,我們可以去執行各種各樣的系統命令來進行測試觀察,尤其要是還有管理員權限就更舒服了;第二點,只要發現對應版本的thinkphp,漏洞利用步驟較為簡單。(主要還是筆者太懶,hhh!!!)關于這個漏洞分析筆者就不在這里獻丑了,主要是介紹下如何來去挖掘這個漏洞,以及筆者相關的一些思路。希望能給剛入安全圈的新人一點靈感。
漏洞簡介
在2018年12月9日,thinkphp官方發布了一個重要的安全更新,修復了一個嚴重的遠程命令執行漏洞。此次更新主要涉及到一個安全更新,由于框架對控制器名沒有進行足夠的檢測會導致在沒有開啟強制路由的情況下可能的getshell漏洞,受影響的版本兒包括5.0(< 5.0.23)和5.1(< 5.1.31)版本兒。
漏洞特性
這個特性可以說是大部分thinkphp框架的特性,在其網站url后輸入一個不存在的路徑,頁面會報錯,顯示該網站一些配置信息以及thinkphp的版本兒,如圖:
輸入該網站一個不存在的路徑11,或者是一些不存在的文件也可例如:11.php,11.txt。此時頁面會報錯,拋出異常,如圖:
此時我們可以看到該網站的一些敏感配置信息比如網站路徑,當然我比較感興趣的還是這個thinkphp框架的版本,如圖所示thinkphp版本兒清楚可見,看到這里可能大佬們就知道我接下來干啥了。
漏洞復現
筆者感覺自己這個漏洞利用的方式還是比較簡單粗暴的,初始也是抱著試一試的想法,也沒想到就成功了。
首先打開百度,然后搜索引擎內輸入 “thinkphp5.0漏洞”,看到很多大佬的分析,隨便點開一個鏈接,拿走大佬寫好的payload。(當然這個paylaod自己也要根據實際情況做一點小改變,根據頁面多觀察幾次來進行改動。如果網站漏洞已經修復了再去測試肯定不會成功了。)
開始漏洞復現:
利用system函數遠程命令執行
payload:http://xxx.com/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami 如圖
我們不難看出當前網站確實存在并且能夠執行系統命令,后面的測試方法就比較大眾化了,容筆者稍微說下,各位看官一看就懂:
- 首先看下自己當前權限是否是管理員權限,如果是再好不過,不然后面還得想方法進行提權。(emm出現thinkphp漏洞已經很不應該了,如果這里再是管理員權限的話,網站的管理員老哥應該好好反省下了)
- 然后再上傳一句話木馬,菜刀鏈接,基本到這就差不多了。(不要隨便操作哦)
- 通過相關平臺將此漏洞告訴相關廠商。(xx不規范,牢底坐到穿)
漏洞分析
這里不是原理分析哈,只是筆者一點淺薄的看法和經驗。
筆者發現thinkphp框架搭好以后,頁面有如下圖所示的一些字體。
然后又通過觀察之前所構造的payload : http://xxx.com/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
想到谷歌搜索引擎強大的搜索功能 ,于是構造語句“ thinkphp十年磨一劍 inurl:index.php”(說實話結果我也是嚇了一跳,)
搜到大量使用該框架的網站,而且通過鐘馗之眼一類的搜索引擎通過搜索 “十年磨一劍 – 為API開發設計的高性能框架 [ V5.0+版本由+七牛云+獨家贊助發布+]”也能搜索到大量此類網站。
據此可見有很多網站再使用thinkphp 5.0這一版本兒框架,可能搜到的這些網站有一些管理員已經修復該版本兒漏洞,但是應當還會有一大部分管理員仍未曾修復該漏洞。(想必這點大家都會想到,而且會有黑客用此類方法批量拿站)
觀點
通過thinkphp 這一版本兒漏洞,筆者想到其實蠻多的。
- 一些cms網站的漏洞挖掘方式其實和筆者所提到的thinkphp漏洞挖掘的方式還是比較一致的,都有某些方面的特征,比如版本號,url組成等等。這類通用型漏洞在利用其來技術門檻相對較低,比如筆者通過信息收集發現大量類似網站,一旦爆發危害蠻大,之前很多的事件兒都說明了這個問題。(這個漏洞挖掘指的是別人已經發布過的漏洞,而不是去挖掘還未曾發現的漏洞)
- 很多網站的管理者(中小型網站)都不具備安全意識,等到安全問題一旦爆發悔之晚矣。往往出現這類漏洞(出現很長時間卻沒修復的漏洞)的網站一般是中小型網站,當然大點兒的網站可能也有,但是相較于這類網站就少了。
- 人是安全的尺度這句話不假,管理網站的是人,但是往往安全和可用性又是相對的,無法去追求過度的安全,這就造成了一些漏洞的存在其實是在所難免的。即便這個網站的管理者能夠想到很多很多問題,但是可能某一天他也會犯一些失誤,或者配置失誤或者刪庫,不要以為刪庫這種騷操作不會出現在自己身上。
emm希望有一天出現一個啥絕對的安全,這樣我們就能愉快的轉行,各位大佬和同僚也能實現自己的夢想,開超市的開超市,賣煎餅果子的賣煎餅果子 。。。。。若干年后又是一段傳奇啊hhhh!!!
建議
漏洞修復建議:該版本兒thinkphp漏洞(大部分漏洞修復方式)修復最簡單的修復方式就是升級到新版本,打補丁,或者進行手動修復等等。
當然還有一個問題也需要進行修復,就是筆者前面所說輸入一個不存在的路徑或文件頁面會拋出很多系統相關信息以及路徑,一旦和該網站別的漏洞相結合后患無窮。
關于相關搜索引擎網站應該加以限制。
希望以上東西能夠幫到大家。