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

目录

前置知识:

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 就没有包含验证码的母版

直接访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/580421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费调用阿里云通义千问(qwen-1.8b-chat)大模型API

目录 前言通义千问开通注意 APi接口最后 前言 免费的GPT接口国内的使用一段实践就会失效&#xff0c;阿里云的qwen-1.8b-chat限时免费&#xff0c;可对接&#xff01;目前本账号小助手也是对接了该模型 通义千问 通义千问&#xff0c;是基于阿里巴巴达摩院在自然语言处理领域…

pytest测试基础

assert 验证关键字 需要pahton版本大于3.6&#xff0c;因为有个工具pip3;因为做了映射&#xff0c;所以下面命令pip3即pip pip install -U pytest -U参数可选&#xff0c;是如果已安装可更新。 如果上述demo变化 通过验证代码&#xff0c;测试环境没问题。…

服务器数据恢复—存储硬盘坏道,指示灯亮黄色的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台某品牌EqualLogic PS系列某型号存储&#xff0c;存储中有一组由16块SAS硬盘组建的RAID5磁盘阵列&#xff0c;RAID5上划分VMFS文件系统存放虚拟机文件。存储系统上层一共分了4个卷。 raid5阵列中磁盘出现故障&#xff0c;有2块硬盘…

关于远程桌面端口的优化措施的建议

在信息技术的世界中&#xff0c;远程桌面连接已成为企业、教育和个人用户之间共享信息、协作工作的重要工具。而这一切的背后&#xff0c;都离不开远程桌面端口&#xff08;RDP&#xff0c;Remote Desktop Protocol Port&#xff09;的支持。RDP端口不仅关乎到远程访问的顺畅性…

RK3568 学习笔记 : busybox 制作 ext4最小根文件系统

前言 开发板型号&#xff1a; 【正点原子】 的 RK3568 开发板 AtomPi-CA1 使用 VMware 虚拟机 ubuntu 20.04 编译 busybox&#xff0c;并制作 emmc 中的 ext4 根文件系统 rootfs 下载 busybox 可以在 https://busybox.net/downloads/snapshots/ 下载最新的 busybox&#xff…

蓝桥杯——分巧克力

思路非常简单&#xff0c;就是一个二分法。 注意一下l和r的取值&#xff0c;就可以了。 // 如何进行切分巧克力&#xff1a;横纵除法。例如&#xff1a;一块6*5的&#xff0c;欲切为3*3的小块&#xff0c;横&#xff1a;6/2 3&#xff1b;纵&#xff1a;5/31.所以可以切成3*…

学习100个Unity Shader (15) ---透明+双面渲染

