.NET预编译场景下的上传
2022-9-10 13:37:11 Author: 仙友道(查看原文) 阅读量:26 收藏

上周碰到了这个问题,上传aspx马,访问后提示 "未预编译文件,因此不能请求该文件",尝试用asp马绕过无果。

绕过限制:
可上传文件到/bin目录下,或者说上传可以跨目录

预编译原理

.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

参数

  • -v 表示指向的虚拟地址路径 /Lib
  • -p 要编译的源Web项目所在文件夹、以及输出的文件夹

  • -fixednames 表示每个.aspx都编译生成单独的dll文件,并使用固定文件名

编译后生成如下文件

编译后的aspx占位符文件不可删除,此文件内容为
这是预编译工具生成的标记文件,不应被删除!
上传shell
将bin目录下的dll以及compiled文件上传到目标bin目录下,占位符Aspx上传到Web跟目录下

这里起初用.NET4.0编译上传后还是提示未预编译文件,后来在@Amzza0x00 大佬的提示下用.NET2.0编译成功执行。

感谢:

  • https://www.dongchuanmin.com/net/3280.html

  • @Amzza0x00


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg3NjYwNDgzMQ==&mid=2247485499&idx=1&sn=49da54a6d5f4602e2bb5c592d0b7f2e5&chksm=cf2ef4cbf8597ddd24885778e9f9d6a27b66722e490972215e2b2d14df65f0f52432fad8f1b8#rd
如有侵权请联系:admin#unsafe.sh