Behinder的流量通过了AES加密,以此绕过WAF。
本方法可破解该加密流量进而检测冰蝎马。
在冰蝎马的PHP && ASP 版本中,payload 加密方法为:
明文字符串分段, 每段与key异或
即使用 cipher[i] = payload[i] ^ key
作为密文cipher。
根据异或操作的结合律,如果有cipher
和 payload
,key
可求。
通过逆向冰蝎客户端,可找到payload
的恶意Class模板。冰蝎客户端的所有功能,都是通过在恶意Class中加入参数来实现。
冰蝎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报文中可得。
但此时还不知道这个cipher是冰蝎马密文,只知道是一堆bytes。
我们尝试所有可能的payload开头,
如果cipher[0] ^ payload[0] == cipher[1] ^ payload[1]
即可判断 【该bytes 确实使用了 相同的key 异或加密 cipher[0] 和 cipher[1]】