第十一章 Web攻击技术
11.1 针对Web的攻击技术
11.2 因输出值转义不完全引发的安全漏洞
11.3 因设置或设计上的缺陷引发的安全漏洞
11.4 因会话管理疏忽引发的安全漏洞
11.5 其他安全漏洞
11.1针对Web的攻击技术
应用 HTTP 协议的服务器和客户端,以及运行在服务器上的 Web 应用等资源才是攻击目标。
几乎现今所有的 Web 网站都会使用会话(session)管理、加密处理等安全性方面的功能,而HTTP协议内并不具备这些功能。因此,开发者需要自行设计并开发认证及会话管理功能来满足 Web应用的安全。而自行设计就意味着会出现各种形形色色的实现。结果,安全等级并不完备,可仍在运作的 Web 应用背后却隐藏着各种容易被攻击者滥用的安全漏洞的 Bug。
11.1 针对Web应用的攻击模式
对Web应用的攻击模式有主动攻击和被动攻击两种。
- 以服务器为目标的的主动攻击
主动攻击(active attack)是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。攻击内容直接针对服务器上的资源进行攻击,比如SQL注入攻击和OS命令注入攻击。 - 以服务器为目标的被动攻击
被动攻击(passive attack)是指利用全套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标的Web应用访问发起攻击。比如跨站脚本攻击和跨站点请求伪造。
步骤1:攻击者诱使用户出发已设置好的陷阱,陷阱启动发送已嵌入攻击代码的HTTP请求。
步骤 2: 当用户中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
步骤 3: 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发送给作为攻击目标的 Web 应用,运行攻击代码。
步骤 4: 执行完攻击代码,存在安全漏洞的 Web 应用会成为攻击者的跳板,可能导致用户所持的 Cookie 等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。
11.1.2 Web应用的安全对策实施
Web 应用的安全对策可大致分为以下两部分。
- 客户端的验证
- Web 应用端(服务器端)的验证(输入值验证/输出值转义)
客户端的验证多数情况下采用JavaScript。到那时在客户端允许篡改数据或关闭 JavaScript,不适合将 JavaScript 验证作为安全的防范对策。保留客户端验证只是为了尽早地辨识输入错误,起到提高 UI体验的作用。
Web 应用端的输入值验证按 Web 应用内的处理则有可能被误认为是具有攻击性意义的代码。输入值验证通常是指检查是否是符合系统业务逻辑的数值或检查字符编码等预防对策。
从数据库或文件系统、HTML、邮件等输出 Web 应用处理的数据之际,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。
11.2 因输出值转义不完全引发的安全漏洞
11.2.1 跨站脚本攻击
跨站脚本攻击(Cross-Site Scripting,XSS)是通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。
跨站脚本攻击有可能造成以下影响。
- 利用虚假输入表单骗取用户个人信息。
- 利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下, 帮助攻击者发送恶意请求。
- 显示伪造的文章或图片。
11.2.2 SQL注入攻击
SQL注入(SQLInjection)是指针对 Web 应用使用的数据库,通过运行非法的 SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。
Web 应用通常都会用到数据库,当需要对数据库表内的数据进行检索或添加、删除等操作时,会使用 SQL语句连接数据库进行特定的操作。如果在调用 SQL语句的方式上存在疏漏,就有可能执行被恶意注入(Injection)非法 SQL语句。
SQL注入攻击造成的影响
- 非法查看或木盖数据库内的数据
- 规避认证
- 执行和数据库服务器业务关联的程序
11.2.3 OS命令注入攻击
OS 命令注入攻击(OS Command Injection)是指通过 Web 应用,执行非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地方就有存在被攻击的风险。
可以从 Web 应用中通过 Shell 来调用操作系统命令。倘若调用 Shell
时存在疏漏,就可以执行插入的非法 OS 命令。OS 命令注入攻击可以向 Shell 发送命令,让 Windows 或 Linux 操作系统的命令行启动程序。
11.2.4 HTTP首部注入攻击
HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
HTTP 首部注入攻击有可能会造成以下一些影响。
- 设置任何 Cookie 信息
- 重定向至任意 URL
- 显示任意的主体(HTTP 响应截断攻击)
11.2.5 邮件首部注入公共及
邮件首部注入(Mail Header Injection)是指 Web 应用中的邮件发送功能,攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击。利用存在安全漏洞的 Web 网站,可对任意邮件地址发送广告邮件或病毒邮件。
11.2.6 目录遍历攻击
目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击有时也称为路径遍历(Path Traversal)攻击。
通过 Web 应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用 …/ 等相对路径定位到 /etc/passed 等绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。这样一来,就有可能非法浏览、篡改或删除 Web 服务器上的文件。
11.3 因设置或设计上的缺陷引发的安全漏洞
因设置或设计上的缺陷引发的安全漏洞是指,错误设置 Web 服务
器,或是由设计上的一些问题引起的安全漏洞。
11.3.1 强制浏览
强制浏览(Forced Browsing)安全漏洞是指,从安置在 Web 服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
强制浏览可能会造成以下一些影响
- 泄露顾客的个人信息等重要情报
- 泄露原本需要具有访问权限的用户才可查阅的信息内容
- 泄露未外连到外界的文件
11.3.2 不正确的错误消息处理
不正确的错误消息处理(Error Handing Vulnerability)的安全漏洞是指Web应用的错误信息内包含对攻击者有用的信息。与Web应用有关的主要错误信息如下所示:
- Web应用抛出的错误信息
- 数据库等系统抛出的错误信息
开放重定向
开放重定向(Open Redirect)是一种对指定的任意 URL作重定向跳转的功能。而于此功能相关联的安全漏洞是指,假如指定的重定向 URL到某个具有恶意的 Web 网站,那么用户就会被诱导至那个 Web 网站。
11.4 因会话管理疏忽引发的安全漏洞
会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,会导致用户的状态认证被窃取等后果。
11.4.1 会话劫持
会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话 ID,并非法使用此会话 ID 伪装成用户,达到攻击的目的。
攻击者可能获得会话ID的几个途径
- 通过非正规的生成方式推测会话ID
- 通过窃听或者XSS攻击盗取会话ID
- 通过会话固定攻击(Session Fixation)强行获取会话ID
11.4.2 会话固定攻击
对以窃取目标会话 ID 为主动攻击手段的会话劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话 ID,属于被动攻击。
11.4.3 跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
跨站点请求伪造可能造成以下影响:
- 利用已通过认证的用户权限更新设定信息等
- 利用已通过认证的用户权限购买商品
- 利用已通过认证的用户权限在留言板上发表言论
11.5 其他安全漏洞
11.5.1 密码破解
密码破解攻击(Password Cracking)即算出密码,突破认证。攻击不仅限于 Web 应用,还包括其他的系统(如 FTP 或 SSH 等),本节将会讲解对具备认证功能的 Web 应用进行的密码破解。
密码破解的手段有两个主要方式
-
通过网络的密码试错
穷举法:暴力破解
字典攻击:字典攻击是指利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手法。 -
对已加密密码的破解(指攻击者入侵系统已获得加密或散列处理的密码数据的情况)
穷举法-字典攻击:暴力破解
彩虹表:彩虹表(Rainbow Table)是由明文密码及与之对应的散列值构成的一张数据库表,是一种通过事先制作庞大的彩虹表,可在穷举法 • 字典攻击等实际破解过程中缩短消耗时间的技巧。从彩虹表内搜索散列值就可以推导出对应的明文密码。
11.5.2 点击劫持
点击劫持(Clickjacking)是指利用透明的按钮或链接做成陷阱,覆盖在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪装(UI Redressing)。
11.5.3 DoS攻击
DoS 攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对象不仅限于 Web 网站,还包括网络设备及服务器等。
主要的两种DoS攻击方式
- 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈现停止状态。
- 通过攻击安全漏洞使服务停止
11.5.4 后门程序
后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。可通过监视进程和通信的状态发现被植入的后门程序。但设定在 Web应用中的后门程序,由于和正常使用时区别不大,通常很难发现。
后门程序通常分3类
- 开发阶段作为Debug调用的后门程序
- 开发者为自身利益植入的后门程序
- 攻击者设置的后门程序