ctf show web入门31

打开靶场观察本题的正则过滤

flag | system | php | cat | sort | shell | . (点) | (空格) | ' (单引号) | " (双引号)都被过滤了

我们可以考虑构造一个无字母数字(或无特定关键字)RCE 技巧,利用 PHP 的内部函数嵌套来一步步定位并读取文件,完全避开 system、cat、flag、点号和空格等所有黑名单限制。payload如:show_source(next(array_reverse(scandir(pos(localeconv())))));

让我们从内向外层层拆解该payload:

  1. 核心层:定位当前目录
    localeconv(): 这个函数返回一个包含本地化数字和货币格式信息的数组。在 PHP 中,它返回的数组第一个元素通常是一个 . (点号)。
    pos(): 它是 current() 函数的别名,用于返回数组中的第一个元素。
    结果:pos(localeconv()) 得到了字符串 .。这样就巧妙地绕过了黑名单对 . 的过滤。
  2. 目录扫描层:获取文件列表
    scandir('.'): 这个函数会扫描指定目录下的所有文件和目录。
    结果:它返回一个数组,包含了当前目录下的所有文件名(例如:'.', '...', 'index.php', 'flag.php')。
    array_reverse(...): 将 scandir 返回的文件数组顺序反转。
    为什么反转? 在 CTF 题目中,flag.php 通常按字母排序排在后面,反转后它会排在前面,方便提取。
  3. 提取层:选中目标文件
    next(...): 将数组内部指针向前移动一位,并返回该元素。
    原因:反转后的数组第一个元素通常是刚才扫描到的目录标记,第二个元素(即 next 指向的)往往就是我们要找的 flag.php。
  4. 执行层:展示源代码
    show_source(...): 它是 highlight_file() 的别名。它会读取 PHP 文件的内容,并将其进行语法高亮后输出到页面上。
    结果:它直接读取并显示了 flag.php 的内容。
相关推荐
Pedantic1 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘1 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆1 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师2 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆3 小时前
VSCode自动格式化三要素
前端
爱勇宝3 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen4 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
user20585561518136 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode6 小时前
Redis 在生产项目的使用
前端·后端