美文网首页
变量覆盖

变量覆盖

作者: seeiy | 来源:发表于2019-01-25 14:28 被阅读8次

进入靶场环境以后,注意到下方有一个“source at /source.php”,点进去以后发现是个源码页

完整的源码如下:

<?php
include("secret.php");
?>
<html>
    <head>
        <title>The Ducks</title>
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
    </head>
    <body>
        <div class="container">
            <div class="jumbotron">
                <center>
                    <h1>The Ducks</h1>
                    <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?>
                        <?php
                        extract($_POST);
                        if ($pass == $thepassword_123) { ?>
                            <div class="alert alert-success">
                                <code><?php echo $theflag; ?></code>
                            </div>
                        <?php } ?>
                    <?php } ?>
                    <form action="." method="POST">
                        <div class="row">
                            <div class="col-md-6 col-md-offset-3">
                                <div class="row">
                                    <div class="col-md-9">
                                        <input type="password" class="form-control" name="pass" placeholder="Password" />
                                    </div>
                                    <div class="col-md-3">
                                        <input type="submit" class="btn btn-primary" value="Submit" />
                                    </div>
                                </div>
                            </div>
                        </div>
                    </form>
                </center>
            </div>
            <p>
                <center>
                    source at <a href="source.php" target="_blank">/source.php</a>
                </center>
            </p>
        </div>
    </body>
</html>

进行筛选,选出需要关注的代码如下:

                    <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?>
                        <?php
                        extract($_POST);
                        if ($pass == $thepassword_123) { ?>
                            <div class="alert alert-success">
                                <code><?php echo $theflag; ?></code>
                            </div>
                        <?php } ?>
                    <?php } ?>

之前我只知道PHP的变量覆盖的$$符号这种方式,查了下还有一些函数,如下:

extract()
parse_str()
import_request_variables()
$$

这里存在变量覆盖的原因就在于的extract()函数。

关于PHP变量覆盖的详细说明的可以参考这里

extract() 函数从数组中将变量导入到当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

这里刚开始没弄清楚到底是覆盖什么哪个变量,刚开始以为是将pass覆盖成password_123,事实证明我看错了,也想错了。

这里真正重写的地方是$_POST
$_POST在PHP中是指定接受参数的方式

将POST方法传过来的变量进行重写。

图片.png

弹flag的条件就是pass和thepassword_123相等,那就知道该怎么传了。

image.png

随便构造一个值,使pass和thepassword_123相等即可。

图片.png

相关文章

  • 变量覆盖

    题目取自iscc2018 入手点 foreach ($_GET as $k => $v){ $$k = $$v; ...

  • 变量覆盖

    进入靶场环境以后,注意到下方有一个“source at /source.php”,点进去以后发现是个源码页 完整的...

  • CTF之php变量覆盖漏洞

    什么是变量覆盖漏洞 自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 经常导致变量覆盖漏洞场景有:$$使用不当,...

  • 变量覆盖漏洞

    一、漏洞简介 变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现...

  • for循环变量覆盖

    解决方案一 将变量当作一个参数引入闭包内

  • (深入)变量覆盖漏洞

    可能引发变量覆盖漏洞的函数: extract() 将数组键名作为变量名,数组键值作为变量值 parse_str()...

  • web 通用型漏洞学习

    web通用型漏洞学习 变量覆盖 原理:把自定义的参数值 替换为变量的参数值,从而覆盖了变量值,产生漏洞。 常见的...

  • 第三章 函数

    变量作用域   以上例子中函数作用域会覆盖始终优先于全局作用域,所以局部变量a会覆盖掉全局作用域的a,变量提升不会...

  • JS变量声明和函数声明的优先级

    函数提升优先与变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖 .比如对上面代码进行改进 下面的一个例子 ...

  • JS笔记 命名问题

    JS中函数和变量重名时,后声明的覆盖先声明的,后赋值的覆盖先赋值的。 变量提升和函数提升时,变量的声明是在函数的声...

网友评论

      本文标题:变量覆盖

      本文链接:https://www.haomeiwen.com/subject/xawfjqtx.html