常见高危Web漏洞原理及检测技术分析与研究

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 随着计算机技术以及信息网络通信技术的高速发展,人们也逐渐意识到信息安全的重要性,网络安全问题成为社会、国家的关注焦点。本文对Web漏洞的类型与原理、Web漏洞扫描技术的原理与应用进行了研究,分析了计算机网络中安全漏洞检测技术的应用策略。

1引言

目前,网络安全形式日益严峻,网络安全威胁不断增加对国家政治、经济、文化、国防安全及公民在网络空间中的合法权益面临诸多风险与挑战。而Web漏洞作为网络安全威胁因素中一个重要来源,更是不能忽视的。因此对Web漏洞进行分析及其检测技术的研究是具有重大意义的。

 

2 Web漏洞原理及其威胁

(1) Web漏洞定义

a) Web漏洞主要指网站程序自身存在致使网络信息系统安全策略相冲突的缺陷,使得系统或其应用数据的保密性完整性可用性访问控制等面临威胁。攻击者基于这些漏洞可能对网络系统构成:敏感信息泄露、身份假冒、拒绝服务、非授权访问等威胁。

(1) Web漏洞的分类

a) 高危漏洞:可以直接被利用的漏洞,且利用难度较低。利用之后可能对网站或服务器的正常运行造成严重影响对用户财产及个人信息造成重大损失。

b) 中危漏洞:利用难度极高,或满足严格条件才能实现攻击的漏洞。或漏洞本身无法被直接攻击,但能为进一步攻击起较大帮助作用的漏洞。

c) 低危漏洞无法直接实现攻击,当信息泄露可能让攻击者更容易找到其他安全漏洞。

(2) 文将着重去介绍、分析常见的 SQL注入漏洞、跨站脚本、使用含有已知漏洞的组件,不安全的反序列化、XML外部实体、文件上传漏洞这六种常的WEB漏洞。

a) 注入漏洞:是指因字符的过滤规则不严谨造成的,攻击者可以将不受用户信任的数据作为命令或者信息发送到服务器解析器。攻击者的恶意数据可以诱使服务器解释器在没有相应授权的情况下执行恶意命令和非法访问数据。最常见的当属SQL注入漏洞,根据注入点的数据类型不同,我们主要将其分为两大类:数字/整数型注入和字符型注入。

数字/整数型注入:

当注入的参数为整数时就是数字型注入,或者叫整数型注入。其SQL语句原型一般为:

SELECT * FROM table WHERE id=1

此处id参数为整数,语句两边没有引号。测试时候可以使用1+2和4-1这种计算结果相同的参数值去构造请示,对比响应结果是否一致,如果两者结果相同就可能存在数字型注入。

字符型注入:

注入参数为字符串时就是字符型注入,其 SQL 语句原型类似:

SELECT * FROM table WHERE name='test'

此处的 name 为字符串参数,两边包含引号。这种类型的注入一般很好判断。

除了这两种类型,常见的搜索型注入,但我们认为其本质仍然属于字符型注入,只是相对特殊,因为此类注入常常用%作为关键字去闭合SQL语句。

实际场景常见的注入方式包含布尔型盲注报错型注入联合查询注入多语句堆叠注入基于时间延迟盲注内联/嵌套查询注入。通常防御 SQL 注入的方法有白名单、参数化查询、WAF、RASP 等方法。如果请求参数有特定值的约束,比如参数是固定整数值,那么就只允许接收整数;还有就是常量值限制,比如特定的字符串、整数值等。这个时候,最好采用白名单的方式。参数化查询是预编译 SQL 语句的一种处理方式,所以也叫预编译查询,它可以将输入数据插入到 SQL 语句中的“参数”(即变量)中,防止数据被当作 SQL 语句执行,从而防止 SQL 注入漏洞的产生。WAF(Web 防火墙)能够抵挡住部分的SQL注入攻击。RASP 不用考虑网络请求中的各种复杂的数据处理过程,只需要在对应的漏洞触发函数进行 Hook 插桩检测等操作,同时 RASP 能够给出漏洞触发的程序上下文,帮助开发人员和安全人员快速定位漏洞代码,并实现漏洞的检测、告警和阻断。

 

b) 跨站脚本(XSS):在常见的Web漏洞中,XSS漏洞无疑是最常多见的。

XSS漏洞具体是指在网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或 JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本,实现盗号、钓鱼欺诈、篡改页面、刷广告流量、网页挂马、挖矿、键盘监听、窃取用户隐私等等恶意行为。

反射式XSS:这种类型的XSS漏会使应用程序或API包括未经过验证的用户进行输入,作为HTML输出的一部分。攻击者事将先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码,。换而言之,用户将需要与指向攻击者控制页面的某些恶意链接进行交互。常见形态有广告或非法内容、恶意漏洞网站。

存储式XSS:应用程序或者API将未过滤的用户输入存储下来了,并在后期在其他用户或者管理员的页面展示出来。也就是说,代码是存储在服务器中的,如在个人信息或发表文章等地方加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,容易造成蠕虫,盗窃cookie等。

