我就是想试试这个竞赛的名字究竟能打多长多长多长-nuaactf-WriteUp

​ 这次准备还算充足,然而题目的难度有点点超乎我们的预料,所以并不是很顺利,但最终凭借着两位队友的carry,最后成绩也还可以。(话说我当初干嘛要提这样一个鬼名字,而且他们两居然还采用了。。。title即队名)以下是wp

NUAACTF2017 WriteUp

队名: 我就是想试试这个竞赛的名字究竟能打多长多长多长

队员:秦瑞哲、刘琨奇、程斌

MISC1 ++–

看到问题立马想到了BrainFuck,然而打开一看却是各种颜文字…

参考文章: https://qing.su/article/119.html,

注意到BrainFuck的结构,观察前部结构:

( ͡° ͜ʖ ͡°)‘由’+‘替代;

( ͡°(‘由’[‘替代,对应地,’) ͡°)‘由’]‘替代;

ᕦ( ͡°ヮ ͡°)ᕥ‘由’>‘替代。

之后观察后面的结构:

(> ͜ʖ(∩ ͡° ͜ʖ ͡°)⊃━☆゚.*)‘由’.‘替代;

(♥ ͜ʖ♥)‘由’-‘替代;

(∩ ͡° ͜ʖ ͡°)⊃━☆゚.*‘由’<‘替代。

至此,我们可以得到正确的BrainFuck表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
++++++++++
[>+>+++>+++++++>++++++++++<<<<-]
>>>>++++++++++.
+++++++.
--------------------..
++.
+++++++++++++++++.
--------------.
+++++++++++++++++++++.
-------------------------.
++++++++++++++++.
<------------------.
---.
>----.
--------.
+++++++++++++++.
------------------.
++++++++.
------------.
+++++++++++++++++.
<.
>+++++.
--.
++++++++++.

在网站: https://sange.fi/esoteric/brainfuck/impl/interp/i.html 上解密,得到flag

MISC3 recover

(吐槽一下,在chrome输flag,没有选中的话是看不见的。。。)

下载后发现是个png图片,但打不开

第一反应是去改文件头,还是选择先strings一下

然后就有了点惊喜

瞄了一眼已解决列表,卧槽,已经7个队伍了,论抢一血的重要性哇

话说300分是不是多了点。。。。。。

web50

右键源码,佛祖保佑你不出bug。

web150

题目循环检测alert并删除,试了各种编码无效,去做web300的时候才想到jsfuck,可以绕过检测并且由js执行。

当然要先闭合前边的引号,后边可以闭合或直接注释掉。

web300

按照题目意思,只能使用 []!+ 四个字符进行构造,eval(input)可以对input进行js解析,综合题意,只要可以eval(input)构造出’alert’字符串即可。

一开始当然直接jsfuck,然后由于()被过滤掉了就fail。然后各种困惑,各种google之后,get到jsfuck的编码方式,就解开了本题。记录如下:

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
以下内容基于
[] => []
然后!可以将类型转化为布尔型
![] => false
!![] => true
+可以将类型转化为整形
+![] => 0
+!![] => 1
!![]+!![] => 2
然后+[]可以转化为字符串
![]+[] => 'false'
类似于数组取下标
(![]+[])[+!![]] => 'a'
然后就可以类似的从'false', 'true'中读出'a','l','e','r','t'。
em...但是...题目过滤了小括号。需要绕一下
![]+[] => 'false'
[![]+[]] => ['false']
[![]+[]][+[]] => 'false'
[![]+[]][+[]][+!![]] => 'a'
最后用加号拼起来即可。
这题最后一半靠蒙,\笑哭\笑哭

截图如下: