首先要说一下,本文很多摘抄自此博客,这位同学珠玉在前不敢擅用,大家有兴趣可以直接看此博客。

(19条消息) OWASP top 10漏洞原理及防御(2017版官方)_wwl012345的博客-CSDN博客_top10漏洞原理

但是在此文的基础上,我又新增了其他内容,以作自己的知识体系。

所谓的OWASP 十大漏洞,每年并不完全一样,所以在我的图表中其实是有12种类漏洞的。

目录

一:注入

1.1 sql 注入

1.2.XML外部实体(XXE) 注入

3.OS注入

二:失效身份认证和会话管理

2.1 身份认证和会话管理的定义

2.2 什么是失效的身份认证和会话管理

2.3 防御失效身份和会话管理的方法

三:跨站脚本:XSS

四:失效的访问控制

五:安全配置错误

5.1 安全配置错误介绍

5.2 安全配置错误攻击原理

5.3 防御安全配置错误的方法

六:敏感信息泄露

6.1 攻击方式

6.2 防御敏感信息泄露的方法

七:跨站请求伪造:CSRF

八:使用含有漏洞的控件

8.1 现状

8.2 防御方法

九:攻击检测和防范不足

十:未受保护的 APIs

十一:不安全的反序列化

11.1 什么是序列化

11.2 什么是反序列化

11.3 反序列化有什么安全问题

11.4 反序列化攻击原理

11.5 防御反序列化的方法

十二:不足的日志记录和监控

12.1 日志记录介绍

12.2 原理

12.3 防御方法



标题

一:注入

注入攻击是指攻击者在输入数据时向解释器提交一些非法或者未授权的命令来欺骗解释权,使解释器错误的执行了这些代码,向攻击者返回一些本不应该被看见的数据。

1.1 sql 注入

SQL注入就是指Web应用程序对用户输入的数据的合法性没有进行判断,前端传入后端的参数使攻击者可控的,并且参数中带有数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。

SQL注入漏洞产生需要以下两个条件:
①:参数是用户可控的:前端传给后端的参数内容是用户可以控制的
②:参数带入数据库查询:传入的参数可以带入数据库中查询
如果满足以上两个条件,那么攻击者就可以在前端页面中通过SQL语句拼接,将自己想要查询的SQL语句拼接到合法参数后面,这样就就可以通过构造非法的SQL语句来对数据库进行增删改查等操作。

防范SQL注入的方法:

①:过滤危险字符:现在很多CMS都采用过滤危险字符的方法,比如使用正则表达式匹配union、sleep、select等关键字,如果匹配到,那么就退出程序。(也可以使用PHP中mysql_real_escape_string()函数过滤一些特殊字符)
②:采用PDO预编译技术:
在使用PDO技术访问数据库时,真正的real prepared statements默认是不使用的,因此使用"setAttribute(PDO::ATTR_EMULATE_PREPARES, false);"这一句来禁掉模拟预处理语句,使用真正的预编译。

1.2.XML外部实体(XXE) 注入

XXE(XML External Entity)指的是XML外部实体注入,XML用于标识电子文件使其具有结构性的标识语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声名、DTD文档类型定义、文档元素。
        XXE攻击原理:如果攻击者可以上传XML文档或者在XML文档中添加恶意内容,通过易受攻击的代码、依赖项或集成,他们就能够攻击含有缺陷的XML处理器。XXE缺陷可用于提取数据、执行远程服务器请求、扫描内部系统、执行拒绝服务攻击和其他攻击。
        防御XXE的方法
(1):尽可能使用简单的数据格式(如:JSON),避免对敏感数据进行序列化
(2):禁止使用外部实体,例如libxml_disable_entity_loader(true)
(3):过滤用户提交的XML数据,防止出现非法内容

3.OS注入

OS指令执行是为了通过网络接口在web服务器执行OS命令的一种技术。如果应用程序使用外部输入的字符串或受外部影响的字符串组装命令,并且没有经过正确的过滤,就可能导致OS命令的注入攻击。

OS注入原理:就是程序开发者对输入的数据没有进行任何过滤,攻击者在前端可以在正确输入的命令后面拼接自己想要执行的命令。如果没有对&、&&、|、||等拼接字符进行过滤,那么就会造成命令注入,这样攻击者就可以使用拼接的命令来查看各种信息,甚至执行反弹shell拿到shell。

