上周碰到了这个问题,上传aspx马,访问后提示 "未预编译文件,因此不能请求该文件",尝试用asp马绕过无果。
预编译原理
.NET下的编译方式大致可以分成两种方式,分别为动态编译和预编译。首次访问需要编译,响应速度会较慢。并且代码内容是明文保存可查看修改,平时上传aspx马就是这种,直接上传即可连接。预编译模式下将编译除静态资源外的所有文件, 此过程中编译器将创建的程序集存储于项目根目录下的Bin文件夹,另外也会同步到一个.NET特殊的目录 \Microsoft.NET\Framework\version\Temporary ASP.NET Files 文件夹下,Bin目录下会编译生成两类为文件,一类是扩展名为.compiled,该文件包含指向与该页相应的程序集名称;另一类文件是编译后的扩展名为.dll 的程序集文件。此处测试使用aspx文件为输出“hello world”<%@ Page Language="C#"%>
<% Response.Write("hello,world"); %>
使用Visual Studio提供的可执行程序aspnet_compiler 预编译.NET项目
aspnet_compiler -v /Lib -p C:\Users\Administrator\Desktop\doNet C:\Users\Administrator\Desktop\compiled_file -fixednames
参数
-p 要编译的源Web项目所在文件夹、以及输出的文件夹
-fixednames 表示每个.aspx都编译生成单独的dll文件,并使用固定文件名
编译后生成如下文件
将bin目录下的dll以及compiled文件上传到目标bin目录下,占位符Aspx上传到Web跟目录下这里起初用.NET4.0编译上传后还是提示未预编译文件,后来在@Amzza0x00 大佬的提示下用.NET2.0编译成功执行。
感谢:
文章来源: http://mp.weixin.qq.com/s?__biz=Mzg3NjYwNDgzMQ==&mid=2247485499&idx=1&sn=49da54a6d5f4602e2bb5c592d0b7f2e5&chksm=cf2ef4cbf8597ddd24885778e9f9d6a27b66722e490972215e2b2d14df65f0f52432fad8f1b8#rd
如有侵权请联系:admin#unsafe.sh