基于DOM的XSS:DOM是一个与平台、编程语言无关的接口,它允许程序或者脚本动态的访问和更新文档内容、结构和样式,处理后的结果仍然能够成为显示页面的一部分。如果DOM中的数据没有经过逻辑严密的确认,就会产生基于DOM的XSS漏洞。这种XSS漏洞一般存在于页面的JavaScript框架、API、单页面程序中,攻击者可以动态的将可控脚本加入其中。

XSS的防御也必须根据不同位置采取不同的方案,具体有四种防御手段:输入检查、输出检查、Httponly Cookie、CSP。在测试XSS时,经常需要输入一些特殊字符,所以在最开始就直接做好输入检查有利于减少被攻击的可能性;XSS的出发关键点在于输出的位置,所以对输出检查尤为重要,当有网站需要支持富文本时,此时采用白名单的方式,直接限制允许输入的标签、字符是最佳方案;如果你在 Cookie 中设置了 HttpOnly 属性,那 JavaScript 脚本将无法读取到 Cookie,这样就能防止通过 XSS 窃取 Cookie,在一定程度上能够减少 XSS 的攻击范围.;内容安全策略(Content Security Policy,CSP)也是减少 XSS 攻击的一种方式 ,是浏览器提供一种防御机制。它采用的是白名单机制,告诉浏览器可以加载和执行哪些外部资源,这样就能防止被一些第三方恶意脚本注入执行,我们可以通过HTTP头信息的Content-Security-Policy的字段和网页的<meta>标签设置去开启CSP。

 

c)  使用含有已知漏洞的组件:组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。

在软件开发或者运行维护就当我们要做到:使用公共数据库(如CVE和CNVD等漏洞中心),项目邮件列表和安全邮件列表中时刻关注这些组件的安全信息并保证它们是最新的;建立组件使用的安全策略,比如需要某些软件开发实践,通过安全性测试保障发全新;在适当的情况下,考虑增加对组件的安全封装,去掉不使用的功能和/或安全薄弱的或者组件易受攻击的方面。

 

d) 不安全的反序列化:在web应用程序中,序列化是把对象转换成有序字节流,通常都是一段可阅读的字符串,以便在网络上传输或者保存在本地文件中。同样,如果我们想直接使用某对象时,就可能通过反序列化前面保存的字符串,快速地重建对象,也不用重写一遍代码,提高工作效率。

不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用改变应用逻辑或者实现远程代码来执行攻击,我们称其为数据结构攻击。包括:重播攻击、注入攻击和特权升级攻击。

 

e) XML外部实体:XML全称可扩展标记语言。与HTML一样,XML使用标签和数据的树状结构。XML外部实体攻击是一种针对解析XML格式应用程序的攻击类型之一,许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用,攻击一般发生在配置不当的XML解析器处理指向外部实体的文档时。信息安全人员通过构造恶意内容,导致读取任意文件、执行系统命令、内网探测与攻击等危害的一类漏洞。

XML主要的漏洞是XXE,不同的 XML 解析库有不同的关闭方式,比如全面介绍 XXE 防御方案的是 OWASP 发表的“XML External Entity Prevention Cheat Sheet”,针对不同的语言、XML 解析库,给出不同的防御方案,并提供关闭 XML 实体引用的代码示例

 

f) 文件上传漏洞:这是由于在文件上传功能中,由于对用户上传的文件数据未做有效检测或过滤不严,导致上传的恶意文件被服务端解释器解析执行,利用漏洞可获取系统控制权。很多网站都有一些文件上传功能,常见的是图片、视频、压缩文档上传,如果网站是 PHP 写的,那么上传 PHP 到服务器就有可能被解析,若服务器支持其他语言的解析执行,比如 ASP、JSP、ASPX 等文件也可达到同等攻击效果,达到恶意代码执行。

针对这种漏洞,使用WAF拦截木马上传,但这种比较容易被绕过;重编码文件,比如对视频或者图片做转换处理;严格检测上传文件后缀名、文件头、Content-type;限制文件大小和上传的目录不可解析;隐藏上传文件路径相关信息,比如关闭错误回显这些都是常见的安全防护措施。

 

3.WEB漏洞检测技术与研究

现在主流的Web漏洞检测方式基本分为以下三种:SAST(静态应用安全测试)、DAST(动态应用安全测试)和 IAST(交互式应用安全测试)。

SAST(Static Application Security Testing,静态应用程序安全测试)

SAST是通过分应用程序源代码以提早发现安全漏洞,也包括二进制文件的静态逆向分析。在产品形式上,主要体现为代码审计系统等。SAST 分析比较全面,漏洞发现率高,哪怕是当前未能执行到的代码,也可能被发现到漏洞,但是对于它最大的挑战是如何降低误报率。但代码审计本质上就是在误报率与发现率之间相互协调,直到在可接受的范围内找到一个平衡的过程。如果发现率很高,但其中包含过多的误报,告警量多到无法运营的程度,那也等同于没发现。

   DAST(Dynamic Application Security Testing,动态应用程序安全测试)