OS注入的防御方法
①:过滤&、&&、|、||等字符,最好使用白名单过滤方法
②:不止在前端进行验证,还可以在服务器端再进行一次验证
③:要用最小权限去运行程序,不要给予程序多余的权限
④:在命令执行错误时不要显示过多的细节,这样攻击者就不能通过错误提示得到更多的信息

二:失效身份认证和会话管理

2.1 身份认证和会话管理的定义

身份认证:身份认证最常用于系统登录,形式一般为用户名加密码的登录方式,在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等。
会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中,之后的身份识别只需读取授权令牌,如果授权令牌认证成功,那么就无需再次进行登录认证。

2.2 什么是失效的身份认证和会话管理

用户身份认证和会话管理是一个应用程序中最关键的过程,有缺陷的设计会严重破坏这个过程。在开发Web应用程序时,开发人员往往只关注Web应用程序所需的功能。由于这个原因,开发人员通常会建立自定义的认证和会话管理方案。

但要正确实现这些方案却很难,结果这些自定义的方案往往在如下方面存在漏洞:退出、密码管理、超时、记住我、秘密问题、帐户更新等等。

因此攻击者就可以通过破坏密码、密钥、会话令牌或攻击其他的漏洞去冒充其他用户的身份,这种身份的冒充可能是暂时的,也可能是永久的。

存在失效身份认证和会话管理的漏洞例子
(1):用户更改密码之前不验证用户,而是依靠会话的IP地址
(2):没有会话超时限制
(3):用户忘记密码后,密码找回功能太过简单。

2.3 防御失效身份和会话管理的方法

(1):区分公共区域和受限区域:站点的公共区域允许匿名用户访问,但是站点的受限区域只允许指定用户访问
(2):支持密码的有效期:向用户提供可以在一段时间后修改密码的功能
(3):能够禁用账户:在收到攻击后可以禁用账户来避免遭受进一步的损失
(4):要求用户使用强密码
(5):不要在网络上以纯文本方式传输用户名和密码:使用SSL对数据流进行加密,也可以对cookie进行加密

三:跨站脚本:XSS

Cross Site Script(跨站脚本)
    危害:盗取用户信息、钓鱼、制造蠕虫等。
    XSS属于客户端代码注入,通常注入代码是JavaScript。
    XSS根据效果的不同,可以分为存储型XSS、反射型XSS,DOM型XSS。

四:失效的访问控制

原理:大多数Web页面需要验证功能级别的访问权限。但是,服务器需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求以在未经适当授权时访问某些页面。

五:安全配置错误

5.1 安全配置错误介绍

由于系统管理员的疏忽,可能会产生一些安全配置错误。安全配置错误可以发生在一个应用程序堆栈的任何层面,包括网络服务、平台、Web服务器、应用服务器、数据库、框架、自定义代码和预安装的虚拟机、容器和存储。可以使用自动扫描器来检测错误的安全配置、默认帐户的使用或配置、不必要的服务、遗留选项等。

5.2 安全配置错误攻击原理

攻击者能够通过未修复的漏洞、访问默认账户、不再使用的页面、未受保护的文件和目录、开放的不必要的端口等来取得对系统的未授权的访问,比如如果由于管理员的疏忽,/etc/passwd文件具有777的访问权限,这样攻击者就可以在拿到普通用户的身份后通过修改该文件拿到root权限

5.3 防御安全配置错误的方法

使用的服务不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架,及时检测系统服务版本,为已发现的漏洞打补丁,在对文件等分配权限时,根据其工作需要采取最小权限原则的方法

六:敏感信息泄露

6.1 攻击方式

攻击者不是直接攻击密码,而是在传输过程中或从客户端窃取密钥、发起中间人攻击,或从服务器端窃取明文数据,还有可能由于管理员的安全性不高,使用弱密码,被攻击者暴力破解,进入到数据库拿到敏感信息。

6.2 防御敏感信息泄露的方法

1) 对系统处理、存储或传输的数据分类,并根据分类进行访问控制

2) 对重要数据进行加密存放,数据在传输过程中使用密文进行传输

3) 及时清理没有用的敏感数据,只能使用指定用户访问敏感数据

七:跨站请求伪造:CSRF

CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

八:使用含有漏洞的控件

8.1 现状

