在一些PHP程序的CMS中如何找到PHP授權軟件中的后門
[重要通告]如您遇疑難雜癥,本站支持知識付費業務,掃右邊二維碼加博主微信,可節省您寶貴時間哦!
對于很多靠賣PHP程序養家糊口的人來說,授權是必不可少的一部分,為了防止被他人惡意破解,通常還會加入一些后門留一手,可我們這種正版用戶就不答應了,憑什么我付費買的程序居然還留著一個后門,萬一哪天有Bug那我不就GG了么?
一.遠程代碼執行后門
這個相信大家都很熟悉了,eval等等函數都能實現,不過,特別提醒:在查殺時一定要注意以下幾個函數,此類后門比較隱蔽,不容易被查殺(fwrite/file_put_contents+include(_once)/require(_once)
這類后門其實是利用寫出一個PHP文件然后include導致的遠程代碼執行,以及,注意unserialize導致的PHP對象注入引起文件寫入+ 遠程代碼執行
查殺方式:對于第一類后門,先使用webshell專殺工具殺掉,然后手動查殺頑固后門(先搜索fwrite/file_put_contents然后看看是否有對指定文件寫入變量的功能,然后追溯到這個變量的來由,若發現出自$_GET $_POST $_SERVER["HTTP_xxxxx"],且輸出后綴名為.php或include/require本文件或有任意include(通過GET參數include對應文件且可以夠到通過file_put_contents類函數創建的文件(沒有對目錄過濾),則很可能為后門,此類后門解決方案如下:
對于include本文件的,嘗試注釋掉include語句并查看是否有影響正常功能,若影響,請刪除注釋符號然后對$_GET之類的過濾PHP代碼
,然后搜索unserialize函數,若參數來自GET,則判斷有后門,此類后門僅在PHP版本>7.0,使用第二個參數傳入['allowed_classes' => [允許的類]或false]
來限制unserialize可以序列化的對象
二.管理員密碼上傳后門
這一個后門主要是影響CMS等有管理員后臺的程序(比如某人開發的EMLOG模板中就包含了此后門),通過file_put_contents向網站目錄中寫入加密后的密碼或通過file_get_contents/curl向授權服務器發送管理員用戶名密碼(不一定是用戶名密碼,比如數據庫密碼皆有可能)
解決方式:搜索以上字符串,若為函數則搜索這個函數名,直到找到未包含機密信息則可排除,若找到將機密信息隨便亂改(比如后門獲取數據庫密碼改為獲取值888888)
PS:請注意eval包裹的加密代碼
問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!