免责声明
蟹堡安全团队的技术文章仅供参考,任何个人和组织在使用网络时应当遵守相关法律法规,不得利用网络从事危害国家安全、荣誉和利益的活动。未经授权,请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责,蟹堡安全团队及文章作者不承担任何责任。本文所提供的工具仅用于学习,禁止用于其他用途!
01
代码审计
include "flag.php";
highlight_file(__FILE__);
$zeros="000000000000000000000000000000";
foreach($_GET as $key => $value){
$$key=$$value;
}
if ($flag=="000000000000000000000000000000"){
echo "好多零";
}else{
echo "没有零,仔细看看输入有什么问题吧";
var_dump($_GET);
}
没有零,仔细看看输入有什么问题吧array(0) { }
逐行分析:
foreach($_GET as $key => $value){
$$key=$$value;
}
将GET请求参数中的键值对分开,分别获取变量名为键/值所对应的变量的
数值,例如
$a = "1";
$b = "a";
$c = $$b;
那么$c = $"a" = $a = 1
$flag=="000000000000000000000000000000"
如果flag变量诗句等于000000000000000000000000000000,那么就会进
入if语句块
var_dump($_GET);
将会展示_GET变量所有的数据信息
所以经过上面的分析可知,在foreach语句块中会出现变量覆盖漏洞,我们需要利用var_dump($_GET);来获取flag,所以在foreach语句块运行结束后,"_GET"对应的变量的数值应该是$flag。
所以在GET请求参数中,必须存在一个键名为_GET和一个键名为flag
原文始发于微信公众号(蟹堡安全团队):[ctfshow]新手必刷_菜狗杯-遍地飘零
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论