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

前言

这题还是比较基础的,没有需要脑洞的地方,都是对基础的考察。结果自己卡了2个地方,还是基础太薄弱了,还是需要努力学习啊

WP

首先进入环境,提示我们可以登录和下载,猜测可能需要渗透的地方就是这两个。之后点击Login进行登录。
这里第一个点是验证码。因为python学的太差,看到这里的第一个想法不是用python写脚本去爆破,而是在猜测题目是不是把正确的验证码藏起来了。。直到我刷新了网页后发现那个对验证码进行限定的条件会动态的变。。。
这里肯定就是写一个python脚本爆破,例如这样,我写的非常简陋。。:

import hashlib
for v1 in 'abcdefghijklmnopqrstuvwxyz123456789':
    for v2 in 'abcdefghijklmnopqrstuvwxyz123456789':
        for v3 in 'abcdefghijklmnopqrstuvwxyz123456789':
            for v4 in 'abcdefghijklmnopqrstuvwxyz123456789':
                for v5 in 'abcdefghijklmnopqrstuvwxyz123456789':
                    for v6 in 'abcdefghijklmnopqrstuvwxyz123456789':
                        v=v1+v2+v3+v4+v5+v6
                        m=hashlib.md5()
                        m.update(v.encode("utf-8"))
                        n=m.hexdigest()
                        if n[0:6] == 'f61a29' :
                            print(v)

但是还是不能登录,返回了error。猜测可能是用户名和密码不对。但是用户名和密码都没有给提示,爆破不太现实,这里猜测和SQL注入有关。试试万能密码,果然成功了:
在这里插入图片描述
进入之后是三个文件,下载后知道了flag在web root dir。这里我理解错意思了,我以为是根目录/,然后想办法去找,使用../,但是一直不行,就卡住了。
这里flag应该是在网站的根目录。怎么利用呢?我们可以发现这个:
在这里插入图片描述
似乎可以利用f来任意下载文件。因此我们这样构造:

http://c3021aa4e7844f0994c8af960178882af9fbf92d2285462c.changame.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 !== ($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。但是不行。这时候我放到本地来试试,发现eval代码那里报错了。说明应该是我们的输入导致eval出现了异常。这其实也是一个很基础的知识:
在这里插入图片描述
因此我们应该post的内容是这样:

flag=flag;

然后f12查看源码,就成功获得flag了。

猜你喜欢

转载自blog.csdn.net/rfrder/article/details/108888978