第五届浙江省大学生网络与信息安全竞赛初赛-WP
战队信息
Rml
Rank: 32
解题过程
Web
nisc_easyweb
访问/robots.txt,发现/api/record,访问后到/test_api.php,F12得到i=FlagInHere,按题目要求get传参拿到flag
nisc_学校门户网站
访问学生系统,任意注册一个用户进入系统拿到flag
吃豆人吃豆魂
在index.js中搜到失败返回值,成功返回值就在上一行

base64解密拿到flag
REFTQ1RGe2YyMzViMDIzODJhMjIzZmRhNGNlMmVjNjIxNDhkOTRjfQ==
DASCTF{f235b02382a223fda4ce2ec62148d94c}
PWN
babyheap
因为程序存在uaf,所以连续释放两个chunk,可以获取heap段地址,这样可以计算出tcache bin的地址
通过覆盖tcache bin的值,在任意地址放置chunk,设置chunk0的size为0x430,并在chunk0+0x430的位置处构造两个0x20字节的chunk 释放chunk0,获取libc地址,再利用tcache bin,可以以最少的chunk数,在free_hook中写入system函数地址
再次执行free函数调用system("/bin/sh")
1  |  | 

new_stack
赛后复现
main函数

后门函数

后门函数会将我们输入的数据写入栈中,刚好最后8字节可以修改X29寄存器的值,而这个寄存器在程序中是用来临时储存函数第一个参数的寄存器,会用来修改X0寄存器,刚好在后门函数结束后会执行一次输入输出,这时可以通过修改got表控制程序流程
1  |  | 

RE
ManyCheck
程序在check1中会检测输入是否等于77

在check2中输入的第一个数字的平方要等于3025,第二个数的平方要等于2401

根据reshort16函数得知,将check3输入的数字的高两个字节和低两个字节调换位置后要等于0x66744769


按要求输入完四个数字拿到flag

MISC
好怪哦
先将文件反转一下
1  |  | 
flag.png少了文件头,补上89 50 4e 47
crc报错,修改下高度拿到flag
神奇的棋盘
赛后复现
lsb查看0通道,发现一串加密字符,base32解密得到LastKey{Yusayyds}
首先是波利比奥斯方阵密码
手搓或者脚本

1  |  | 

得到AGAXXDAGGVGGVDVADAVXDGADVGDVAADDDDFXAFAFDGDVXXDGGDGGDXDDFDDXVGXADGVDFXVVAADDXDXXADDVGGGXGXXXXGXXGGXGDVVVGGGAGAAAAGAAGGAGDDDAGAGGGAGGAGAGAAAVAAAXGXGGGXGGXGXGXXXV
加上key解ADFGVX密码

4441534354467b64383539633431633533306166633163316164393461626439326634626166387d
十六进制转字符串得到flag
segmentFlow
赛后复现
文件很小,直接crc爆破

得到解压密码gZinflAte_BasE64

追踪流,发现sa066b32bfb3e7的值在传递zip文件

tshark提取出来
tshark -r segmentFlow.pcapng -Y "http.request" -T fields -e http.file_data > data.txt
提取压缩包部分
1  |  | 
解压得到flag