WEB攻防-.NET特性常见漏洞

ops/2024/10/18 16:54:19/

目录

前置知识:

DLL文件

.NET和DLL文件

C#和DLL文件

关系总结

.NET 配置调试-信息泄露

.NET 源码反编译-DLL 反编译与未授权访问

编译DLL文件

反编译DLL文件

注意事项

案例:

验证代码文件有没有可以绕过(Cookie&Session)

找那些文件没有包含验证代码文件


前置知识:

DLL文件

DLL文件(Dynamic Link Library)是Windows操作系统中的一种二进制文件格式,它包含可以由多个程序同时使用的代码和数据。DLL文件通常包含函数、数据、资源等,它们可以被执行文件(如.exe文件)或其他DLL文件调用。DLL文件有助于代码重用和模块化,因为多个应用程序可以共享同一个DLL文件中的代码。

.NET和DLL文件

在.NET中,DLL文件通常指的是程序集(Assembly),它们是.NET框架下的可重用代码单元。程序集可以是DLL文件或EXE文件,它们都包含MSIL(Microsoft Intermediate Language)代码,这是.NET框架下的中间语言。当程序集被加载到.NET运行时环境(CLR)中时,MSIL代码会被编译成机器码并执行。

C#和DLL文件

C#是一种编译型语言,但它编译成的不是直接可以在CPU上执行的机器码,而是MSIL代码。这意味着C#编写的代码在编译时会生成DLL或EXE文件,这些文件包含MSIL代码。当这些文件被执行时,CLR会负责将MSIL代码编译成机器码,并在适当的时候执行它。

关系总结

  • C#编译成DLL或EXE文件:C#编写的代码在编译时会生成DLL或EXE文件,这些文件包含MSIL代码。
  • .NET提供运行时环境:.NET框架的CLR提供运行时环境,负责将MSIL代码编译成机器码并执行。
  • DLL文件是.NET程序集:在.NET中,DLL文件是程序集的一种形式,它包含可由多个应用程序共享的代码。

因此,C#、.NET和DLL文件之间的关系是:C#编写的代码编译成包含MSIL代码的DLL或EXE文件,这些文件在.NET框架的CLR运行时环境中执行。DLL文件作为程序集,在.NET中扮演着重要角色,使得代码可以模块化、重用和共享。

.NET 配置调试-信息泄露

在ASP.NET应用程序中,web.config 文件用于配置应用程序的行为。customErrors 元素是 web.config 文件中的一个重要部分,它允许你控制当应用程序发生错误时显示给用户的错误信息。customErrors 元素的 mode 属性决定了是否启用自定义错误页面,以及如何处理这些错误。

mode 属性可以设置为以下几个值:

  1. Off:禁用自定义错误页面。当发生错误时,会显示详细的错误信息给最终用户,包括堆栈跟踪。这通常只在开发环境中使用,因为它可能会泄露敏感信息。

  2. On:启用自定义错误页面。当发生错误时,会重定向到指定的错误页面(通常是一个友好的错误消息),而不是显示详细的错误信息。这是生产环境中常用的设置,因为它可以防止敏感信息泄露给最终用户。

  3. RemoteOnly:这是一个介于 OffOn 之间的选项。当请求来自本地服务器(即开发机器)时,会显示详细的错误信息;而当请求来自远程客户端时,会重定向到自定义错误页面。这允许开发人员在本地开发时看到完整的错误信息,而在部署到生产环境时仍然保护用户免受敏感信息的侵害。

要配置 customErrors 元素和 mode 属性,你需要在 web.config 文件的 <system.web> 部分中添加或修改 customErrors 元素。下面是一个配置 customErrors 的示例:

<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="&#126;/Error.aspx">
<error statusCode="404" redirect="&#126;/Error404.aspx" />
<error statusCode="500" redirect="&#126;/Error500.aspx" />
</customErrors>
</system.web>
</configuration>

在这个示例中,mode 被设置为 "On",这意味着当发生错误时,应用程序将重定向到 Error.aspx 页面。对于特定状态码(如 404 和 500),可以指定不同的错误页面。

确保在生产环境中始终启用自定义错误(即设置 mode="On"),以保护应用程序免受信息泄露攻击。同时,确保自定义错误页面不包含任何可能泄露应用程序内部信息的内容。

案例演示:

customErrors 元素的 mode 属性设置为On时候,这里我写了一个报错页面,让他报错默认跳转到Error500.html

因为我没有配置数据库,所以在登录页面测试,登录肯定涉及到查数据库的,所以肯定会报错

而 当customErrors 元素的 mode 属性设置为Off时候,就爆出了数据库错误,和.NET版本

.NET 源码反编译-DLL 反编译与未授权访问

DLL(动态链接库)文件在.NET环境中是包含已编译代码的库,它们通常由C#、VB.NET或其他.NET语言编写的源代码编译而成。这些文件包含元数据、中间语言(MSIL)代码和资源,它们在运行时被.NET公共语言运行时(CLR)解释或即时编译(JIT)成机器代码。

编译DLL文件

