XYCTF2024
XYCTF2024
4.5整理出来的 但是一直忘记上传了
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
抓包

浙公网安备 33010602011771号