当前位置: 首页 > news >正文

【web-代码审计】(14.4)ASP.NET

目录

ASP.NET

1.1、简介:

1.2、确定用户提交的数据

简述:

1.3、会话交互

简述:

1.4、潜在危险的API

文件访问

数据库访问

动态代码执行

OS命令执行

URL重定向

套接字

配置ASP.NET环境


ASP.NET

1.1、简介:

在ASP.NET平台上获取用户提交的输入的方法、与用户会话交互的方式、其中存在的潜在危险的API以及与平台安全相关的配置选项。

1.2、确定用户提交的数据

简述:

ASP.NET应用程序通过System.Web.HttpRequest类获取用户提交的输入,这个类中包含大量Web应用程序用于访问用户提交的数据的属性和方法

1.3、会话交互

简述:

1、ASP.NET应用程序以各种方式与用户会话进行交互,以保存和检索信息。

2、使用Session属性可轻松保存和检索当前会话中的信息,这个属性的访问方式与任何其他索引集合类似

Session["Myname"] = txtMyName.Text;           //保存用户名

lblwelcome.Text = "wekcome " +Session["MyName"];       //检索用户名

3、ASP.NET个性化配置与Session属性的用法非常相似,其唯一不同之处在于,前者相对于一个特定的用户,因此在相同用户的不同会话中持续保存不变,在不同的会话中,用户的身份通过验证机制或一个特殊的持久性cookie得以重新确认,在用户个性化配置中,数据以下列方式保存和检索:

Profile.Myname = txtMyName.Text;           //保存用户名

lblwelcome.Text = "wekcome " +Profile.Myname;        //检索用户名

4、另外System.Web.SessionState.HttpSessionState类也可用于保存和检索会话中的信息。它以字符串名称与对象值之间映射的方式保存信息

1.4、潜在危险的API

文件访问

System.IO.File是用于访问ASP.NET文件最主要的类,它的所有方法都是静态的,并且没有公共构造函数。

这个类的37个方法全都接受一个文件名作为参数,如果未检查其中是否包含点-点斜线序列,就提交用户可控制的数据,就会造成路径遍历漏洞


数据库访问

1、ASP.NE下许多用于访问数据库的API, 下面的类主要用于建立并执行SQL语句:

System.Data.SqlClient.SqlCommand

System.Data.SqlClient.SqlDataAdapter

System.Data.Oledb.OleDbCommand

System.Data.Ddbc.OdbcCommand

System.Data.SqlServerCe.SqlCeCommand

2、其中每个类都有一个构造函数,它接受一个包含SQL语句的字符串,而且每个类都有一个CommandText属性,可用于获取并设定SQL语句的当前值,如果适当地配置一个命令对象,通过调用Execute方法即可执行SQL语句。

3、如果用户提交的数据属于以查询执行的字符串的一部分,那么应用程序可能易于受到SQL注入攻击,但如果每一个类通过它们的Parameters属性支持预处理语句,允许应用程序创建一个包含参数占位符的SQL语句,并以可靠且类型安全的方式设定这些占位符的值,按正常的方式使用,这种机制就不易受到SQL注入攻击


动态代码执行

1、VBScript函数Eval接受一个包含VBScript表达式的字符串自变量,该函数求出这个表达式的值,并返回结果,如果用户可控制的数据被合并到要计算值的表达式中,那么用户就可以执行任意命令或修改应用程序的逻辑。

2、函数Execute和ExecuteGlobal接受一个包含ASP代码的字符串,这个ASP代码与直接出现在脚本中的代码的执行方式完全相同。冒号分隔符用于将几个语句连接在一起,如果向Execute函数提交用户可控制的数据,那么攻击者就可以在应用程序中执行任意命令


OS命令执行

1、下面的API可以各种方式在ASP.NET应用程序中运行外部进程

System.Diagnostics.Start.Process

System.Diagnostics.Start.ProcessStartInfo

