题目来源:eval - Bugku CTF
访问页面,
代码解释
<?php
include "flag.php"; //包含"flag.php"文件
$a = @$_REQUEST['hello']; //从请求参数'hello'中获取值并赋给变量$a。
eval( "var_dump($a);"); //使用eval函数对变量$a进行求值,并使用var_dump函数打印出结果。
show_source(__FILE__); //使用show_source函数显示当前文件的源代码。
?>
//这段代码包含了一个PHP脚本。首先,它包含了一个名为"flag.php"的文件。然后,它定义了一个变量$a,并从请求参数'hello'中获取值。接下来,它使用eval函数对变量$a进行求值,并使用var_dump函数打印出结果。最后,它使用show_source函数显示当前文件的源代码。
//这段代码的主要功能是根据请求参数'hello'的值,将其作为PHP代码进行求值并打印出结果。同时,它还展示了当前文件的源代码。
eval方法
eval是一个特殊的关键字,用于执行被传入的字符串作为PHP代码。其基本语法如下:
eval(string $code);
其中$code参数是要执行的代码字符串。eval会将该字符串作为PHP代码进行解析和执行,并返回执行后的结果。下面是一个示例代码:
$code = 'echo "Hello, World!";';
eval($code);
上述代码会输出字符串"Hello, World!"。
eval关键字的灵活性使得开发人员能够在运行时动态生成和执行代码,从而具备了很高的编程灵活性。
var_dump()
<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>
//以上代码会输出
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
}
根据题中出现的include函数,怀疑存在文件包含漏洞,flag 在包含的flag.php 文件;后面再看题目的eval函数得知存在代码执行的漏洞,将flag.php的信息获取传递给参数a的值进行代码执行输出flag
因此,这题的解题思路:
1、利用eval()函数可将函数中的参数当作php代码执行,
2、 可通过 file 函数是把一个文件中的内容读入到一个数组中(如本题:?hello=file('flag.php')来查读取flag.php文件内容
构造payload
http://114.67.175.224:10448/?hello=file(%27flag.php%27)
得到flag