Aspx的webshell作为一个文本文件,很容易被识别和查杀,如果将其编译成dll文件,放到网站bin目录下,隐蔽性就要高很多。使用ASP.NET的预编译指令,可以简单的实现这个目的。详细的说明可以参考:http://msdn.microsoft.com/zh-cn/library/ms228015(v=vs.80).aspx
下面是编译方法:
1)先新建一个old目录,目录下只放一个aspx的webshell。可以用iis测试一下页面能不能正常访问。
2)确认能正常访问后清空c:\inetpub\wwwroot目录(可以先找个空目录运行,完了把所有文件复制过去即可),执行如下命令:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -p D:\old -v / c:\inetpub\wwwroot
-p参数是网站源文件,如果只打算编译一个webshell的话,就新建个空文件夹,里面放一个aspx文件;
-v参数是网站虚拟路径,“/”就是根目录,一般就使用根目录。
后面的c:\inetpub\wwwroot是目标路径,编译好的文件都在里面。
系统内如果安装了多个版本的.NET Framwork就会有相应的编译环境,也就是在C:\Windows\Microsoft.NET\Framework\下会有多个版本的文件夹,根据需要选择合适的即可。一般来说,2.0比较合适。
预编译时可能会产生一些warning,只要你的webshell代码是正确的就可以忽略。
3)这时在c:\inetpub\wwwroot目录下会生成以下文件:
Header_01.aspx里是一句中文,其实该文件只是个引导符号,里面内容可以是任意的,可以放点有迷惑性的文本,但是文件名必须是Header_01.aspx。
bin里面的两个文件就是编译好的webshell了。
另外PrecompiledApp.Config文件不是必须的,可以直接删掉。
4)将bin目录和Header_01.aspx复制到网站根目录下,访问一下该页面。
注意:实际测试时发现,只有放到根目录才能成功。