2、在对对象调用Start之前,可以向静态Process.Start方法提交一个文件名字符串,或用一个文件名配置Process对象的StartInfo属性,如果文件名字符串可完全由用户控制,那么应用程序几乎可以肯定易于受到任意命令执行攻击。但如果用户仅能够控制提交给Start的部分字符串,那么应用程序仍然可能易于受到攻击

3、API并不解释&与I等shell元字符,也不接受文件名参数中的命令行参数,因此如果用户仅控制文件名参数的一部分,这种攻击是唯一能够成功的攻击。

4、已被启动的进程的命令行参数可以使用ProcessStartInfo类的Arguments属性设定。如果只有Arguments参数可由用户控制,应用程序仍然易于受到除代码执行以外的其他攻击。例如,如果应用程序以用户可控制的参数作为目标URL执行wget程序,那么攻击者就可以向wget进程提交危险的命令行参数, 例如致使它下载一个文档,并将该文档保存在文件系统中的任何位置


URL重定向

1、下面的API 用于在ASP.NET中发布一个HTTP重定向:

System.Web.HttpResponse.Redirect

System.Web.HttpResponse.Status

System.Web.HttpResponse.StatusCode

System.Web.HttpResponse.AddHeader

System.Web.HttpResponse.AppendHeader

Server.Transfer

2、通常使用HttpResponse.Redirect方法可以引起一个重定向响应,该方法接受一个包含相对或绝对URL的字符串。如果这个字符串的值由用户控制,那么应用程序可能易于受到钓鱼攻击

3、还必须确保检查Status/StatusCode属性与AddHeader/ AppendHeader方法的用法,如果某个重定向包含一个含有HTTPLocation消息头的3xx响应,应用程序就可能使用这些API执行重定向

4、Server.Transfer方法有时也可用于实现重定向。实际上这个方法并不能实现HTTP重定向,而是应根据当前请求修改被服务器处理的页面。因此不能通过破坏它重定向到一个站外URL,这个方法对攻击者而言并没有多大用处


套接字

System.Net.Sockets.Socket类用于创建网络套接字,创建一个Socket对象后,再通过调用Connect方法连接这个对象,该方法接受目标主机的IP与端口信息为参数,如果用户能够以某种方式控制这些主机信息,攻击者就可以利用应用程序与任意主机建立网络连接、无论这些主机位于因特网上、私有DMZ中还是在应用程序上运行的内部网络内


配置ASP.NET环境

Web根目录下的web.config XML文件包含ASP.NET环境的配置设置,它还控制着应用程序的行为

如果数据库连接字符串之类的敏感数据保存在配置文件中,应使用ASP.NET"受保护配置"特性加密这些数据

相关文章:

  • 一、Maven-单一架构案例(创建工程,引入依赖,搭建环境:持久化层,)
  • vue-cli 初始----安装运行Vue项目
  • 华尔街日报请求分析
  • Ubuntu18.04安装深度学习环境(Anaconda、显卡驱动、CUDA、Tensorflow-GPU等)
  • Linux关于yum和vim入门的一些问题
  • 网络请求(四)—Socket
  • Python中的模块
  • JavaEE、Spring
  • setTimeout和setInterval区别,以及定时器的传参功能
  • 【数学分析笔记04】数列与数列极限
  • 1、设计模式的简介
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • deepstream--nvinfer
  • python+vue+elementui企业会议管理系统django
  • centos 部署java环境,拷贝jar包并运行
  • SegmentFault for Android 3.0 发布
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • “大数据应用场景”之隔壁老王(连载四)
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Android单元测试 - 几个重要问题
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • javascript从右向左截取指定位数字符的3种方法
  • JSONP原理
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • RxJS: 简单入门
  • 编写符合Python风格的对象
  • 使用parted解决大于2T的磁盘分区
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 数组的操作
  • 说说动画卡顿的解决方案
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用Canvas画一棵二叉树
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (2)(2.10) LTM telemetry
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)springcloud实战之config配置中心
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .gitignore文件_Git:.gitignore
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET正则基础之——正则委托