2019信安国赛部分wp

​ 人生中第一次参加信安国赛……之前是偶尔打打CTF的菜鸡,不太知道自己的斤两,这次国赛让我见识到什么是神仙打架。

​ 比较菜,没做出几道题,写个wp,权当自己复习纪念。

​ 不够啊,还要努力。

签到

下载题目花了5分钟(即使我是尊贵的百度云vip会员)。突然榜上一分钟内就有大佬做出来了?(一定是我钱充得不够)

拿到题目一看,三人行,必有flag。打开题目,一个摄像头,可以捕捉脸部(出现小框框的那种),联想到三人行,就三个人一起看摄像头。当时比较simple,把控制台最小化了,弄半天没反应,最后气急败坏要关闭题目的时候,看见控制台里的flag。

qd.png

签到完成。

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很迷。

Image.png

9eb2cee9737881225bd86a8035307c19.th.png

以为偏移指的是函数间的偏移,发现偏移都差距好大,觉得是libc不同的过。好久才醒悟过来syscall的偏移是在read函数内的,然后就确定偏移的确是\xdc了,然后就是把eax、ebx的相应参数都设置好,用两个gadget。之后以为能成功,但本地一直报段错误,不知道为啥。想碰碰运气试远程结果成功了。

8b7269c1c0b4cacbe6f4adf6ede18e0f.md.png

写的脚本:

14d13c6bf7bf6a8e3e699c3296584ce7.md.png

41f98368ac2d89d823f69fef000650c0.png

puzzles

根据likes提示格式,我们开始一步一步地解。

question0是一个一元多阶多项式方程组,不多说,上matlab:

e6d216b03341d4cea8efb1a6c6110fbf.md.png

question1发现都是奇数,等比数列无果后操作了一波发现是质数。于是,依然matlab:

51835408295cf2486eaec98a7c7fb7aa.md.png

发现是不连续的质数,然后查看了一波质数的位置,发现第一个在1645834位,第三个在1645908,第四个在1645945,等差数列,于是第三个质数为1645908。

question2依然matlab:

定积分公式

5f9d3d42f0dcdc548d24d38eacd11f77.md.jpg

question3物理题

网上找到了原题,改下数字,带公式计算。

00482ff290aceddfae1b9d2fafb181ec.md.png

question4数学题

依然matlab:

25ba8e63e4d64368e1e9266a474bed37.md.png

最后把几个part转换成16进制,拼接起来,得到flag

saleae

下载下来是一个logicdata后缀的文件,不知道的后缀名先百度一波。发现有这样一篇文章(https://www.waitalone.cn/security-hardware-usb.html),发现要用到一个叫saleae logic的软件,再联想到题目,就很顺理成章了。

去官网下载一波,打开,发现是三个波形,一开始我们以为是条形码。

cf8d5a79dfe35b84b955f9f6f778ef89.png

于是就开始疯狂的扫扫扫,然鹅:

c639aa9cd2fb69f6d4b5368b8477bb41.md.png

后来仔细观察了下波形:

0d175bfe596a940bed9fa55f4dc52b0c.png

channel0这规律的波形,这熟悉的律动。联想到学过的数电的时钟信号 ,想到了时序分析。所以analyze采用SPI时序分析。时钟设为channel0,使能端用channel3,channel1没有起伏可以不用管,channel0是被分析的所以设为MOSI,于是乎:

4a775dde870a9318ff6c957b43755e06.md.png

右下角得到分析结果,0x66是字符‘f’,0x6c是字符‘l’,flag出来了。

usbasp

操作内容

有了昨天物联网那道题的经验,依旧用saleae打开。

c2596ca1ddf130b2daa846da36e8528a.png

channel2放大后看起来比较有规律。尝试用channel2做时钟端口,channel1和0做被分析,channel3做使能端。发现好像不行

1e26777cb51c8a0fa7630aafeaea8191.md.png

然后看到题目,联想到用usb协议,发现依旧不行。

fbf3eb049e9bc775fecea47347e7bac3.png

然后抱着试一试的心态和认定0x66和0x6c的心态去试了下每个协议,终于,在时序分析spi时,把使能端的设置改一下

169e88c35ac9f1018541c0d1d421419f.png

0ffc70b07cda0bb0db58e9f25991e9f6.png

然后惊喜地发现了0x66,于是转换一下,即得flag。

0%