在.NET中,你可以使用Visual Studio或命令行工具(如csc.exe对于C#)来编译源代码并生成DLL文件。以下是使用Visual Studio编译DLL的基本步骤:

  1. 创建类库项目:在Visual Studio中,选择“创建新项目”并选择“类库”模板。
  2. 编写代码:在项目中添加类和方法,编写你的逻辑。
  3. 构建项目:选择“生成”菜单中的“生成解决方案”来编译项目。如果编译成功,将在项目的输出目录(通常是bin\Debugbin\Release)中生成DLL文件。

反编译DLL文件

反编译DLL文件意味着将已编译的二进制代码转换回源代码或中间表示形式。在.NET中,由于元数据与代码一起存储,因此可以相对容易地反编译DLL以获取源代码的近似表示。但是,请注意,反编译得到的代码通常不会是原始的、未经修改的源代码,特别是如果原始源代码经过了混淆或加密处理。

以下是使用反编译器反编译DLL文件的步骤:

  1. 选择反编译器:选择一款.NET反编译器,如dotPeek、ILSpy、dnSpy或JustDecompile。
  2. 打开DLL文件:使用反编译器的图形界面打开DLL文件。
  3. 浏览代码:反编译器将显示DLL中的类、方法和其他成员。你可以浏览这些成员并查看它们的实现。
  4. 导出代码(可选):一些反编译器允许你将反编译的代码导出为项目文件或源代码文件。这通常不是原始源代码的完美复制,但可以作为起点进行进一步的开发或分析。

注意事项

  • 混淆和加密:如果DLL经过了混淆或加密处理,反编译得到的代码可能很难理解或分析。
  • 不完整性:即使使用了最先进的反编译器,也不能保证得到的代码与原始源代码完全相同。有些细节可能会在编译过程中丢失。

案例:

工具:ILSpy,burp

未授权访问一般分两种情况:

  • 验证代码文件有没有可以绕过(Cookie&Session)

当我们访问http://192.168.10.134/purchase.pd.aspx#时,会跳转让我们登录

打开pd.aspx源文件,并没有看到验证代码,但可以看到有一个母版路径purchase.Master,CodeBehind指向的后端代码和继承了purchase.pd

打开purchase.Master也没有验证代码,但是继承了pur

使用ILSpy对bin目录下的purchas.dll反编译,查看Purchase.Purchase.pur的源码,可以看到代码中对GetUserId作了一个判断,满足条件就跳转登录页面

点一下UserHelper追踪到这个类,可以看到这个方法做了一个Cookie判断,如果"userinfo"这个Cookie存在,则从该Cookie中取出名为"userid"的值,并将其转换为整数返回。都不满足条件就返回-1,联合上面代码就是让其跳转登录页面

使用burp抓包尝试验证代码可不可以绕过(Cookie&Session),这种情况一般在白盒可以看源代码的情况下

正常情况会被重定向

当我们添加Cookie:userinfo=userif=1时,验证代码就被绕过了

回到拦截页面添加这个Cookie在放包,就成功访问到了

  • 找那些文件没有包含验证代码文件

比如popuser.aspx 就没有包含验证码的母版

直接访问


http://www.ppmy.cn/ops/21107.html

相关文章

华为昇腾AI云服务:让每个人轻松实现个人专属大模型

随着人工智能技术的飞速发展&#xff0c;大型模型的训练和部署变得日益普遍。然而&#xff0c;要实现个人定制的大型模型往往需要巨大的计算资源和专业知识。在这个背景下&#xff0c;昇腾AI云服务的出现为每个人提供了便捷的途径&#xff0c;让个人用户也能够轻松地实现个人专…

2024/4/24总结

js进阶 作用域 作用域分为全局作用域和局部作用域 局部作用域 分为块级作用域&#xff08; 就是使用 {} 包裹起来的代码称为代码块 &#xff09;和函数作用域&#xff08; 顾名思义就是函数包裹的部分 &#xff09; let 和 const 声明的常量会产生块级作用域 var不会产生…

java8 Stream流常用方法(持续更新中...)

java8 Stream流常用方法 1.过滤数据中年龄大于等于十八的学生2.获取对象中其中的一个字段并添加到集合(以学生姓名&#xff08;name&#xff09;为例)3.获取对象中其中的一个字段并转为其他数据类型最后添加到集合(以学生性别&#xff08;sex&#xff09;为例&#xff0c;将Str…

Java、Tomcat、Apache HTTP Server以及浏览器服务器的关系

一.浏览器服务器有哪些 浏览器服务器是指在互联网上扮演服务器角色的设备或程序&#xff0c;用于响应浏览器发出的请求并向浏览器返回相应的数据。 常见的浏览器服务器有以下几种&#xff1a; Apache HTTP Server&#xff1a;这是世界上最常用的web服务器软件之一&#xff0c;…

Android Room使用模板

1&#xff0c;引入依赖 plugins {id kotlin-kapt } dependencies {implementation "androidx.room:room-runtime:2.4.2"kapt "androidx.room:room-compiler:2.4.2" } 2&#xff0c;标记实体类 import androidx.room.Entity import androidx.room.PrimaryKe…

opencv图片绘制图形-------c++

绘制图形 #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem>bool opencvTool::drawPolygon(std::string image_p, std::vector<cv::Point> points) {cv::Mat ima cv::imread(image_p.c_str()); // 读取图像&#xf…

在Docker中为Nginx容器添加多端口映射的详细指南

Nginx作为一款高性能的HTTP和反向代理服务器&#xff0c;常被用于处理网站流量、负载均衡以及反向代理等多种场景。在Docker环境中部署Nginx时&#xff0c;灵活地配置端口映射是确保服务正常运行的关键步骤之一。本文将深入探讨如何在启动Nginx Docker容器时&#xff0c;通过Do…

[linux网络编程]UDP协议和TCP协议的使用

目录 看以下内容前&#xff0c;你要先了解main函数带参数有什么用、 了解socket的相关函数接口 如果不了解socket的相关函数接口请先看我这篇文章 main函数带参数有什么用 UDP udp_server 1.生成socket文件描述符 2.填充sockaddr_in信息 3.bind 4.发&#xff08;收&…