人生中第一次参加信安国赛……之前是偶尔打打CTF的菜鸡,不太知道自己的斤两,这次国赛让我见识到什么是神仙打架。
比较菜,没做出几道题,写个wp,权当自己复习纪念。
不够啊,还要努力。
签到
下载题目花了5分钟(即使我是尊贵的百度云vip会员)。突然榜上一分钟内就有大佬做出来了?(一定是我钱充得不够)
拿到题目一看,三人行,必有flag。打开题目,一个摄像头,可以捕捉脸部(出现小框框的那种),联想到三人行,就三个人一起看摄像头。当时比较simple,把控制台最小化了,弄半天没反应,最后气急败坏要关闭题目的时候,看见控制台里的flag。
签到完成。
babypwn
这题一开始以为是简单题,太乐观了。直接栈溢出后。。。额,就找不到可以利用的点了,找不到system、write,找不到int 80 gadget,无从下手。打算直接给read加上libc的system偏移,尝试一波后放弃。然后在网上找了找解决方案好久,看到一道类似的题,是2017年的文章,(https://veritas501.space/2017/04/23/32%E4%BD%8D%E4%B8%8B%E8%8A%B1%E6%A0%B7read_write/)是说把got表里的read低字节覆盖成syscall地址,然后看大概的代码结构也和题给的差不多,似乎出题人就是把这道题稍微改了一下。然后我复现了一下这道题,整个跳csu_init,写bin/sh,跳plt_read的过程还好,就最后一个覆盖低字节\xdc很迷。
以为偏移指的是函数间的偏移,发现偏移都差距好大,觉得是libc不同的过。好久才醒悟过来syscall的偏移是在read函数内的,然后就确定偏移的确是\xdc了,然后就是把eax、ebx的相应参数都设置好,用两个gadget。之后以为能成功,但本地一直报段错误,不知道为啥。想碰碰运气试远程结果成功了。
写的脚本:
puzzles
根据likes提示格式,我们开始一步一步地解。
question0是一个一元多阶多项式方程组,不多说,上matlab:
question1发现都是奇数,等比数列无果后操作了一波发现是质数。于是,依然matlab:
发现是不连续的质数,然后查看了一波质数的位置,发现第一个在1645834位,第三个在1645908,第四个在1645945,等差数列,于是第三个质数为1645908。
question2依然matlab:
定积分公式
question3物理题
网上找到了原题,改下数字,带公式计算。
question4数学题
依然matlab:
最后把几个part转换成16进制,拼接起来,得到flag
saleae
下载下来是一个logicdata后缀的文件,不知道的后缀名先百度一波。发现有这样一篇文章(https://www.waitalone.cn/security-hardware-usb.html),发现要用到一个叫saleae logic的软件,再联想到题目,就很顺理成章了。
去官网下载一波,打开,发现是三个波形,一开始我们以为是条形码。
于是就开始疯狂的扫扫扫,然鹅:
后来仔细观察了下波形:
channel0这规律的波形,这熟悉的律动。联想到学过的数电的时钟信号 ,想到了时序分析。所以analyze采用SPI时序分析。时钟设为channel0,使能端用channel3,channel1没有起伏可以不用管,channel0是被分析的所以设为MOSI,于是乎:
右下角得到分析结果,0x66是字符‘f’,0x6c是字符‘l’,flag出来了。
usbasp
操作内容
有了昨天物联网那道题的经验,依旧用saleae打开。
channel2放大后看起来比较有规律。尝试用channel2做时钟端口,channel1和0做被分析,channel3做使能端。发现好像不行
然后看到题目,联想到用usb协议,发现依旧不行。
然后抱着试一试的心态和认定0x66和0x6c的心态去试了下每个协议,终于,在时序分析spi时,把使能端的设置改一下
然后惊喜地发现了0x66,于是转换一下,即得flag。