owasptop10 学习笔记

本文是owasptop10 的学习笔记。文中将感悟点记录下来。记录顺序是根据文档的阅读顺序。

首先感兴趣的点是文中提出来的风险评级,因为实际工作中也会遇到此类问题,并不知如何定级。我觉得可以按照文中给定的方式来进行风险评级及描述

例如:本业务系统为xxxxxxxxxxx(应用描述),通过(攻击向量:易、平均、难;漏洞普遍性:广泛、常见、少见;漏洞可检测性:易、平均、难;技术影响:严重、中等、小)综合评估本次风险等级为高、中、低危:可对业务造成xxxxxxxxx(业务描述)

但文中给出的  OWASP风险等级排序方法链接  (https://www.owasp.org/index.php/OWASP_Risk_Rating_Methodology)更为复杂,适合一些精细的评估作为参考。(  google全文翻译查看后发现有更精细的一套风险评估指标与方法。本文重点不在这里故此不再深究。)

接下来就到了top10了,top1就是大名鼎鼎的注入。但是没想到注入原来分这么多,自己平常只知道sqli。先看一下文档对注入的定义:

 将不受信任的数据作为命令或查询的一部分发送给解析器时,会差生注入。sql注入,nosql注入,os注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有授权的情况下执行非预期命令或访问数据。

谈谈搜到的不熟悉注入吧:os注入,搜了之后才发现也是非常熟悉的但平时将他归到了命令执行。没想到这里划在了注入。

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

类型网上分为了两类:

1.应用程序执行一个自己控制的固定程序,通过用户输入的参数来执行命令。这时,可以通过参数的分隔符,在参数中注入命令,来执行攻击者想要运行的命令。

2.应用程序将输入的整个字符串作为一个命令,应用程序只是做个中转,将命令传给操作系统执行,例如,通过exec来执行命令,这时可以通过命令分隔符注入命令。

第一个感觉就像linux 命令里的| 或者& 这类的连接符注入。突然想到缓存区溢出算不算注入。还是有区别的,定义中的注入是指对解析器而言达到非预期命令或访问数据。而缓存区溢出这类直接是操作二进制程序。所以不能算注入。

第二个很便于理解,例如php提供的三个外部执行命令的函数,system()、shell_exec()、passthru()tips:还有一种直接使用反引号  ·ipconfig·  也可以达到命令执行。exec也可以但需要在命令驻增加参数,输出会传递给这个新增参数。例如<?php $cmd=$_GET['cmd']; exec($cmd,$ls); var_dump($ls);?>

ldap注入:LDAP(Lightweight Directory Access Protocol):轻量级目录访问协议,是一种在线目录访问协议。LDAP主要用于目录中资源的搜索和查询。利用LDAP注入技术的关键在于控制用于目录搜索服务的过滤器。常见的LDAP有微软的ADAM(Active Directory Application Mode)和OpenLDAP。出于对问题的研究态度想研究一下这个方面,但考虑到自己目前水平,以及此类攻击很少用到。暂时先记录下来。有机会再搞。

除了上述两种注入,我再google的时候还给我提到了另一个owasp没有提到的注入类型:xpath注入。其实也是对解析器进行注入和sql注入除了语法之外感觉区别不大。网上有找了一个php的解析器并简单测试了一下。

top2:失效的身份认证

 一般应用程序身份验证的脆弱性可能存在以下几个方面:

1.允许凭证填充,这使得攻击者获得有效用户名和密码的列表。(凭证填充:凭据填充是自动注入违反的用户名/密码对,以便以欺诈手段获取对用户帐户的访问权限。这是暴力攻击类别的一个子集:大量的溢出凭据会自动输入到网站中,直到它们可能与现有帐户匹配,然后攻击者可以为自己的目的劫持。

2.允许暴力破解或其他自动攻击。

3.允许默认的、弱的或众所周知的密码,例如“Password1”或“admin/admin”。

4.使用弱的或失效的验证凭证,忘记密码程序,例如“基于知识的答案”,这是不安全的。

5.使用明文、加密或弱散列密码

6.缺少或失效的多因素身份验证。

7.暴露URL中的会话ID(例如URL重写)。

8.在成功登录后不会更新会话ID。?

9.不正确地使会话ID失效。当用户不活跃的时候,用户会话或认证令牌(特别是单点登录(SSO)令牌)没有正确注销或失效。

如何防止其实也就是针对上面提到的弱点进行加强。我就不再赘述。记录以下文中提到的特别的几点:

1.确认注册、凭据恢复和API路径,通过对所有输出结果使用相同的消息,用以抵御账户枚举攻击。

2.限制或逐渐延迟失败的登录尝试。记录所有失败信息并在凭据填充、暴力破解或其他攻击被检测时提醒管理员。

3.使用服务器端安全的内置会话管理器,在登录后生成高度复杂的新随机会话ID。会话ID不能在URL中,可以安全地存储和当登出、闲置、绝对超时后使其失效。

top3:敏感信息泄露

此类漏洞在平常的工作中接触最多。陈列以下文档中提出来可能存在漏洞的几个点:

1.在数据传输过程中是否使用明文传输?这和传输协议相关,如:HTTP、SMTP和FTP。外部网络流量非常危险。验证所有的内部通信,如:负载平衡器、Web服务器或后端系统之间的通信。

2.当数据被长期存储时,无论存储在哪里,它们是否都被加密,包含备份数据?

3.无论默认条件还是源代码中,是否还在使用任何旧的或脆弱的加密算法?

4.是否使用默认加密密钥,生成或重复使用脆弱的加密密钥,或者缺少恰当的密钥管理或密钥回转?

5.是否强制加密敏感数据,例如:用户代理(如:浏览器)指令和传输协议是否被加密?

6.用户代理(如:应用程序、邮件客户端)是否未验证服务器端证书的有效性?

top4:XML 外部实体(XXE)

如果攻击者可以上传XML文档或者在 XML文档中添加恶意内容,通过易受 攻击的代码、依赖项或集成,他们就 能够攻击含有缺陷的XML处理器。

XXE缺陷可用于提取数据、执行远程 服务器请求、扫描内部系统、执行拒 绝服务攻击和其他攻击。 业务影响取决于所有受影响的应用程 序和数据保护需求。

top5:失效的访问控制

对访问控制的利用是渗透测试人员的 一项核心技能。SAST 工具和 DAST 工具可以检测到访问控制的缺失,但 不能验证其功能是否正常。访问控制 可通过手动方式检测,或在某些特定 框架下通过自动化检测访问控制缺失。

由于缺乏自动化的检测和应用程序开发人员缺乏有效 的功能测试,因而访问控制缺陷很常见。 访问控制检测通常不适用于自动化的静态或动态测试。 手动测试是检测访问控制缺失或失效的最佳方法,包 括:HTTP方法(如:GET和PUT)、控制器、直接对 象引用等。

技术影响是攻击者可以冒充用户、管 理员或拥有特权的用户,或者创建、 访问、更新或删除任何记录。 业务影响取决于应用程序和数据的保 护需求。

top6:安全配置错误

通常,攻击者能够通过未修复的漏洞、 访问默认账户、不再使用的页面、未 受保护的文件和目录等来取得对系统 的未授权的访问或了解。安全配置错误可以发生在一个应用程序堆栈的任何层 面,包括网络服务、平台、Web服务器、应用服务器、 数据库、框架、自定义代码和预安装的虚拟机、容器 和存储。自动扫描器可用于检测错误的安全配置、默 认帐户的使用或配置、不必要的服务、遗留选项等。这些漏洞使攻击者能经常访问一些未 授权的系统数据或功能。有时,这些 漏洞导致系统的完全攻破。

top7:跨站脚本(XSS)

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容

存在三种XSS类型,通常针对用户的浏览器: 反射式XSS:应用程序或API包括未经验证和未经转义的用户输入, 作为HTML输出的一部分。一个成功的攻击可以让攻击者在受害者 的浏览器中执行任意的HTML和JavaScript。 通常,用户将需要与指 向攻击者控制页面的某些恶意链接进行交互,例如恶意漏洞网站, 广告或类似内容。 存储式XSS:你的应用或者API将未净化的用户输入存储下来了, 并在后期在其他用户或者管理员的页面展示出来。 存储型XSS一 般被认为是高危或严重的风险。 基于DOM的XSS:会动态的将攻击者可控的内容加入页面的 JavaScript框架、单页面程序或API存在这种类型的漏洞。理想的 来说,你应该避免将攻击者可控的数据发送给不安全的JavaScript API。 典型的XSS攻击可导致盗取session、账户、绕过MFA、DIV替换、 对用户浏览器的攻击(例如:恶意软件下载、键盘记录)以及其 他用户侧的攻击。

 xss学习可以参考网上著名的xss过滤表(https://www.freebuf.com/articles/web/153055.html

top8:不安全的反序列化

这里举一个php反序列化执行xss的栗子:

<?php
class test
{
public $name='name';
function __wakeup()
{
echo $this->name;
}
}

$test = new test();
echo serialize($test);
unserialize($_GET['c']);
?>

浏览器执行:http://127.0.0.1/1.php?c=O:4:"test":1:{s:4:"name";s:25:"<script>alert(0)</script>";}

实现弹窗:

top9:使用含有已知漏洞的组件

常见的利用就是web中间件,例如:

(一) IIS

1、PUT漏洞

2、短文件名猜解

3、远程代码执行

4、解析漏洞

(二) Apache

1、解析漏洞

2、目录遍历

(三) Nginx

1、文件解析

2、目录遍历

3、CRLF注入

4、目录穿越

(四)Tomcat

1、远程代码执行

2、war后门文件部署

(五)jBoss

1、反序列化漏洞

2、war后门文件部署

(六)WebLogic

1、反序列化漏洞

2、SSRF

3、任意文件上传

4、war后门文件部署

(七)其它中间件相关漏洞

1、FastCGI未授权访问、任意命令执行

2、PHPCGI远程代码执行

top10:不足的日志记录和监控

对不足的日志记录及监控的利用几乎 是每一个重大安全事件的温床。 攻击者依靠监控的不足和响应的不及 时来达成他们的目标而不被知晓。

判断你是否有足够监控的一个策略是在渗透测试后检 查日志。 测试者的活动应被充分的记录下来,能够反 映出他们造成了什么样的影响。

猜你喜欢

转载自www.cnblogs.com/tai2/p/10419960.html