1、Pwn
1.1、Easybin
程序直接给了后门函数system('/bin/sh'),return2text即可获得shell
from pwn import *
1.2、Can You?
这题开了canary,但存在格式化字符串漏洞,可以读取canary的值,然后再进行溢出修改返回地址为system('/bin/sh')的地址
首先使用pwndbg调试,在printf处下断点,运行至此处输入%x.%x.%x.%x,得到第一个参数值为0xffffcea8
在栈中找到该值
可以知道格式化字符串第一个参数的地址为0xffffce90,而canary在ebp-0ch处,即0xffffcf0c
由此可以计算0xffffcf0c-0xffffce90=124,即31个字节,编写exp如下
from pwn import *
1.3、Pwn CTF
该题未开栈不可执行保护,并且泄露了输入字符串的首地址,可以构造shellcode,ret2shellcode
from pwn import *
2、Crypto
2.1、Warm-up
下载下来是一串
S01ZRENXU1NJVkhGUVZKUkpaRkZNMlNLSTVKVENWU0xLVlZYQVlLVElaTkVVVlRNS0pIRkc2U1dKVkpHV01LWEtaQ1VVVENXTlJORlNVS1dOUkdGS01EVUs1S0dXVlNLS1pDWFFUQ1ROUllFT1VUTE1STFZDTUxFSk5MR1c0Q0lLWVlEQ1RDWEtWMkZNVjJWTkJKRk1SS09MQktHV05EWktKV0U0VlNOTlJTRVdWVEtLSkxWR01CUklOTEdXNUNQS05XRkVSQ1dLWkhFSVVaUk9CTUZFMjJXS1ZKVENXU0tLWlZWVVJTVUdGTEZLVkNGR0ZIVTRSU1ZQRkdXWVRTTUtOVlRLVEtTR0ZSVEFVSlFNUkdGSVZUTUs1SkZNVExaS1pWWElWMk5OTkxFNFZUS0pKTFZJUkxRSlZKR1dNS1RLTVlEU1RDVk5OMkVRVjJXSlpLRk1WTFVKTkpUQ1VTRUtaV0U0VjJTR0JORklVU1dNUkxGTVJMVUpSSldXNkNYS0lZVlVSQ1RHQVlVT1ZDRk1STUU0VktPS0ZKVENTU0VLWldGTVZLUkdGU0U2VkxMTVJNVktNS1dNRktXV09LREtFWUZVVUNWTk4yRVFVWlJPQkdGTVJLT0s1S1RBM0NNS0pWWFFTQ1hLWlNFSVZMTE1SRFZJMjIySlJMR1dUU0hLSVlWVVMyV05OU0ZHVTMySkpGRksyM0VLVklWTVVTVUtSS1hJVDJXR0JORk1WTDJKSk1GRU1DMktOTEVLUlNXS05XRU1VQ1JOTlNFT1ZEMkpGNUZPVkxMR0ZKVEFXU09LWVlVNFJTVEdGWUVJVlJRTlJKRTIyWlZKNUtHV05LR0tWTEZVVkNXTk00VUdVM0xMSkZGSzIzWUtKSldXU1NMS0lZV0dNS1JHRkpFWVZMTEpaTVZLVlNPSlJLVEE1Q1NLNUtWRVZDV0tWSEZNVVJRSVVZRk0yMkdLWkpXVVZTSktaS0RBT0tRS1FZRFNVQ1JIVTZRPT09PQ==
根据题意就base64与base32一直解,各解5次出来结果
GrabCON{dayuum_s0n!}
2.2、Poke Ball RSA
e很大,考虑小解密指数d,使用wiener攻击求解d
n = 498934084350094415783044823223130007435556803301613073259727203199325937230080661117917023582579699673759861892703348357714077684549303787581429366922208568924252052118455313229534699860304480039147103608782140303489222166267907007839021544433148286217133494762766492655602977085105487216032806292874190551319
2.3、Old Monk's Password
enc、enc1和enc2都是用flag加密后得到的密文,每次加密开始的i不同。因此只需还原出第一个加密的i即可根据加密逻辑编写解密脚本,得到flag
enc = b'\x0cYUV\x02\x13\x16\x1a\x01\x04\x05C\x00\twcx|z(((%.)=K%(>'
2.4、The Anceint Temple
题目代码如下:
M, s, l, C = 7777771, [], 1337, []
根据以上源码可知,该题将flag的每个字符转换成二进制形式,进行背包加密,每个背包的重量为数组n,每个字符的加密结果存在数组C中,使用ctf-wiki上的脚本进行解密
import binascii
3、Web
进去之后在登录框中用万能密码进行sql注入
username=admin'or 1=1#
登录即可得到flag:GrabCON{E4sy_pe4sy_SQL_1nj3ct10n}
一道典型的php无字母shell题,preg_match匹配输入中是否存在字母,存在的话进入die分支,不存在则进入eval函数执行
由于题中已经提供了eval函数,所以用取反构造system函数输入命令即可
eq=$_="%8C%86%8C%8B%9A%92";$__="%a0%af%b0%ac%ab";$___=$$__;$_($___[_]);&_=whoami
4、R****eversing
直接静态查看,比较输入和v2
运行得到flag
exeinfo查壳发现存在upx壳
去壳后ida动态调试,查询字符串定位到“Enter the password: “下断点
开始调试,到输入函数停止,输入123456789
回车,继续跟进,发现到0x401EBA处存在一处判断跳转,会跳转到失败分支,但其正下方就是成功分支,所以修改ZF标志位的值,使其不跳转
进入到成功分支,继续跟进,得到flag
查壳,发现存在UPX壳
去壳之后IDA打开,静态查看字符串,发现关键字符
在banner处下断点,尝试能否让程序走向输入密码分支
开始调试
结果失败,还是会直接退出且中间没有判断跳转点,所以继续进行静态分析,在main_one函数中找到可疑代码
尝试让程序走到main_one分支试试,向上追溯,在main_main函数处下断点,开始调试
一路F8直到0x000055B6E7319F96处发现有一个跳转逻辑跳过了main_one函数,所以修改ZF标志位,使其不跳转,再F7步入main_one函数
跟进,发现之前标记的关键词断点,执行过去之后控制台弹出输入密码字符
回车输入密码一路跟进,经过一个大循环到达可疑位置上方,此时又出现一个跳转,还是修改标志位,不让他跳转,注意此时修改的是SF标志位(之前都是ZF位)
跟进一行又碰到一个跳转,老套路修改标志位,成功进入到可疑分支
继续跟进,发现go_C14,这是字符串“GrabCON{”的地址
一路跟进到一个打印函数,发现打印出flag,flag中括号前后有两个空格要去掉
GrabCON{626c61636b647261676f6e}实际上就是blackdragon的16进制字符串
4.4、Maths
================
用ida打开分析,该程序先将输入的flag进行hex编码,得到76个字节,将其分为两部分,分别为input1,input2。
然后将其进行一系列的运算得到一个二元四次方程组
通过分析列出如下的方程组(其中x,y为flag的两个部分)
使用sage对等式右边的式子进行因式分解
由此可以得到:
根据上述式子编写sage脚本得到x和y
for i in divisors(v5)://这里的v5是上述等式的左边部分
得到flag为GrabCON{r3v_4nd_m4th_1983eeebb6969ed5
5、Forensics
下载memdump.raw文件发现是一个dump下来的linux内存文件,用HxD打开,根据题目提示搜索关键词,linux下创建文件的命令常用的有touch、echo等,既然题目说创建并写入,那先搜索一下echo试试
搜索出来很多条,此时可以用echo + 空格 + 引号搜索,一般Linux下创建并写入都是用 echo “123” > 1.txt这类命令
搜索完成后立刻发现一个可疑的地方,类似shell命令行的一段文本
双击跟进,发现flag,文件为welcome,内容为一段md5(echo的那段base64解密后就是下面那段MD5)
GrabCON{welcome_402051f4be0cc3aad33bcf3ac3d6532b}
下载题目,是个安卓系统的文件夹备份
一开始被三个奇怪后缀的app吸引了
后来发现app是后面题目用到的
锁定社交平台是Skype后,开始用Sqlite Studio打开所有数据文件,但都是无用信息和空信息
后来在ProntoDate的提醒下,想到应该有相应的工具
找到Skyperious,一个Skype数据文件读取的工具
找到group name——31337 hax0r plan
找到参会人员和邮箱——evil mike,sidemaf155@5ubo.com
还找到聊天记录,是跟后面的Good Beating题有关,里面有个链接下载good.apk
但apk在安卓文件夹里也有
所以flag就是
GrabCON{skype_sidemaf155@5ubo.com_31337_hax0r_plan_evil_mike}
6、OSINT
6.1、ProtonDate
寻找sc4ry_gh0st@protonmail.com的创建时间
github搜索protondate,发现项目
https://github.com/1cbf94bc-bc47-42b9-9197-244437fad1e6/protondate
运行得到时间
flag为GrabCON{03_09_2021}
6.2、Victim1
进入网站,是一个监控视频
监控里白天有黄色的缆车和雪山,再加上题目标题叫受害者,就查到了意大利今年发生的缆车事故,疯狂输入该事故的城镇名字,一直错误
然后在后面查另一题的网站时把ip地址丢到shodan里一搜
找到Brunico的邮编就对了,GrabCON{39031}
6.3、Victim2
这题是张图片,找图片的位置
右下角有个hotel有名字——SCHENNERHOF
google地图一搜
按照图片角度,就是后面这个Hotel Hohenwart了
所以flag是GrabCON{hotelhohenwart}