Rating:

Flag in flag.php.

We can upload PHP code, which is written to a randomly named file and executed. We can't use a bunch of special characters, and our code can only contain one ., so reading the flag from ../flag.php directly is not going to work.

After running phpinfo() and seeing there are lots of functions disabled, I used get_defined_functions($exclude_disabled=true) to see what is left, and noticed that while preg_replace was disabled, preg_filter was left enabled. I used this build the path to flag.php and simply include it:

include preg_filter("<files>", "flag.php", __DIR__);
echo $flag;

This might've been an unintended solution, because the flag mentioned Lua.