PbootCMS任意代碼執行


前言

今天看到該cms進行了更新,分享一下前段時間發現的一處安全問題

漏洞利用

寫此文時筆者使用的是2.0.9測試版本,發布時間為2020-05-05,最新更新時間為2020-06-18

在github上下載源碼

https://github.com/hnaoyun/PbootCMS

安裝后去https://www.pbootcms.com/freesn/獲取授權碼,登錄后台添加授權碼即可

正常登錄后台,在站點信息中插入如下代碼並且保存

保存后我們來到前台首頁,使用burpsuite進行抓包,將數據包中的cookie頭設為assert,Proxy-Connection頭設置為想要執行的php代碼,測試圖片中使用的代碼為system('whoami') 如圖

可以看到成功的執行了php代碼

代碼分析

漏洞可以利用的原因在於apps\home\controller\ParserController.php中parserIfLabel函數對if標簽解析時安全檢驗做的不夠全面,函數主要存在兩處安全校驗,如圖

對於第一處if判斷,我們可以在函數名和括號之間插入控制字符,如\x01,這樣即可繞過該處正則校驗,並且可以正常執行php代碼,該trick來源於KCon2019的一個議題

完整的ppt可以參見文末鏈接

對於第二處對於敏感函數的過濾,完整的校驗如下

if (preg_match('/(\$_GET\[)|(\$_POST\[)|(\$_REQUEST\[)|(\$_COOKIE\[)|(\$_SESSION\[)|(file_put_contents)|(file_get_contents)|(fwrite)|(phpinfo)|(base64)|(`)|(shell_exec)|(eval)|(assert)|(system)|(exec)|(passthru)|(print_r)|(urldecode)|(chr)|(include)|(request)|(__FILE__)|(__DIR__)|(copy)/i', $matches[1][$i])) {
                    $danger = true;
                }

在這里其實做的過濾並不全面,我們可以擴展思路,結合一些其他函數,例如call_user_func函數來進行利用,同時可以參考PHP無參數RCE的考點,將可控輸入點轉移到請求包的header頭中,直接繞過cms中存在的一些過濾項,上面的利用方式中,使用了getallheaders()同時配合一些數組操作函數來達到執行任意代碼的目的

參考鏈接

https://xz.aliyun.com/t/6316

PPT:https://github.com/knownsec/KCon/blob/master/2019/25%E6%97%A5/PHP%E5%8A%A8%E6%80%81%E7%89%B9%E6%80%A7%E7%9A%84%E6%8D%95%E6%8D%89%E4%B8%8E%E9%80%83%E9%80%B8.pdf


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM