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

【CTFWP】ctfshow-web40

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 题目介绍:
  • 题目分析:
  • payload:
  • payload解释:
  • payload2:
  • payload2解释:
  • flag


题目介绍:

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 06:03:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

题目分析:

  1. if(isset($_GET['c'])){:检查GET请求中是否存在参数c

  2. $c = $_GET['c'];:如果存在,将参数c的值赋给变量$c

  3. 使用正则表达式检查变量$c中是否不包含一系列特定的字符。这个正则表达式尝试排除一些可能用于代码注入的特殊字符和一些常见符号。

  4. eval($c);:如果$c变量中不包含上述正则表达式定义的任何字符,则使用eval函数执行$c中的PHP代码。这是一个非常危险的操作,因为eval会执行任何传入的PHP代码,这可能包括恶意代码。

  5. }else{:如果GET请求中没有参数c,则执行else块中的代码。

  6. highlight_file(__FILE__);:如果没有参数c,这个函数会高亮显示当前文件的内容。这通常用于调试目的,但在生产环境中使用可能会暴露敏感信息。

  7. }:结束if-else语句。

payload:

?c=echo highlight_file(next(array_reverse(scandir(pos(localeconv())))));

payload解释:

这段代码尝试通过GET请求利用PHP的eval函数执行恶意代码。下面是对这段代码的分析:

  • ?c=echo highlight_file(next(array_reverse(scandir(pos(localeconv())))));:这是一个GET请求的参数c,其值是一个PHP表达式。
  1. echo:PHP中的输出函数,用于输出字符串或表达式的结果。
  2. highlight_file:PHP中的函数,用于高亮显示PHP文件的内容。
  3. next:PHP中的函数,用于将内部指针向前移动到下一个元素。
  4. array_reverse:PHP中的函数,用于反转数组元素的顺序。
  5. scandir:PHP中的函数,用于列出目录中的文件和子目录。
  6. pos:PHP中的函数,返回数组中当前元素的键名。
  7. localeconv():PHP中的函数,返回本地化的数字和货币格式信息。

具体来说,这段代码的执行流程如下:

  1. localeconv():获取本地化的数字和货币格式信息。
  2. pos(localeconv()):获取localeconv()返回数组的键名。
  3. scandir(pos(localeconv())):列出pos(localeconv())指向的目录中的文件和子目录。
  4. array_reverse(scandir(pos(localeconv()))):反转这些文件和子目录的顺序。
  5. next(array_reverse(scandir(pos(localeconv())))):将内部指针移动到下一个元素,即下一个文件或子目录。
  6. highlight_file(next(array_reverse(scandir(pos(localeconv()))))):高亮显示这个文件的内容。
  7. echo:输出这个高亮显示的内容。

payload2:

?c=eval(next(reset(get_defined_vars())));&1=;system("tac%20flag.php");

payload2解释:

  1. ?c=eval(next(reset(get_defined_vars())));:这是GET请求的一部分,其中c参数的值是一个PHP表达式。

    • get_defined_vars():这个函数返回当前所有已定义变量的数组,包括局部变量和全局变量。
    • reset():这个函数将数组内部指针指向第一个元素,并返回该元素的值。
    • next():这个函数将数组内部指针向前移动一位,并返回当前指针处的元素值。
    • eval():这个函数执行字符串作为PHP代码。

    这段代码的目的是尝试执行get_defined_vars()返回的第一个元素的下一个元素的值作为PHP代码。

  2. &1=;system("tac%20flag.php");:这是GET请求的另一部分,尝试通过URL参数执行系统命令。

    • system():这个函数执行一个shell命令,并将完整的输出返回。
    • "tac%20flag.php":这里的命令是tac flag.phptac是反向输出文件内容的Unix命令,%20是URL编码的空格。

    这段代码的目的是尝试执行flag.php文件的反向内容。

flag

在这里插入图片描述

flag=“ctfshow{96c8b1e3-29aa-4010-8f8f-c2437ccb6502}”

http://www.lryc.cn/news/410568.html

相关文章:

  • 项目实战1(30小时精通C++和外挂实战)
  • 百日筑基第三十六天
  • MySQL: ALTER
  • 微前端技术预研 - bit初体验
  • 对象关系映射---ORM
  • Django REST Framework(十七)Authentication
  • FPGA开发——数码管的使用
  • 什么是网络安全等级保护测评服务?
  • 基于深度学习的多模态情感分析
  • Glove-词向量
  • Plugin ‘mysql_native_password‘ is not loaded`
  • Hive数据类型
  • OSI七层网络模型:构建网络通信的基石
  • MSYS2下载安装和使用
  • 机器学习中的决策树算法——从理论到实践完整指南
  • FFplay介绍及命令使用指南
  • php实现动态登录
  • Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类
  • 探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术
  • airtest定位方法
  • 排列组合 n*(n-1)*(n-m+1)
  • Python面试整理-数据处理和分析
  • 职业教育计算机网络综合实验实训室建设应用案例
  • 【Docomo】5G
  • Servlet详解(Servlet源码)
  • 仓颉--接收控制台输入
  • 数据库设计效率提高的5大注意事项
  • C语言笔试题(一)
  • 轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南
  • Qt题目知多少-1