• 关于php代码审计中的xss的一点心得


    1.echo函数

    注意:这里演示的代码以GET传参为主

    <?php
    /**
     * Created by PhpStorm.
     * User: Mke
     * Date: 2020/4/29
     * Time: 16:42
     */
    $a=$_GET['bb'];
    #echo '123';
    echo $a;
    

    打开浏览器

    很简单,这里可以简单的传入xss语句

    <script>alert(/Mke/)</script>
    

    效果如下

    可以看到js代码执行了

    这里的代码被传入到head标签里了,因此是可以执行的,但是一些特殊情况,比如说json页面,不是html结构(没有html页面应有的标签)因此不会被解析执行js代码

    2.print_r函数

    <?php
    /**
     * Created by PhpStorm.
     * User: Mke
     * Date: 2020/4/29
     * Time: 16:42
     */
    $a=$_GET['bb'];
    //echo $a;
    print_r($a);
    

    道理是一样的,只要被html页面所解析然后返回到页面,就有可能存在xss漏洞

    这是很直观的

    实际代码审计过程比较复杂,你需要关注的暂且只有这些函数(如果只是找xss漏洞的话,2333,没错我就是传说中的低危小能手)
    这里也是被嵌入H5页面的头部

    3.print函数

    <?php
    /**
     * Created by PhpStorm.
     * User: Mke
     * Date: 2020/4/29
     * Time: 16:42
     */
    $a=$_GET['bb'];
    //echo $a;
    //print_r($a);
    print $a;
    

    简单的就直接跳过辣

    4.sprint函数

    定义和用法
    sprintf() 函数把格式化的字符串写入变量中。
    arg1、arg2、++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
    注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符位于 % 符号之后,由数字和 "$" 组成。请参见例子 2。
    提示:相关函数:printf()、 vprintf()、 vsprintf()、 fprintf() 和 vfprintf()
    摘自https://www.w3school.com.cn/php/func_string_sprintf.asp

    <?php
    /**
     * Created by PhpStorm.
     * User: Mke
     * Date: 2020/4/29
     * Time: 16:42
     */
    $a=$_GET['bb'];
    //echo $a;
    //print_r($a);
    //print $a;
    $cc=sprintf("这是一个xss演示%s",$a);
    echo $cc;
    

    由于sprintf函数并不能直接输出,只是起到一个传递格式化的参数的作用,所以这里用echo来打印存储到$cc中的字符
    这里和echo触发xss是一样的,只是过程不太一样

    此时xss语句嵌入的位置出现在body标签里面了,前面提到的几个相关函数也是类似的

    5.die()函数

    die() 函数输出一条消息,并退出当前脚本(如果传入的是字符串的话,就会输出这个字符串)

    <?php
    /**
     * Created by PhpStorm.
     * User: Mke
     * Date: 2020/4/29
     * Time: 16:42
     */
    $a=$_GET['bb'];
    //echo $a;
    //print_r($a);
    //print $a;
    //$cc=sprintf("这是一个xss演示%s",$a);
    //echo $cc;
    die($a);
    

    简单的演示,当然如果有程序员昏了头这样写的话,2333

    此时出现在头部标签

    6.var_dump()函数

    var_dump() 函数用于输出变量的相关信息。
    var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
    摘自https://www.runoob.com/php/php-var_dump-function.html
    这个函数比较常用,一般调试代码会用到

    <?php
    /**
     * Created by PhpStorm.
     * User: Mke
     * Date: 2020/4/29
     * Time: 16:42
     */
    $a=$_GET['bb'];
    //echo $a;
    //print_r($a);
    //print $a;
    //$cc=sprintf("这是一个xss演示%s",$a);
    //echo $cc;
    //die($a);
    $arr=array(1, 2, array($a, "b", "c"));
    var_dump($arr);
    

    这里就简单构造一个数组,然后从传入的参数获取一个输入的字符串

    由于没有任何过滤,直接嵌入xss语句

    可以看到代码被执行了

    触发的原因在于,var_dump会把输入的字符再次传递到html页面上

    7.var_export函数

    var_export 输出或返回一个变量的字符串表示
    此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。
    可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。
    (a = var_export()array,true) 将变量打印出来包括类型记录下来 然后输出,常用于记录日志
    摘自:https://www.jianshu.com/p/96dcc1db468a

    <?php
    /**
     * Created by PhpStorm.
     * User: Mke
     * Date: 2020/4/29
     * Time: 16:42
     */
    $a=$_GET['bb'];
    //echo $a;
    //print_r($a);
    //print $a;
    //$cc=sprintf("这是一个xss演示%s",$a);
    //echo $cc;
    //die($a);
    $b = array (1, 2, array ($a, "b", "c"));
    var_export ($b);
    

    这个函数和var_dump类似都是可以处理数组的
    详情:https://www.php.net/manual/zh/function.var-export.php
    同样执行xss的办法也差不多

    传个js脚本

    类似的结果

    这就要求对用户输入的数据进行各种清洗,编码等等

    小结

    这几个函数是在看书的时候看到并罗列出来的,感觉有点意思,便记录下来

  • 相关阅读:
    【原创】express3.4.8源码解析之Express结构图
    【原创】backbone1.1.0源码解析之View
    【原创】javascript模板引擎的简单实现
    【原创】backbone1.1.0源码解析之Collection
    【原创】when.js2.7.1源码解析
    【原创】backbone1.1.0源码解析之Model
    【原创】backbone1.1.0源码解析之Events
    企业架构研究总结(35)——TOGAF架构内容框架之构建块(Building Blocks)
    企业架构研究总结(34)——TOGAF架构内容框架之架构制品(下)
    企业架构研究总结(33)——TOGAF架构内容框架之架构制品(上)
  • 原文地址:https://www.cnblogs.com/mke2fs/p/12803857.html
Copyright © 2020-2023  润新知