ctfshow-web12(glob绕过)

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

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

ctfshow-web12(glob绕过)_第1张图片

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

ctfshow-web12(glob绕过)_第2张图片

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

ctfshow-web12(glob绕过)_第3张图片

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

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

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

用法:scandir(directory,sort,context)

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

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

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

ctfshow-web12(glob绕过)_第4张图片

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

知识补充:

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

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

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

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

ctfshow-web12(glob绕过)_第5张图片

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

构造payload:

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

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

ctfshow-web12(glob绕过)_第6张图片前面文件的读取也可以使用另一个函数

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("*"));

输出结果和上面一样

ctfshow-web12(glob绕过)_第7张图片

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

payload:

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

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

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

ctfshow-web12(glob绕过)_第8张图片

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

ctfshow-web12(glob绕过)_第9张图片

你可能感兴趣的:(CTF,web,PHP,php,代码执行,web安全,glob绕过)