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

                                                                                                                           

 

我也不是太清楚,如果有大佬知道的話,請賜教!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM