PHP imap 遠程命令執行漏洞(CVE-2018-19158)
php imap擴展用於在PHP中執行郵件收發操作。其imap_open
函數會調用rsh來連接遠程shell,而debian/ubuntu中默認使用ssh來代替rsh的功能(也就是說,在debian系列系統中,執行rsh命令實際執行的是ssh命令)。
因爲ssh命令中可以通過設置-oProxyCommand=
來調用第三方命令,攻擊者通過注入注入這個參數,最終將導致命令執行漏洞。
啓動環境
1.進入漏洞環境目錄
2.docker-compose build
3.docker-compose up -d
默認打開的端口是8080
進行復現之前先了解一下php_imap函數
作用:此函數基於imap 擴展,imap_open -將IMAP流打開到mailbox。
用法:imap_open ( string $mailbox , string $username , string $password )
其中包括三個參數,二三個是登錄名和密碼,第一個mailbox是執行命令參數的一部分,說到這裏其實就很明顯了,可以抓包修改郵箱名從而達到命令注入的目的
關於mailbox
並且上文提到imap_open函數會通過ssh遠程連接shell(建立SSH連接)
然後通過設置oProxyCommand=參數執行第三方命令
打開環境是一個郵件系統:
既然是命令執行漏洞並且知道注入點在哪直接抓包:
根據給的poc製作POST包發送:
看一下構造的命令,先url解碼再將選中部分base64解碼,命令部分就是
然後再將請求包發送
進入容器
docker-compose exec web bash
進入根目錄下的tmp查看test0001文件
復現完成,退出docker環境
修復方法
-
檢查傳遞給 imap_open 的用戶輸入參數。
-
在 mailbox 參數中使用某些標誌,其中 /norsh 標誌可以用來禁用IMAP預身份認證模式。