由于现在的服务器都需要使用很多的组件,管理员并不能保证所使用的组件都是没有最新的,因此可能会存在一些版本是存在已知漏洞的(实际上比较新的版本的组件也是会存在漏洞的),攻击者可以使用这些已知的漏洞来进行攻击,甚至获得管理员权限。

8.2 防御方法

1) 移除不使用的依赖、不需要的功能、组件、文件和文档

2) 从官方渠道安全的获取组件,并使用签名机制来降低组件被篡改或加入恶意漏洞的风险

3) 关注最新的漏洞报告,及时为需要的组件进行升级或者打补丁

九:攻击检测和防范不足

多年来考虑增加对自动攻击的防御力不足。基于数据调用,我们看到大多数应用程序和API缺乏检测与防范和响应手动或者自动化攻击的基本功能应用程序和APIs所有者还需要能够快速部署补丁以保护和防止攻击。

十:未受保护的 APIs

现代应用程序和API通常涉及丰富的客户端应用程序,例如浏览器中的JavaScript和移动端应用程序,连接到某种API(SOAP / XML,REST /JSON,RPC,GWT等)。这些API通常是不受保护的,并且包含许多漏洞。

十一:不安全的反序列化

11.1 什么是序列化

有些时候我们需要把应用程序中的数据以另一种形式进行表达,以便于将数据存储起来,并在未来某个时间点再次使用,或者便于通过网络传输给接收方。这一过程我们把它叫做序列化。

11.2 什么是反序列化

反序列化和序列化是两个正好相反的过程。当我们要再次使用这些数据的时候,应用程序读取序列化之后的数据,并将其恢复成应用程序中的数据。

11.3 反序列化有什么安全问题

尽管反序列化最严重可导致远程代码执行(RCE,Remote Code Execution),但最常见的反序列化安全问题却是通过修改序列化之后的数据字段,从而进行提权或越权操作。

11.4 反序列化攻击原理

序列化即是把对象转变为字节流,存放在内存、文件数据库中,而反序列化即是把字节流转变为对象。在java中有一个ObjectOutputStream类的writeobject方法可以实现序列化,而ObjectInputStream类的Readobject方法可以实现反序列化。该漏洞的原因出自于如果应用对恶意构造的用户输入的数据进行反序列化,这样就会产生非预期的对象,从而有可能产生远程代码执行。或者应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击。

11.5 防御反序列化的方法

(1):最安全的方法是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体
        (2):反序列化之前,先进行严格的数据类型校验。由于校验规则容易被攻击者探索出来,进而容易被绕过,因此防御不能仅依赖这一个手段,但可以作为完整性校验防御方案的补充
        (3):隔离运行那些在低特权环境中反序列化的代码
        (4):对反序列化过程进行详尽的日志记录,监控反序列化过程,在发现疑似反序列化攻击时进行警报

十二:不足的日志记录和监控

12.1 日志记录介绍

日志记录是一个系统的最重要的功能之一。日志记录包括登录成功记录、登录失败记录、访问控制记录等,用来记录服务器的各种信息。

12.2 原理

攻击者依靠监控的不足和响应的不及时来达成他们的目标而不被知晓。比如日志没有记录登录失败,那么攻击者可能就可以通过暴力破解多次进行登录尝试,但是日志中却没有记录。这就可能让攻击者成功入侵系统并隐匿自己的行踪。这个看似危害不大但却是十分严重的危害,因为一个日志系统不完善的服务器很容易遭受攻击并且在遭受攻击后无法判断攻击来源,这样就无法做出相应的防御,很可能再次遭受同样的攻击。

12.3 防御方法

(1):确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意帐户,并为后期取证预留足够时间
        (2):建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对
        (3):完善日志系统,使其可以监控各种日志信息
        (4):及时对日志系统进行备份,并保存足够长时间

