• ctfshow-web12(glob绕过)


    打开链接,在网页源码里找到提示

    要求以get请求方式给cmd传入参数

    尝试直接调用系统命令,没有回显,可能被过滤了

    测试phpinfo,回显成功,确实存在了代码执行

    接下来我们尝试读取一下它存在的文件,这里主要介绍两个函数

    scandir() 函数:返回一个数组,其中包含指定路径中的文件和目录。

    若成功,则返回一个数组,若失败,则返回 false。如果 directory 不是目录,则返回布尔值 false 并生成一条 E_WARNING 级的错误。

    用法:scandir(directory,sort,context)

    参数描述
    directory必需。规定要扫描的目录。
    sort可选。规定排列顺序。默认是 0 (升序)。如果是 1,则为降序。
    context可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。

    我们先扫描当前目录,若读取成功后,则将它输出

    构造payload:?cmd=print(scandir('./'));

    发现内容是一个数组,属于复杂类型变量,换用 print_r() 函数

    知识补充:

    print()只能打印出简单类型变量的值(如int,string)  ,输出一个字符串

    print_r() 可以打印出复杂类型变量的值(如数组,对象)  ,打印关于变量的易于理解的信息

    更新payload:?cmd=print_r(scandir('./'));

    可以看到当前目录下存在一个名为903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php 的文件

    使用 highlight_file() 函数对文件进行语法高亮显示(就是查看文件的源码)

    构造payload:

    ?cmd=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

    得到 $flag="ctfshow{eae7ce01-7143-4333-aecb-6862cab465ce}" 

    前面文件的读取也可以使用另一个函数

    glob() 函数:返回一个包含匹配指定模式的文件名或目录的数组,如果失败则返回 FALSE。

     用法:glob(pattern,flags)

    参数描述
    pattern必需。规定检索模式。
    flags可选。规定特殊的设定。

    可能的值:

    • GLOB_MARK - 在每个返回的项目中加一个斜线
    • GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
    • GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
    • GLOB_NOESCAPE - 反斜线不转义元字符
    • GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
    • GLOB_ONLYDIR - 仅返回与模式匹配的目录项
    • GLOB_ERR - (PHP 5.1 新增的)如果错误则停止,默认情况下忽略所有错误

    glob("*") 会匹配任意文件,glob("*.php")则是匹配以php为后缀的文件 

    这里匹配一下任意类型的文件

    构造payload:?cmd=print_r(glob("*"));

    输出结果和上面一样

    后面除了使用highlight_file()函数,也可以使用show_source()函数,后者就是前者的别名。

    payload:

    ?cmd=show_source('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

    拿到flag之后,我们也可以看一下它这道题目的源码,先看一下index.php里面的内容:

    ?cmd=highlight_file('index.php');

    可以看到,传入的cmd直接被放进了eval函数,但我还是没找到它在哪里把system过滤掉了

  • 相关阅读:
    图片怎么加水印?图片加水印用什么软件?
    xftp打开时提示需要更新或使用新版本
    为什么说C++太复杂(复杂到哪了?)
    HTTP基本概念介绍
    How do I redirect Tornado shell ouptput?
    【Python】论文中常用的Matplotlib画图(三)
    学习笔记——《LINUX设备驱动程序(第三版)》Linux设备模型:内核添加、删除设备、驱动程序
    golang list 遍历
    Linux系统 -目录结构与配网
    centos安装flink,通过windows访问webui
  • 原文地址:https://blog.csdn.net/Myon5/article/details/133744784