OWASP&常见Web安全漏洞
- 一、OWASP介绍
- 二、OWASPTOP10与常见漏洞讲解
- 2.1、OWASP Top10 2013 VS 2017
- 2.2、OWASP Top10 2021
- 2.3、A1:2017 注入
- 2.3.1、SQL注入攻击
- 2.3.2、命令注入攻击
- 2.4、A2:2017失效的身份认证(业务逻辑漏洞)
- 2.5、A3:2017敏感数据泄漏
- 2.6、A4:2017XML外部实体(XXE)
- 2.7、A5:2017失效的访问控制(业务逻辑漏洞)
- 2.7.1、A5:失效的访问控制-水平越权
- 2.7.2、A5:失效的访问控制-垂直越权
- 2.8、A6:2017安全配置错误
- 2.9、A7:2017跨站脚本(XSS)
- 2.10、A8:2013跨站请求伪造(CSRF)
- 2.11、A10:2017使用含有已知漏洞的组件
一、OWASP介绍
- 官网:http://www.owasp.org.cn/
- OWASPTOP10指出了WEB应用面临最大风险的10类问题,是目前WEB应用安全方面最权威的项目。
- OWASP是一个开源的、非盈利的全球性安全组织,致力于应用软件的安全研究。OWASP的使命是使**应用软件更加安全,使企业和组织能够对应用安全风险作出更清晰的决策。**目前OWASP全球拥有140个分会近四万名会员,共同推动了安全标准、安全测试工具、安全指导手册等应用安全技术的发展。
二、OWASPTOP10与常见漏洞讲解
2.1、OWASP Top10 2013 VS 2017
2.2、OWASP Top10 2021
2.3、A1:2017 注入
- 注入:用户的输入被当成命令/代码执行或者解析了。
将
不受信任的数据作为命令或查询的一部分
发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
用户的输入并非固定位置,他可能发生在:
输入框
搜索栏
提交表单
URL链接
所有的GET请求和请求包头
所有的POST请求和请求包头
留言
评论
……
(几乎任何数据源都有可能成为注入载体,只要是能被发出的数据的位置,需细心发现,经验和想象)
可被执行的代码:
SQL
LDAP
Xpath or NoSQL
系统命令
XML语言
SMTP包头
表达式语句
ORM查询语句
2.3.1、SQL注入攻击
- 动态页面有时会通过脚本引擎将用户输入的参数按照预先设定的规则构造成SQL语句来进行数据库操作,SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,改变原有的SQL语句的语义来执行攻击者所要的操作,其主要原因是程序没有采用必要的措施避免用户输入内容改变原有SQL语句的语义。
SQL注入的危害:
绕过登录验证
:使用万能密码登录网站后台等。获取敏感数据
:获取网站管理员帐号、密码等。文件系统操作
:列目录,读取、写入文件等。注册表操作
:读取、写入、删除注册表等。执行系统命令
:远程执行命令。
Eg:西南交通大学峨眉校区SQL注入漏洞
- http://zzb.em.swjtu.edu.cn/html/zugong.aspx?ZugongID=1751
2.3.2、命令注入攻击
- web应用代码中,有时会允许接收用户输入一段代码,之后在web应用服务器上执行这段代码并返回给用户,如果这一段代码没有进行限制,用户就可能执行恶意代码,产生意想不到的危害。
2.4、A2:2017失效的身份认证(业务逻辑漏洞)
- 因为各种代码或者逻辑缺陷,导致绕过登陆或者匿名顶替登陆等。
通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。
通常的漏洞存在形式:
暴力破解登陆
撞库
默认口令
二次校验失效
数据明文传输
URL暴露会话ID
用户登陆后不会更换会话ID(固定会话攻击)
会话不会失效
……
- Eg:失效的身份认证-绕过验证-任意密码重置
2.5、A3:2017敏感数据泄漏
- 许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。
攻击案例场景:
- 场景#1:一个应用程序使用自动化的数据加密系统加密信用卡信息,并存储在数据库中。但是,当数据被检索时被自动解密,这就使得SQL注入漏洞能够以明文形式获得所有信用卡卡号。
- 场景#2:一个网站上对所有网页没有使用或强制使用TLS,或者使用弱加密。攻击者通过监测网络流量(如:不安全的无线网络),将网络连接从HTTPS降级到HTTP,就可以截取请求并窃取用户会话cookie。之后,攻击者可以复制用户cookie并成功劫持经过认证的用户会话、访问或修改用户个人信息。除此之外,攻击者还可以更改所有传输过程中的数据,例如:转款的接接收者。
- 场景#3:密码数据库使用未加盐的哈希算法或弱哈希算法去存储每个人的密码。一个文件上传漏洞使黑客能够获取密码文件。所有这些未加盐哈希的密码通过彩虹表暴力破解方式破解。由简单或快速散列函数生成加盐的哈希,也可以通过GPU破解。
Eg:A3:2017敏感信息泄露
- 台湾某大型网站后台数据泄漏
- CSDN600W+账户密码明文泄漏
2.6、A4:2017XML外部实体(XXE)
- 许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用。攻击者可以利用外部实体窃取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。
- XMLExternalEntityattack,XXE,2017版A4级漏洞。
- XML是一种类似HTML的标记性语言。
- 可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
Eg:A4:2017XML外部实体(XXE)
2.7、A5:2017失效的访问控制(业务逻辑漏洞)
- 失效的访问控制就是越权访问漏洞。
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
垂直越权:
低权限用户可以访问更高权限用户才能访问的资源。
如:
未登陆账号可以绕过登陆查看到登陆后的页面。
来宾账号可以假冒管理员的身份。
……
水平越权:
同级权限用户之前的权限控制失效。
2.7.1、A5:失效的访问控制-水平越权
- Eg:山东大学某系统水平越权
2.7.2、A5:失效的访问控制-垂直越权
2.8、A6:2017安全配置错误
- 安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP标头配置以及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。
您的应用程序可能受到攻击,如果应用程序是:
- 缺少适当的安全加固,或者云服务的权限配置错误。
- 应用程序启用或安装了不必要的功能(例如:不必要的端口、服务、网页、帐户或权限)
- 默认帐户的密码仍然可用且没有更改。
- 错误处理机制向用户披露堆栈跟踪或其他大量错误信息。
- 对于更新的系统,禁用或不安全地配置最新的安全功能。
- 应用程序服务器、应用程序框架(如:Struts、Spring、ASP.NET)、库文件、数据库等没有进行安全配置。
- 服务器不发送安全标头或指令,或者未对服务器进行安全配置。
- 您的应用软件已过期或易受攻击。
缺少一个体系的、可重复的应用程序安全配置过程,系统将处于高风险中。
如何防止?
- 一个可以快速且易于部署在另一个锁定环境的可重复的加固过程。开发、质量保证和生产环境都应该进行相同配置,并且,在每个环境中使用不同的密码。这个过程应该是自动化的,以尽量减少安装一个新安全环境的耗费。
- 搭建最小化平台,该平台不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架。
- 检查和修复安全配置项来适应最新的安全说明、更新和补丁,并将其作为更新管理过程的一部分,在检查过程中,应特别注意云存储权限(如:S3桶权限)。
- 一个能在组件和用户间提供有效的分离和安全性的分段应用程序架构,包括:分段、容器化和云安全组。
- 向客户端发送安全指令,如:安全标头。
- 在所有环境中能够进行正确安全配置和设置的自动化过程。
Eg:国药集团某站目录遍历
Eg:西部证券安全配置错误存在弱口令可登录后台
2.9、A7:2017跨站脚本(XSS)
当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建HTML或JavaScript的浏览器API更新现有的网页时,就会出现XSS缺陷。XSS让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。
- 存在三种XSS类型,通常针对用户的浏览器:
反射式XSS
:应用程序或API包括未经验证和未经转义的用户输入,作为HTML输出的一部分。一个成功的攻击可以让攻击者在受害者的浏览器中执行任意的HTML和JavaScript。通常,用户将需要与指向攻击者控制页面的某些恶意链接进行交互,例如恶意漏洞网站,广告或类似内容。存储式XSS
:你的应用或者API将未净化的用户输入存储下来了,并在后期在其他用户或者管理员的页面展示出来。存储型XSS一般被认为是高危或严重的风险。基于DOM的XSS
:会动态的将攻击者可控的内容加入页面的JavaScript框架、单页面程序或API存在这种类型的漏洞。理想的来说,你应该避免将攻击者可控的数据发送给不安全的JavaScriptAPI。
典型的XSS攻击可导致盗取session、账户、绕过MFA、DIV替换、对用户浏览器的攻击(例如:恶意软件下载、键盘记录)以及其他用户侧的攻击。
- Eg:中国电信某处存在跨站脚本攻击
2.10、A8:2013跨站请求伪造(CSRF)
- 一个跨站请求伪造攻击迫使登录用户的浏览器将伪造的HTTP请求,包括该用户的会话cookie和其他认证信息,发送到一个存在漏洞的web应用程序。这就允许了攻击者迫使用户浏览器向存在漏洞的应用程序发送请求,而这些请求会被应用程序认为是用户的合法请求。
- 安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。
- 对反序列化的利用是有点困难的。因为在不更改或调整底层可被利用代码的情况下,现成的反序列化漏洞很难被使用。
这可能导致两种主要类型的攻击:
- 如果应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击。
- 典型的数据篡改攻击,如访问控制相关的攻击,其中使用了现有的数据结构,但内容发生了变化。
Eg:PHP反序列化
2.11、A10:2017使用含有已知漏洞的组件
-
组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。
-
对一些漏洞很容易找到其利用程序,但对其它的漏洞则需要定制开发。
-
这种安全漏洞普遍存在。基于组件开发的模式使得多数开发团队根本不了解其应用或API中使用的组件,更谈不上及时更新这些组件了。
-
经常爆出漏洞的组件:
- Weblogic
- Strust-2
-
Eg:某SCADA系统使用已知漏洞的Struts组件可执行任意命令。
-
站点地址:http://220.168.95:5902,站点使用了带有已知漏洞的Struts组件,可通过Struts漏洞执行任意命令。
-
通过Struts漏洞执行任意命令。
-