DAST是对应用程序进行黑盒分析,通常在测试或运行阶段分析应用程序的动态运行状态,通过模拟黑客行为对应用程序进行动态攻击,分析应用程序的反应,从而确定是否存在漏洞。DAST 通过动态发送 payload 来测试漏洞,所以准确率相对较高,而且检测出来后就直接有现成的 PoC(Proof of Concept,概念验证)可以验证。但如果有些代码未执行,就无法发现。因此,跟 SAST 结合使用是最好的方式。DAST在产品上一般体现为漏洞扫描器。

   IAST(Interactive Application Security Testing,交互式应用安全测试)

IAST是近几年兴起的一种应用安全测试新技术,曾被 Gartner 咨询公司列为网络安全领域的 Top 10 技术之一。IAST 融合了 DAST 和 SAST 的优势,漏洞检出率极高、误报率极低,同时可以定位到 API 接口和代码片段。

 

4.结束语

本文介绍了一些常见的Web漏洞特性以及防范技术、当下主流的Web漏洞检测技术,这些漏洞扫描技术在一定程度保证了网络系统的安全。希望信息安全从业人员、开发人员在日常研究工作中能够提防这些漏洞,研究开发下一代新型漏洞检测技术,为网络安全提供保障。

相关文章
|
10天前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
33 7
|
9天前
|
SQL 安全 数据库
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
36 1
|
6天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
17 0
|
11天前
|
Java Maven Apache
Struts 2 配置不再难!跟着这篇详解从零搭建开发环境
【8月更文挑战第31天】要搭建Struts 2开发环境,需先安装JDK,然后下载并解压Struts 2二进制包,将其核心库`struts2-core`添加到项目类路径中。使用Maven或Gradle时,可在配置文件中添加依赖。接着,在`web.xml`中配置Struts 2过滤器及其映射。`struts.xml`通常位于`src/main/resources`目录下,用于定义动作映射和拦截器等核心配置。最后,通过配置类路径下的`log4j.properties`文件,可以设置Struts 2的日志记录级别及输出方式。完成以上步骤后,即可开始基于Struts 2框架进行Web应用开发。
28 0
|
11天前
|
前端开发 Java UED
告别页面刷新时代:Struts 2 Ajax技术揭秘,轻松实现动态加载,Web应用焕然一新!
【8月更文挑战第31天】在Web应用开发中,用户体验至关重要。为减少页面刷新带来的不适,Ajax技术应运而生。Struts 2作为流行的Java EE框架,通过内置的Ajax支持简化了无刷新页面动态加载的实现。本文通过对比传统请求响应模式,展示了Struts 2如何轻松实现Ajax功能,提升了用户体验和开发效率,并灵活地实现了数据交换。然而,使用Ajax时还需注意SEO和跨域请求等局限性。
24 0
|
11天前
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
17 0
|
11天前
|
安全 Java 云计算
JSF 应用究竟何去何从?云端部署能否成为其全新突破点?快来一探究竟!
【8月更文挑战第31天】本文介绍了将JavaServer Faces(JSF)应用部署到云平台的过程。首先,根据成本、功能、可靠性和安全性选择合适的云平台。接着,展示了构建简单JSF应用的示例代码。最后,以AWS Elastic Beanstalk为例,详细说明了部署流程。部署至云端可提升应用的可用性、扩展性和安全性。
24 0
|
11天前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
34 0
|
11天前
|
开发者 前端开发 Apache
Apache Wicket Ajax揭秘:轻松几步,让你的Web应用告别“呆板”,焕发新生!
【8月更文挑战第31天】随着互联网技术的发展,Web应用的交互性成为评价网站成功的关键指标。Apache Wicket作为一款卓越的Java Web框架,不仅具备强大的组件化开发能力,还内置了对Ajax技术的支持,使开发者能轻松提升Web应用的交互体验。通过简单的代码示例展示了如何在不刷新页面的情况下异步更新页面元素,极大提升了用户体验。Wicket提供了多种Ajax组件和行为,如AjaxFallbackLink、AjaxButton等,满足不同场景需求,并支持自定义Ajax行为,帮助开发者实现复杂交互效果。合理运用Wicket的Ajax功能,可显著增强网站竞争力。
20 0
|
11天前
|
开发者 缓存 数据库
【性能奇迹】Wicket应用的极速重生:揭秘那些让开发者心跳加速的调优秘技!
【8月更文挑战第31天】在软件开发中,性能优化是确保应用快速响应和高效运行的关键。本书《性能调优:Apache Wicket应用的速度提升秘籍》详细介绍了如何优化Apache Wicket应用,包括代码优化、资源管理、数据库查询优化、缓存策略及服务器配置等方面。通过减少不必要的组件渲染、优化SQL查询、使用缓存和调整服务器设置等方法,本书帮助开发者显著提升Wicket应用的性能,确保其在高并发和数据密集型场景下的稳定性和响应速度。
23 0