为了对Web安全有个整体的认识,整理一下常见的Web安全漏洞类型,主要参考于OWASP组织历年来所研究发布的项目文档。

01:注入漏洞

1)SQL注入(SQL Injection)

由于程序对SQL相关的一些敏感字符缺少过滤or转换,攻击者把SQL命令插入到用户提交的数据中,欺骗服务器执行恶意的SQL命令,非法获取到内部权限和数据。

风险:读取or篡改数据库的数据,获取服务器or管理员权限

类型:a、数据型 b、字符型

其他注入方式

  • 伪静态注入

  • GET & POST注入

  • Cookie注入

2)SQL盲注(SQL Blind Injection)

a.基于布尔的盲注[Boolean-Based]

SQL注入过程中,应用程序仅仅返回True页面和False页面,无法根据应用程序的返回页面得到数据库信息,但可通过构造逻辑条件(如比较大小)向服务端请求后的返回页面来分析判断我们所需要的数据库信息。

b.基于时间的盲注[Time-Based]

注入的SQL代码影响后台数据库的功能,但此时Web的前端页面始终显示True页面,知识页面返回的响应时间有差异,可以根据时间差来推断注入语句中的判断条件真假,继而获取数据库相关的信息。

3)OS命令注入

OS Command Injection,当应用程序使用外部输入的字符串,or使用受外部影响的字符串来组装命令时,若没有进行安全过滤防范,可能产生OS命令的注入攻击,甚至操作服务器相关的权限。

4)Xpath注入

利用XPath解析器的松散输入和容错特性,能够在URL、表单或其它信息上附带恶意的XPath查询代码,以获得权限信息的访问权并更改这些信息。

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

用户身份认证和会话管理是一个应用程序中最关键的过程,有缺陷的设计会严重破坏这个过程。在开发Web应用程序时,开发人员往往只关注Web应用程序所需的功能,通常会建立自定义的认证和会话管理方案。但要正确实现这些方案却很难,结果这些自定义的方案往往在如下方面存在漏洞:退出、密码管理、超时、记住我、密码问题、帐户更新等。

03:敏感信息泄露

在最近几年,这是最常见的、最具影响力的攻击。这个领域最常见的漏洞是不对敏感信息进行加密。在数据加密过程中,常见的问题是不安全的密钥生成和管理以及使用弱加密算法、弱协议和弱密码。特别是使用弱的哈希算法来保护密码。

攻击者不是直接攻击密码,而是在传输过程中或从客户端(例如:浏览器)窃取密钥、发起中间人攻击,或从服务器端窃取明文数据。

04:XML外部实体(XXE)

默认情况下,许多旧的XML处理器能够对外部实体、XML进程中被引用和评估的URI进行规范。如果攻击者可以上传XML文档或者在XML文档中添加恶意内容,通过易受攻击的代码、依赖项或集成,他们就能够攻击含有缺陷的XML处理器。

XXE缺陷可用于提取数据、执行远程服务器请求、扫描内部系统、执行拒绝服务攻击和其他攻击。

05:失效的访问控制

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

攻击者可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。

06:安全配置错误

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

通常,攻击者能够通过未修复的漏洞、访问默认账户、不再使用的页面、未受保护的文件和目录等来取得对系统的未授权的访问或了解。

07:跨站脚本(XSS)

XSS是OWASP Top10中第二普遍的安全问题,存在于近三分之二的应用中。由于程序缺少对某些敏感字符的过滤or转换,攻击者对在url或输入框中输入HTML/JS恶意代码提交成功后并被执行,获取用户or程序敏感信息。

XSS对于反射和DOM的影响是中等的,而对于存储的XSS,XSS的影响更为严重,譬如在受攻击者的浏览器上执行远程代码,例如:窃取凭证和会话或传递恶意软件等。

08:不安全的反序列化

反序列化漏洞有十年的历史,存在于不同的编程语言中,最为明显的当属Java、PHP、Python、Ruby。漏洞的本质就是反序列化机制打破了数据和对象的边界,导致攻击者注入的恶意序列化数据在反序列化过程中被还原成对象,控制了对象就可能在目标系统上面执行攻击代码。

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

这种安全漏洞普遍存在。基于组件开发的模式使得多数开发团队不了解其应用或API中使用的组件,更谈不上及时更新这些组件了。如Retire.js之类的扫描器可以帮助发现此类漏洞,但这类漏洞是否可以被利用还需花费额外的时间去研究。

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

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

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

多数成功的攻击往往从漏洞探测开始。允许这种探测会将攻击成功的可能性提高到近100%;据统计,在2016年确定一起数据泄露事件平均需要花191天时间,这么长时间里损害早已发生。

11:跨站请求伪造(CSRF)

CSRF是利用某些web应用程序允许攻击者预测一个特定操作的所有细节。由于浏览器自动发送会话cookie等认证凭证,攻击者能创建恶意web页面产生伪造请求。这些伪造请求很难与合法请求区分开。

攻击者能欺骗受害用户完成该受害者所允许的任意状态改变的操作,比如:更新帐号细节,完成购物,注销甚至登录等操作。

12:未验证的重定向和转发

应用程序经常将用户重定向到其他网页,或以类似的方式进行内部转发。有时,目标网页是通过一个未经验证的参数来指定的,这就允许攻击者选择目标页面。

攻击者链接到未验证的重定向并诱使受害者去点击。由于是链接到有效的网站,受害者很有可能去点击。攻击者利用不安全的转发绕过安全检测。

这种重定向可能试图安装恶意软件或者诱使受害者泄露密码或其他敏感信息。不安全的转发可能允许绕过访问控制。

13:弱口令漏洞

弱口令(weak password) ,没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令,如:生日、名字、简单的顺序数字or字符。

14:文件上传漏洞

文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。大多数的上传漏洞被利用后攻击者都会留下WebShell以方便后续进入系统。攻击者在受影响系统放置或者插入WebShell后,可通过该WebShell更轻松,更隐蔽的在服务中为所欲为。

WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。

15:缓冲区溢出

在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了。向缓冲区内填充数据,如果数据的长度很长,超过了缓冲区本身的容量,那么数据就会溢出存储空间,而这些溢出的数据还会覆盖在合法的数据上。

操作系统所使用的缓冲区又被称为堆栈,在各个操作进程之间,指令被临时存储在堆栈当中,堆栈也会出现缓冲区溢出。当一个超长的数据进入到缓冲区时,超出部分就会被写入其他缓冲区,其他缓冲区存放的可能是数据、下一条指令的指针,或者是其他程序的输出内容,这些内容都被覆盖或者破坏掉。

16:业务逻辑漏洞

业务逻辑问题是一种设计缺陷,逻辑缺陷表现为设计者或开发者在思考过程中做出的特殊假设存在明显或隐含的错误。攻击者会特别注意目标应用程序采用的逻辑方式,设法了解设计者与开发者做出的可能假设,然后考虑如何攻破这些假设。攻击者挖掘逻辑漏洞有两个重点:业务流程、http/https请求篡改。
业务逻辑漏洞经常出现的场景为:账户(注册/登录/密码找回)、交易、支付、个人信息修改