文章目录 效果shader理解参考 效果 shader Shader "Example/AlphaBlendBothSided" {Properties{_Color ("Main Tint", Color) (1, 1, 1, 1)_MainTex ("Texture", 2D) "white" {}_AlphaScale ("Alpha Scale", Range(0, 1)…

第十五届蓝桥杯省赛第二场C/C++B组C题【传送阵】题解(AC)

解题思路 由于 a a a 数组是一个 1 1 1 到 n n n 的一个排列&#xff0c;那么形成的一定是如下形式&#xff1a; 一定会构成几个点的循环&#xff0c;或者是几个单独的点。 从任意点开始&#xff0c;如果能进入一个循环&#xff0c;一定可以将整个循环的宝藏都拿走&#x…

基于Amazon Bedrock打造Claude3 Opus智能助理

近期&#xff0c;Anthropic 发布了其最新的大模型 Claude3。截止本文撰写时&#xff0c;Claude3 Opus、Claude3 Sonnet、Claude3 Haiku 均已在 Amazon Bedrock 可用&#xff0c;随着 Amazon Bedrock 可提供越来越多的大模型&#xff0c;您可以在您的应用场景里将其落地&#xf…

Pytorch GPU版本安装

一、背景 记录一下安装Pytorch GPU版本过程。 由于手残&#xff0c;卸载了电脑上的显卡驱动&#xff0c;现在我连显卡类型是啥都不知道了。 总体思路&#xff1a;安装显卡驱动->安装cuda->安装pytorch库 二、安装显卡驱动 2.1 查看本地显卡型号 通过「DirectX 诊断工具…

详细谈电脑ip、域名、内网、外网、localhost、127.0.0.1、网关等通讯基础知识(易懂)

1. ip地址与域名的定义以及其关系 ip地址的定义&#xff1a; IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式&#xff0c;它为互联网上的每一个网络和每一台主机分配一…

YAW-100B全自动压力试验机

一、简介 微机控制压力试验机测控系统采用高精度数字伺服阀&#xff0c;具有力闭环控制功能&#xff0c;能够实现等载荷速率加载或等应力速率加载&#xff0c;控制精度高&#xff0c;可靠性好&#xff0c;完全满足GB/T 17617《水泥胶沙强度检验方法&#xff08;ISO方法&#x…

2024五一劳动节海外网红营销指南:策略、内容与互动全解析

随着全球化的推进和互联网的普及&#xff0c;海外网红营销已经成为越来越多品牌扩大影响力、提升销售额的重要手段。而即将到来的2024年五一劳动节&#xff0c;也成为了品牌们争相推出营销活动的重要节点。本文Nox聚星将和大家从策略、内容和互动三个方面&#xff0c;解析如何利…

【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景API接口接口代码请求失败原因排查调通效果 常见返回类型相关文章 …

YOLO-yolov5构建数据集

1.收集数据集 创建一个dataset文件夹用来存放图片数据集。 我这里使用的图片数据集&#xff0c;是对一段视频进行抽帧得到的200张狗狗图片。 在dataset文件夹下新建images和labels文件夹&#xff0c;并将200张狗狗图片放入images中。 2.标注数据集 2.1安装标注工具labelimg…

Redis(单/多)线程

一、 Redis 单线程 与 多线程 怎么说&#xff1f; &#xff08;1&#xff09;重要的版本迭代 redis4 之前仅支持 单线程&#xff0c; redis 4之后慢慢 支持多线程&#xff0c; 直到redis6/7后才稳定 &#xff08;2&#xff09;redis 的 工作线程 是 单线程的 &#xff08…

MyBatis-Plus笔记——基础环境搭建

Spring 基础环境 Spring 基础环境 指的是 Spring MyBatis 辅助类 1.引入依赖 <properties> <maven.compiler.source>22</maven.compiler.source> <maven.compiler.target>22</maven.compiler.target> <project.build.sourceEncoding>…

Java-字符-charbyteASCII

1 需求 需求&#xff1a;ASCII表需求&#xff1a;打印 ASCII表需求&#xff1a;ASCII表 分类需求&#xff1a;ASCII表 中 常见字符需求&#xff1a;ASCII表 中 正则相关字符 2 接口 3.X ASCII表 参考资料&#xff1a; https://www.cnblogs.com/amosli/p/3832817.html 3.X 打印…

PotatoPie 4.0 实验教程(24) —— FPGA实现摄像头图像中心差分变换

为什么要对图像进行中心差分变换&#xff1f; 对图像进行中心差分变换的主要目的是计算图像中每个像素点的梯度。梯度在图像处理中是一个非常重要的概念&#xff0c;它可以用来描述图像中灰度变化的快慢和方向&#xff0c;常用于边缘检测、特征提取和图像增强等任务中。 具体…

2024LarkXR新增功能系列之九| 优化分配策略:增加GPU检查参数

Paraverse平行云实时云渲染解决方案LarkXR在2024年新增了优化分配策略&#xff0c;增强了GPU检查参数的能力&#xff0c;满足了复杂元宇宙/数字孪生场景多样性的可视化的需求&#xff0c;为这些应用找到了更好的解决方案。新版本的LarkXR在渲染请求分配策略上做出了显著的改进。…