将ASPX文件编译成一个独立的dll文件,加强隐蔽性。
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目录(可以先找个空目录运行,完了把所有文件复制过去即可),执行如下命令:-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复制到网站根目录下,访问一下该页面。
注意:实际测试时发现,只有放到根目录才能成功。
下面是编译方法:
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
-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复制到网站根目录下,访问一下该页面。
注意:实际测试时发现,只有放到根目录才能成功。
评论30次
可以尝试下 ,不知道能不能过杀软?
探索基于.NET下妙用DLL处理映射实现后渗透权限维持 http://www.freebuf.com/articles/web/179240.html 这样的就不需要留文件了,放在bin目录下就可以了
web.config 这个文件被管理覆盖的概率很大
isapi 比较不错 各有各的好处吧
DLL杀软能杀掉吗?
.net framework 2.0以上才是组件必备的,前几天抓了个服务器试搞了下没有成功提示说是string不能为空,不知是那里的问题
直接使用一个dll可以被加载吗?dll放在的目录有什么要求限制吗?被编译生成的dll还可以反编译成aspx文件吗?
只要之前丢个Header_01.aspx文件上去内容无所谓就可以的吧。 Header_01.aspx这个文件名在编译之前应该也可以改个更具迷惑性的文件名这样应该长久保留应该问题不大。
实际应用中,dll不是更容易被杀吗
只留一个dll 不行吗?
收藏下 以后研究研究
这个只是个想法,看到其他大牛成功过。
有一款叫 supershell.aspx 的就有这个功能 得修改web.config文件
楼主,请问你这个是不是 编译了以后。aspx shell不能删掉?而不是只要一个dll就可以的吗?
你说那个方法需要修改wen.config,在httpHandlers节建立aspx到dll的映射:<add verb="*" path="aspx文件名" type="类名,dll文件" /> 比如:<system.web> <httpHandlers> <add verb="*" path="index.aspx" type="BBS.IndexPage, bbs" /> </httpHandlers> </system.web> 但是这样做的话,你的前端代码(html标记语言)就必须放到aspx文件里面了,要不然就全部用后台代码输出到前端。
web.config
嗯
楼主,请问你这个是不是 编译了以后。aspx shell不能删掉?而不是只要一个dll就可以的吗?
你说那个方法需要修改wen.config,在httpHandlers节建立aspx到dll的映射:<add verb="*" path="aspx文件名" type="类名,dll文件" /> 比如:<system.web> <httpHandlers> <add verb="*" path="index.aspx" type="BBS.IndexPage, bbs" /> </httpHandlers> </system.web> 但是这样做的话,你的前端代码(html标记语言)就必须放到aspx文件里面了,要不然就全部用后台代码输出到前端。
web.config
楼主,请问你这个是不是 编译了以后。aspx shell不能删掉?而不是只要一个dll就可以的吗?
你说那个方法需要修改wen.config,在httpHandlers节建立aspx到dll的映射:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="*.aspx.cs" Inherits="WebApplication.*" %> 其它他要这么一句引用,做到web.config就可以了 其它的自己测试
dll都需要调用吧,就还是得要个aspx文件啊
好吧,我不会告诉你。。很多年前就有这个了,但答应别人不能外传。
呵呵,我也有了。
好吧,我不会告诉你。。很多年前就有这个了,但答应别人不能外传。
楼主,请问你这个是不是 编译了以后。aspx shell不能删掉?而不是只要一个dll就可以的吗?
Header_01.aspx里是一句中文,其实该文件只是个引导符号,里面内容可以是任意的,可以放点有迷惑性的文本,但是文件名必须是Header_01.aspx。只要之前丢个Header_01.aspx文件上去内容无所谓就可以的吧。 Header_01.aspx这个文件名在编译之前应该也可以改个更具迷惑性的文件名这样应该长久保留应该问题不大。
原来是这样啊,如果管理员把 header_01_aspx给删了,那就用不了了吗?