RCE函数利用

1.代码注入

①eval()
eval ( string $code ) : mixed

说明:eval()把字符串code 作为PHP代码执行。

Caution函数eval()语言结构是非常危险的,因为它允许执行任意PHP代码。它这样用是很危险的。如果您仔细的确认过,除了使用此结构以外别无方法,请多加注意,不要允许传入任何由用户提供的、未经完整验证过的数据。

PS:传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。
return 语句会立即中止当前字符串的执行。
代码执行的作用域是调用 eval() 处的作用域。因此,eval() 里任何的变量定义、修改,都会在函数结束后被保留。

②assert()
PHP 5
assert ( mixed $assertion [, string $description ] ) : bool
PHP 7
assert ( mixed $assertion [,Throwable $exception ] ) : bool

说明:assert()会检查指定的assertion并在结果为FALSE时采取适当的行动。

Traditional assertions(PHP 5 and 7)
如果assertion是字符串,它将会被assert()当做PHP代码来执行。assertion是字符串的优势是当禁用断言时它的开销会更小,并且在断言失败时消息会包含assertion表达式。这意味着如果你传入了boolean的条件作为assertion,这个条件将不会显示为断言函数的参数;在调用你定义的assert_options()处理函数时,条件会转换为字符串,而布尔值FALSE会被转换成空字符串。

③call_user_func()/call_user_func_array()

(PHP 4,PHP 5, PHP 7)

call_user_func ( callable $callback [,mixed $parameter [, mixed $... ]] ) : mixed

说明:call_user_func 一把第一个参数作为回调函数调用
第一个参数callback是被调用的回调函数,其余参数是回调函数的参数。
可以传递任何内置函数或用户自定义函数,除了语言结构如array(),echo(),empty(),eval(),exit(),isset(),list(),print(),unset()

④create_function()

(PHP 4 >= 4.0.1,PHP 5,PHP 7)

create_function ( string $args , string $code ) : string

说明:create_function()根据传递的参数创建匿名函数,并为其返回唯一的名称

⑤usort()/uasort()

(PHP 4,PHP 5, PHP 7)

usort ( array 6$array , callable $value_compare_func ) : bool

说明:usort()使用用户自定义的比较函数对数组中的值进行排序

本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

例子:

<?php
function my_sort($a,$b)
{
if ($a==$b) return 0;
   return ($a<$b)?-1:1;
}

$a=array(4,2,8,6);
usort($a,"my_sort");

$arrlength=count($a);
for($x=0;$x<$arrlength;$x++)
   {
   echo $a[$x];
   echo "<br>";
   }

?>  

运行结果:

2
4
6
8
⑥ob_start()

(PHP 4, PHP 5,PHP 7)

ob_start([ callback $output_callback [, int $chunk_size [, bool $erase ]]] ) : bool

说明:ob_start()打开输出控制缓冲

此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容((除http标头外),相反需要输出的内容被存储在内部缓冲区中。
内部缓冲区的内容可以用ob_get_contents()函数复制到一个字符串变量中。想要输出存储在内部缓冲区中的内容,可以使用ob_end_flush()函数。另外,使用ob_end_clean()函数会静默丢弃掉缓冲区的内容。
Warning 当有正在调用的回调函数时,一些网络服务器(例如Apache)会改变一个脚本的工作目录。你可以在
回调函数中再把它改回来,例如chdir(dirname($_SERVER[‘SCRIPT_FILENAME’]))。
输出缓冲区是可堆叠的,这即意谓着,当有一个ob_start()是活跃的时,你可以调用另一个ob_start()。只要确保又正确调用了ob_end_flush()恰当的次数即可。如果有多重输出回调函数是活跃的,输出内容会一直按嵌套的顺序依次通过它们而被过滤。

⑦${php代码}

${}可以将大括号内的PHP代码当作命令进行执行。

放回主页

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C1yas0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值