当前位置: 首页 > news >正文

第一届贵州理工校赛--ez-uploadez-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命令等,难度还是有点的。

http://www.dtcms.com/a/503324.html

相关文章:

  • 聊聊 Unity(小白专享、C# 小程序 之 联机对战)
  • ava编辑一个小程序操作教程分享一下C++
  • Java Web 程序在 Linux 上的部署
  • HTTP Client/Server 实践:cpp-httplib使用
  • 项目招商网站大全河北智慧团建网站
  • 量化交易的开源框架
  • 【Linux系统编程】4. Linux权限
  • 个人主页网站制作免费融资平台哪家好
  • week6
  • ZigBee中的many-to-one和link status(3)
  • 大型网站多少钱佳源房地产最新消息
  • Linux Bash(一)
  • 【Redis】哨兵与对脑裂的情况分析
  • 49.词向量:把文字变成数字
  • 【pulldown-cmark】创建自定义分支
  • python 网站开发流程图网站首页被k还有救吗
  • TsingtaoAI受邀参加HICOOL2025全球创业者峰会项目对接会
  • windows10激活解决办法
  • 学习建网站玩网站建设学习包装设计需要哪些信息
  • 【图像处理】rgb和srgb
  • 如何撰写网站建设方案海口网站开发制作
  • 查找成绩(向量实现)
  • STL中容器string -- 讲解超详细
  • Python lambda 表达式详解
  • 【JavaScript】原生函数
  • 渗透测试中爆破与撞库的区别
  • 门户网站如何做谷歌seo儿童网站建设
  • AI智能体的“瑞士军刀”:工具调用功能详解与实践
  • GYCTF2020
  • 2025-10-19 hetao1733837刷题记录