危害

Behinder的流量通过了AES加密,以此绕过WAF。

本方法可破解该加密流量进而检测冰蝎马。

原理

在冰蝎马的PHP && ASP 版本中,payload 加密方法为:

明文字符串分段, 每段与key异或

即使用 cipher[i] = payload[i] ^ key 作为密文cipher。

Untitled

根据异或操作的结合律,如果有cipherpayloadkey 可求。

操作

通过逆向冰蝎客户端,可找到payload恶意Class模板。冰蝎客户端的所有功能,都是通过在恶意Class中加入参数来实现。

Untitled

冰蝎4.0 共有12个模板。因此所有可能的Payload都有固定开头如下:

payloads = [
b'<?\\n@error_reporting(0);\\n\\nfunctio',
b'<?\\nfunction main($action, $remot',
b'<?\\n@error_reporting(0);\\nset_time',
b'\\nerror_reporting(0);\\n\\nfunction m',
b'<?\\n@error_reporting(0);\\n\\n\\nfuncti',
b'<?\\nerror_reporting(0);\\nfunction ',
b'@error_reporting(0);\\nfunction ma',
b'<?php\\n\\n$taskResult = array();\\n$p',
b"<?\\nerror_reporting(0);\\nheader('C",
b'@error_reporting(0);\\n\\nfunction g',
b'<?\\n@error_reporting(0);\\n@set_tim'
]

cipher从HTTP报文中可得。

Untitled

但此时还不知道这个cipher是冰蝎马密文,只知道是一堆bytes。

我们尝试所有可能的payload开头,

如果cipher[0] ^ payload[0] == cipher[1] ^ payload[1]

即可判断 【该bytes 确实使用了 相同的key 异或加密 cipher[0] 和 cipher[1]】

Powered by Fruition