2025XYCTF复现
ez_puzzle
禁用右键和F12,火狐右边侧栏找到web开发者工具
直接把startTime设置很大完成拼图也行
或者直接找到输出flag的函数下断点
|
|
把<改为大于本地调试,下断点运行就行,还是拼拼图简单
Ezsql(⼿动滑稽)
单引号注入用户名报错
先试试万能密码
|
|

需要盲注密钥值,空格可以用%09即tab代替,逗号用from for
|
|
爆出密钥值为dtfrtkcc0czkoua9S

接下来无回显,我们把结果写入文件就行了
|
|
找到flag.txt
|
|
Signin
|
|
secret.txt路径给了,但是过滤了../开头和../../直接用./../绕过
|
|
拿到一串字符串Hell0_H@cker_Y0u_A3r_Sm@r7
看secret路由应该要伪造session,跟进get_cookie函数
|
|
sha256加密,前下密钥有用了,然后下面有个pickle.loads,先base64加密再打pickle反序列化把flag写入文件,然后用download路由读文件
最简单的exp就是用bottle自带的cookie_encode
|
|
然后这个版本不兼容cookie_endcode我们丢给ai改一下
|
|
然后download查看2.txt
|
|
或者跟着这篇SekaiCTF 2022 Writeup | cjxol.com
|
|
改一下exp
|
|
然后download查看就行了
出题人已疯
|
|
需要一行写payload打ssti
直接上官方exp
|
|
直接把payload分为三个字符一组,然后塞到a里面最后执行,界面无回显,直接写flag到1.txt里面,最后包含flag
出题人又疯
|
|
限制更多字符
利用lamentXU师傅的神秘小trick,斜体字绕过
o,a,在bottle的SSTI里,他们可以被直接替换成ª (U+00AA),º (U+00BA)进而绕过各种waf。
我们对ª进行URL编码,为:%c2%aa,随后删除%c2,只剩下一个%aa,然后替换掉原payload里的a。看以下例子:
|
|
他们的执行结果是一样的。都可以求得-1的绝对值。
同样的,对于字符º,其URL编码后为%c2%ba,有:
|
|
他们的执行结果是一样的。都可以获取/flag文件的内容。
在这个网站可以看到字符的unicode,https://www.compart.com/en/unicode/

这些可能都是可利用的,原理是bottle处理的uniocde是全体str
目前只有o和a可以用
|
|
所以这题payload
|
|
Fate
先来看个原题:https://alpacahack.com/ctfs/cakectf-2023/challenges/country-db
|
|
注意到request.get_json(),用f-string传入非字符串参数,会被转成字符串
利用这个python格式化字符串漏洞,写出payload
|
|
传入的code为列表,因而可以通过waf(len为2,没有'元素)随后直接被f-string强转,拼入sql语句,如下:
|
|
这题代码
|
|
查询值的长度限制小于6,但是flag字段名大于6,源码标明json.loads
先看打SSRF部分
在URL解析里有http://xxx.xx@yyy.yy会解析到yyy.yy去
所以 target_url = "http://lamentxu.top" + url用@绕过
禁用了ascii字母和.,2130706433 是 IPv4 地址 127.0.0.1 的 32 位无符号整数表示,可以用这个绕过
|
|
还要给参数0传参abcdefghi,二次URL编码绕过
接下来就是sql注入,限制列表、元组,我们用字典
|
|
拼接后
|
|
然后利用ssrf
先利用这个逻辑来构造二进制
|
|
payload
|
|
|
|
最后用proxy路由打ssrf
|
|
这里的&也要url编码,然后127.0.0.1的端口是8080,docker文件里面有
Now you see me 1
全选发现神秘base64,解码得源码
|
|
给了个SSTI利用点,但是_被过滤了,常用的办法是用request后面接参数绕过,但是他后面的那几个都被过滤了
|
|
去开发手册找参数
可以使用request.endpoint获取到当前路由的函数名,即r3al_ins1de_th0ught
就可以依次获取字符data,然后就可以利用request.data ,传入任意字符绕过
题目最后删除了rce的办法,python2中可以使用reload函数对类进行重载,在python3中,这个函数搬到了importlib类里。可以以此重载到被删除的方法,这里我们分别reloados.popen和subprocess.Popen
|
|
再看这一行
|
|
先闭合前面的{#
双花括号过滤我们用{%%}
|
|
上脚本
|
|
Now you see me 2
利用这个payload打
|
|
exp
|
|