lede 命令 启用 ssh_PHP imap_open函数任意命令执行漏洞
1
漏洞描述
PHP 的imap_open函數中的漏洞可能允許經過身份驗證的遠程攻擊者在目標系統上執行任意命令。該漏洞的存在是因為受影響的軟件的imap_open函數在將郵箱名稱傳遞給rsh或ssh命令之前不正確地過濾郵箱名稱。如果啟用了rsh和ssh功能并且rsh命令是ssh命令的符號鏈接,則攻擊者可以通過向目標系統發送包含-oProxyCommand參數的惡意IMAP服務器名稱來利用此漏洞。
02
漏洞危害
?
攻擊者可利用該漏洞在目標系統上執行任意shell命令。
03
相關概念
- imap_open 函數
PHP函數庫中并不包含 imap_open() 函數,只有在 PHP 上安裝 imap 擴展后才會激活imap_open() 函數。該函數的結構如下:
resource imap_open ( string $mailbox , string $username , string $password )
函數中的mailbox是執行命令參數的一部分,所以我們可以通過更改郵箱名來進行命令注入執行。
- IMAP服務器類型及SSH連接
現在有兩種基于Unix的IMAP服務器被人們廣泛使用,一種為華盛頓大學開發的 imapd ,另一種為Cyrus開發的IMAP服務器。
①Cyrus開發的IMAP服務器會將用戶郵件存儲到內置數據庫中,只有通過IMAP協議才能訪問Cyrus。因此,當使用Cyrus時,已安裝IMAP的Unix系統上的用戶賬戶與IMAP賬戶之間并沒有任何關聯。
②華盛頓大學開發的 imapd 會將郵箱存儲到文件中,而這些文件由Unix系統中郵件用戶所有,如 /var/spool/mail ,因此 imapd 對應的用戶賬戶以及訪問權限與Unix服務器直接相關。如果郵件存放在我們具備訪問權限的 spool 文件中,我們可以通過SSH方式登錄系統,驗證我們對這些文件的訪問權限。
當能夠使用SSH時,整個過程并不需要建立 IMAP 連接。 也就是說,imap_open 函數首先會建立SSH連接,如果認證通過,則會在沒有 IMAP 連接的情況下繼續執行,這就是所謂的 IMAP 預認證模式。且在設置 SSH 連接時, mailbox 參數的值會以參數形式傳遞給SSH命令。
- -oProxyCommand 參數
SSH 命令中用到了許多命令,其中我們可以使用 -o 參數來設置連接期間可用的各種選項。在建立SSH連接之前,我們可以設置 ProxyCommand 參數,如下所示:
ssh -oProxyCommand="echo hello|tee /tmp/executed" localhost
當我們執行這條命令時,可以發現即便我們沒有建立與 localhost 的SSH連接,也會創建 tmp.txt 文件。
點擊添加圖片描述(最多60個字)
04
漏洞復現
漏洞復現頁面是一個測試郵件服務器能否成功連接的頁面,我們需要在此頁面填寫郵件服務器地址、用戶名和密碼。
點擊添加圖片描述(最多60個字)
訪問并用burpsuite工具進行抓包:
點擊添加圖片描述(最多60個字)
修改hostname的內容,如下圖所示,發送如下數據包即可成功執行命令`echo '1234567890'>/tmp/test0001`:
點擊添加圖片描述(最多60個字)
執行docker-compose exec web bash進入容器,可見/tmp/test0001已成功創造:
點擊添加圖片描述(最多60個字)
05
修復方法
1. 檢查傳遞給 imap_open 的用戶輸入參數中是否存在任何特殊字符(如斜杠),過濾有效的和凈化有害的輸入。
2. 在 mailbox 參數中使用某些標志,其中 /norsh 標志可以用來禁用IMAP預身份認證模式。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的lede 命令 启用 ssh_PHP imap_open函数任意命令执行漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python程序 爱意_程序员式优雅表白
- 下一篇: touch bar是什么(3D炫舞Tou