OWASP 十大漏洞研究相关推荐

  1. owasp十大漏洞_OWASP十大网络应用安全漏洞

    OWASP(The Open Web Application Security Project)是一个提供关于网络应用安全的无偏见.实用信息的非盈利组织.OWASP十大网络应用程序安全风险在2017年 ...

  2. OWASP十大漏洞之一

    A01:2021 – 访问控制中断 概述 从第五位上升到第五位,94%的应用程序接受了某种形式的中断访问控制的测试,平均发生率为3.81%,并且在贡献的数据集中发生次数最多,超过318k.包括值得注意 ...

  3. 2017 OWASP十大安全趋势榜单变化解析

    OWASP十大安全趋势榜单会根据当权安全形式不时对内容进行调整,旨在更好地反映现实情况的具体变化. 而作为内容调整的核心议题,可以看到越来越多从业者意识到应用程序安全性必须立足于软件开发流程. 应用程 ...

  4. 2022年OWASP十大应用安全风险

    2022年OWASP十大应用安全风险 1.2022年OWASP十大应用安全风险 TOP1-注入 TOP2-失效的身份认证和会话管理(破损认证) TOP3-XSS(跨站脚本攻击) TOP4-不安全的对象 ...

  5. 2021-01-24过去十年十大AI研究热点,分别为深度神经网络、特征抽取、图像分类、目标检测、语义分割、表示学习、生成对抗网络、语义网络、协同过滤和机器翻译。

    专利申请量全球第一!清华人工智能发展报告:国内215所高校成立相关本科专业 发布时间:01-2415:20万象大会年度获奖创作者,东方财富网官方帐号 1月20日,清华大学人工智能研究院.清华-中国工程 ...

  6. 2022年度“十大基础研究关键词”在深发布

    来源:读特客户端 11月27日,"青年科学家50²论坛"发布2022年度"十大基础研究关键词".这些关键词由"科学探索奖"的获奖人提名.投票 ...

  7. 中国十大调查研究咨询公司排名数据情况

    中国咨询业是软实力的反映,也是实现"中国梦"的重要要素.研究咨询是以知识为基础的专业化服务行业,在促进经济增长和企业健康发展方面发挥着越来越重要的作用.目前,全世界咨询与信息服务业 ...

  8. 中国十大调查研究咨询公司排名数据信息情况

    中国咨询业是软实力的反映,也是实现"中国梦"的重要要素.研究咨询是以知识为基础的专业化服务行业,在促进经济增长和企业健康发展方面发挥着越来越重要的作用.目前,全世界咨询与信息服务业 ...

  9. 实力对比:十大调查研究咨询公司综合指标排名

    中国咨询业是软实力的反映,也是实现"中国梦"的重要要素.研究咨询是以知识为基础的专业化服务行业,在促进经济增长和企业健康发展方面发挥着越来越重要的作用.目前,全世界咨询与信息服务业 ...

最新文章

  1. 经典技术文章翻译(1):COM+集成:.NET Enterprise Services 如何帮你建立分布式应用(2)
  2. 点击按钮测试用例标题_怎么写测试用例?
  3. java调用xdotool_【转】java Map 遍历速度最优解
  4. sqlite中常见的问题总结
  5. css为什么要用浮动_css浮动的特性,与浮动带来的影响以及如何清除浮动
  6. matplotlib color可选
  7. erlang的dict源码解析(2)
  8. javascript表格可以输入数据_最火8套测量自动计算表格,输入数据直接得结果,效率提升80%...
  9. EXCEL数据分析-案例实践
  10. Java8遍历Map、Map转List、List转Map
  11. 【C语言】实验室设备管理系统
  12. 熊猫之死,是腾讯对360的又一次胜利
  13. 2019全球人工智能技术大会在宁举办
  14. Pycharm代码docker容器运行调试 | 机器学习系列
  15. 解决html2canvas图片模糊问题
  16. 2022-2028全球及中国葡萄种植市场研究报告
  17. Switch游戏机Type-C底座方案
  18. LabWindows中Table控件的下拉列的设置
  19. 为何上千名科技专家呼吁暂停大型AI研究?
  20. 云客Drupal源码分析之权限系统(上)

热门文章

  1. python制作会动的表情包_python画微信表情符的实例代码
  2. 包转发率的计算-实例说明
  3. 商务统计_7 用图表演示数据 - 定量数据
  4. HTML中怎么把string转为int,int怎么转string
  5. c语言统计字符串中各种字符个数,c语言统计字符串中各个字符的个数
  6. JAVA程序设计:追逐游戏(LCP 21)
  7. 国产Cortex-M0单片机HR8P506,用于小家电,玩具模型,快充电源,报警器等
  8. eggjs validate no function 解决方案
  9. springboot+vue+elementui添加视频和图片
  10. 软件测试面试思路技巧和方法分享,学到就是赚到