某CTF平台一道PHP代码注入
Posted mikasa-ackerman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某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还可以使用!
我也不是太清楚,如果有大佬知道的话,请赐教!
以上是关于某CTF平台一道PHP代码注入的主要内容,如果未能解决你的问题,请参考以下文章
XCTF-攻防世界CTF平台-Web类——18favorite_number(命令注入)(php5.5.9整数溢出preg_match正则表达式绕过)
XCTF-攻防世界CTF平台-Web类——18favorite_number(命令注入)(php5.5.9整数溢出preg_match正则表达式绕过)