如何從防護角度看Thinkphp歷史漏洞
Thinkphp RCE漏洞程式設計客棧和掃描流量
漏洞原理回顧
5.0.x版本漏洞
原理在於Thinkphp處理請求的關鍵類為Request(thinkphp/library/think/Request.php),該類可以實現對HTTP請求的一些設定
Thinkphp支援配置“表單偽裝變數”,預設情況下該變數值為_method,因此在method()中,可以通過“表單偽裝變數”進行變數覆蓋實現對該類任意函式的呼叫,並且$_POST作為函式的引數傳入。可以構造請求來實現對Requhttp://www.cppcns.comest類屬性值的覆蓋,例如覆蓋filter屬性(filter屬性儲存了用於全域性過濾的函式),從而實現程式碼執行。
5.1.x-5.2.x版本漏洞
與5.0.x版本漏洞相似,漏洞點都存在於Request(thinkphp/library/think/Request.php)類中,其中:
$method變數是$this->method,其等同於POST的“_method”引數值,可以利用覆蓋$filter的屬性值(filter屬性儲存了用於全域性過濾的函式),從而實現程式碼執行。
該漏洞觸發時會出現警告級別的異常導致程式終止,此時需要設定忽略異常提示,在public/index.php中配置ehttp://www.cppcns.comrror_reporting(0)忽略異常繼續執行程式碼,如下圖:
Thinkphp漏洞全網掃描
從流量角度來看,利用Thinkphp漏洞就是發一個http包。我們發現某黑客的掃描器是先寫一個簡單的一句話作為指紋,後續再訪問這個檔案看是否返回指紋資訊,訪問成功說明shell已經成www.cppcns.com功,基本就是發兩個http包,掃描器記下成功寫入的shell的網站ip和url然後手工用菜刀連線,進行後續操作。
從IPS裝置日誌和人工驗證,攻擊者的攻擊步驟包含2步:1、全網掃描傳送exp,根據指紋識別是否getshell;2、菜刀連線,進行遠端控制;
全網掃描傳送exp
一般掃描日誌都是遍歷B段或C段,時間也比較密集,某個被記錄的掃描器日誌片段如下,
具備3個特徵:1、目的ip為相同C段或者B段,2、埠比較固定,3掃描時間非常密集
掃描器傳送的確認shell已經寫入成功的報文,採用掃描器專用的指紋,所以ips是沒有這種檢測規則的。
菜刀連線
在攻擊者手工菜刀連線被攻陷的站點時,也會被ips檢測到,通過上下文關聯溯源到thinkphp漏洞作為攻擊者的突破口。挑選幾個當時記錄的典型案例:
被攻陷的鄭州伺服器1(122.114.24.216):
該網站確實為thinkphp5發開,當時webshell木馬還在伺服器上未被刪除。可以通過伺服器訪問黑客上傳的該木馬,指紋資訊為baidu,掃描器用這個指紋來自動判斷getshell成功並記錄url。
被攻陷的四川伺服器(182.151.214.106):
被攻陷的四川伺服器(182.151.214.106):
這個案例木馬雖然被清除,但是當時伺服器還是可以連通,伺服器也是thinkphp框架,使用者名稱疑似chanpei
裝置記錄了黑客連線木馬並執行網路查詢命令時的報文,得到的資訊與以上報錯資訊一致。並且看得出伺服器也所處為內網的一臺機器,截圖看到至少該網路包含192.168.9.0和192.168.56.0兩個子網,如下圖:
被攻陷的美國伺服器(161.129.41.36):
美國這臺伺服器上的webshell也被清理掉了,通過裝置http://www.cppcns.com抓包,發現有黑客使用了相同的webshell木馬,即 x.php,懷疑是同一批黑客。
黑客在瀏覽美國伺服器上x.php(webshell)檔案內容時,裝置記錄了x.php的密碼為xiao,並且標誌位也是baidu。
可以看出利用這兩個Thinkphp高危RCE漏洞,當時是掃到了大量的伺服器漏洞的。
總結
本文結合Thinkphp的歷史漏洞原理,分享了發現利用Thinkphp漏洞攻擊成功的案例。目前裝置每天檢測到最多的日誌就是weblogic、struts2、thinkphp這類直接getshell的日誌或者ssh rdp暴力破解日誌。很多攻擊者一旦發現最新的exp就裝備到自己的掃描器上面全網一陣掃,一天下來可能就是若干個shell。所以出現高危漏洞後建議使用者及時打上補丁,配置好安全裝置策略,從實際幾個案例來看,掃描器的風險一直都在。如果能配置好網站禁止ip直接訪問,能在某種程度上緩解一下這種威脅。
以上就是如何從防護角度看Thinkphp歷史漏洞的詳細內容,更多關於從防護角度看Thinkphp歷史漏洞的資料請關注我們其它相關文章!