web78
没有什么绕过。?file=php://filter/convert.base64-encode/resource=flag.php构建这个伪协议之后可以得到flag,
首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。
而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。
之后我们构建flag.php然后因为使base64形式的所以无法成功读取就返回他的源码形式,之后我们在对他的源码形式进行解码就可以得到里面的数据。
web(79)
/?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJ0YWMgZmxhZy5waHAiKTs/Pg==
<?php system(“tac flag.php”);?>这是后面的含义
【https://blog.youkuaiyun.com/cosmoslin/article/details/120695429】这是data协议的。
他将php替换成了三个问号,这里可以使用data协议【数据流封装器,以传递相应格式的数据。可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。】来进行大小写绕过这个函数从而使其函数失去作用,然后,就进行include函数,会运行其中的函数,就是包含和运行。
【PHP Include 文件】include相关介绍,
还有另一种的形式是?file=data://text/plain,<?=eval($_POST[1]);?>
post: 1=system(“tac flag.php”);