某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还可以使用!

                                                                                                                           

 

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

转载于:https://www.cnblogs.com/Mikasa-Ackerman/p/11110344.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值