.NET预编译场景下的上传

admin 2023年2月3日11:01:19评论87 views字数 979阅读3分15秒阅读模式

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

.NET预编译场景下的上传

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

预编译原理

.NET下的编译方式大致可以分成两种方式,分别为动态编译和预编译。
动态编译
首次访问需要编译,响应速度会较慢。并且代码内容是明文保存可查看修改,平时上传aspx马就是这种,直接上传即可连接。
预编译
预编译模式下将编译除静态资源外的所有文件, 此过程中编译器将创建的程序集存储于项目根目录下的Bin文件夹,另外也会同步到一个.NET特殊的目录 Microsoft.NETFrameworkversionTemporary 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:UsersAdministratorDesktopdoNet C:UsersAdministratorDesktopcompiled_file -fixednames

参数

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

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

.NET预编译场景下的上传


编译后生成如下文件

.NET预编译场景下的上传


编译后的aspx占位符文件不可删除,此文件内容为
这是预编译工具生成的标记文件,不应被删除!

上传shell
将bin目录下的dll以及compiled文件上传到目标bin目录下,占位符Aspx上传到Web跟目录下

.NET预编译场景下的上传

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

感谢:

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

  • @Amzza0x00

原文始发于微信公众号(仙友道):.NET预编译场景下的上传

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月3日11:01:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   .NET预编译场景下的上传https://cn-sec.com/archives/1290803.html

发表评论

匿名网友 填写信息