zoukankan      html  css  js  c++  java
  • 某CTF平台一道PHP代码注入

    这道题以前做过但是没有好好的总结下来。今天又做了一下,于是特地记录于此。

    首先就是针对源码进行审计:

                                                                                                                                   

    关于create_function这个函数可以看一下这个:http://www.php.cn/php-weizijiaocheng-405287.html

    我们先来了解一下生成的匿名函数是什么形式的。

    按照这里来说那么生成的匿名函数应该是这样的

    <?php
    
    function  lamdba()
    {
         $_GET[code];  
    }
    ?>

     函数中间的部分在create_function中默认以eval()来进行执行的,但是看看题目要想执行这个函数,必须保证$_GET['code'] === "echo 'Hello World';"

    那这样我们执行了还有什么用啊??

    所以这里面还可以进行绕过,我们可以通过输入将执行的内容整到函数外,这样就不需要用$func();来进行执行了。

    输入 ?code=xxxxx;}phpinfo();/*

    将输入的值放进去你就可以发现:

    <?php
    
    function lambda()
    {
        xxxxx;}phpinfo();/*
    }
    
    ?>
    

    实际上在xxxx;}的时候函数就已经结束了,然后后面的内容我们就相当于超出函数之外了,后面巧妙的利用了注释符将函数后面的大括号消掉了!!

    而我们输入的整个code都会以eval()的方式执行,因此就可造成命令执行。。

    后面获取flag的内容就很简单了。。。

    还看了一些博客,说这个函数在PHP 7.2被取消了。。。可是我PHP7.3.6还可以使用!

                                                                                                                               

    我也不是太清楚,如果有大佬知道的话,请赐教!

  • 相关阅读:
    Android 中 Fragment 的切换(解决 replace 的低效)
    Android 中 OkGo 的使用 (封装 OkHttp)
    fastjson 封装工具类
    给系统添加右键使用 IDEA 打开的功能
    发现了一个很好看的博客园主题
    AndroidStudio中如何创建指定布局的layout文件
    转载:十个前端UI优秀框架
    win10 添加 telnet 工具
    tomcat各版本与jdk及servlet各版本对应关系
    servlet和jsp的maven依赖
  • 原文地址:https://www.cnblogs.com/Mikasa-Ackerman/p/11110344.html
Copyright © 2011-2022 走看看