图解HTTP读书笔记
Posted 张行之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解HTTP读书笔记相关的知识,希望对你有一定的参考价值。
图解HTTP读书笔记(十)
Web的攻击技术
HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击对象。应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用资源才是攻击目标。
在客户端即可篡改请求
在Web应用中,从浏览器那接收到的HTTP请求的全部内容,都可以在客户端自由的变更、篡改。
在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。通过URL查询字段或表单、HTTP首部,Cookie等途径把攻击代码传入,若这时Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到权限管理。
针对Web应用的攻击模式
对Web应用的攻击模式有以下两种。
- 主动攻击
- 被动攻击
以服务器为目标的主动攻击
主动攻击:是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。
由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。
主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击。
以服务器为目标的被动攻击
被动攻击:是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。
被动攻击通常的攻击模式:
- 步骤1
攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击的HTTP请求。
步骤2
当用户不知不觉中招后,用户的浏览器或邮件客户端就会触发这个陷阱。
步骤3
中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码。
步骤4
执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能会导致用户所持的Cookie等个人信息被窃取,登录状态中用户权限遭恶意滥用等后果。
被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。
实施Web应用的安全对策
实施Web应用的安全对策大致分为两部分
- 客户端验证
- 服务端验证
- 输入值验证
- 输出值转义
客户端验证是为了尽早的识别输入错误,Web端的输入值验证通常是检查是否是符合业务逻辑,或检查字符编码等预防对策。输出转义是很关键的安全策略,当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。
跨站脚本攻击
跨站脚本攻击(Cross-Site Scripting,XSS)是指利用网站漏洞从用户那里恶意盗取信息。
动态创建的html部分有可能隐藏着安全漏洞。就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。
跨站脚本攻击可能造成的影响
- 利用虚假输入表单骗取用户个人信息。
- 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
- 显示伪造的文章或图片。
SQL注入攻击
SQL注入(SQL Injection):是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。
该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。
SQL注入攻击有可能会造成以下等影响。
- 非法查看或篡改数据库内的数据
- 规避认证
- 执行和数据库服务器关联的程序等
例如:
正确的SQL语句:
select * from table_name where name='jack'and age>20;
SQL注入语句:(将刚才的name=’jack’改为name=’jack–’,语句如下:)
select * from table_name where name='jack'--' age>20;
SQL语句中的–之后全视为注释,即后面的过滤条件会自动的忽略。这样会对数据库的增删改查有很大影响。
OS命令注入攻击
OS命令注入攻击(OS Command Injection)是指通过Web应用,执行非法的操作系统达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。
可以从Web应用中通过Shell来调用操作系统命令。倘若调用Shell时存在疏漏,就可以执行插入的非法OS命令。
OS命令注入攻击可以向Shell发送命令,让Window或Linux操作系统的命令行启动程序。也就是说,通过OS注入攻击可执行OS上安装着的各种程序。
HTTP首部注入攻击
HTTP首部注入攻击(HTTP Header Injection):是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动式攻击模式。
HTTP首部注入攻击可能会造成以下影响:
- 设置任何的Cookie
- 重定向至任意URL
- 显示任意的主体(HTTP响应式截断攻击)
通过%0D%0A(表示HTTP报文中换行符),在HTTP请求头中的一个字段中,如Location:xxx…/?index=1%0D%0ASet-Cookie:123456789。
因为%0D%0A表示换行,这样就会在HTTP请求头中额外的再加上一个头信息。这样攻击者就可以伪装成用户。
HTTP响应式截断攻击
HTTP响应式截断攻击是用在HTTP首部注入的一中攻击。
如果我们在响应头中的头部字段中将两个%0d%0A%0D%0A并排插入字符串后发送。这样就换2行,就可作为HTTP首部与主体部分分隔所需的空行了。这样就可以伪造主体,达到攻击的目的。
利用这个攻击,已触发陷阱的浏览器会显示伪造的Web页面,再让用户输入自己的信息,达到和跨站脚本攻击相同的效果。
邮箱首部注入攻击
邮箱首部注入(Mail Header Injextion):是指Web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击。
利用存在安全漏洞的Web网站,可对任意邮件地址发送广告邮件或病毒邮件。
%0D%0A在邮件报文中代表换行符。与HTTP首部注入和HTTP响应式截断相似。
eg:
在发送邮件的报文首部这样
xxxxx%0D%0ABcc:user@example.com
就会换行,对Bcc邮件地址追加发送
eg:
如果这样
xxxxxx%0D%0A%0D%0ATest Message
就相当于换2行,就有可能篡改邮件文本内容并发送。
再以相同的方法,就有可能改写To和Subject等任意邮件首部,或者向文本添加附件等动作
目录遍历攻击
目录遍历(Directory Traversal):攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。
这种攻击有时也称为路径遍历(Path Traversal)攻击。
远程文件包含漏洞
远程文件包含漏洞(Remote File Inclusion):是指部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可以运行任意脚本攻击。
这主要是php存在的安全漏洞,对PHP的include或require来说,这是一种可通过设定,指定外部服务器的UR作为文件名的功能。但该功能太危险,PHP5.2.0之后默认设定此功能无效。
因设置或设计上的缺陷引发的安全漏洞
强制浏览
强制浏览(Forced Browsing)是指,从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
强制浏览有可能会造成以下一些影响。
- 泄露顾客的个人信息等重要情报
- 泄露原本需要具有访问权限的用户才可查阅的信息内容
- 泄露未外连到外界的文件
强制浏览的几种形式:
文件目录一览
通过指定目录名称,即可在文件一览中看到显示的文件名称。
eg: http://www.example.com/log/
推测文件名及目录名
文件名称容易被推测。
http://www.example.com/entry/entry_081202.log
- 备份文件
http://www.example.com/cgi-bin/entry.cgi(原始文件)
http://www.example.com/cgi-bin/entry.cgi~(备份文件)
http://www.wxample.com/cgi-bin/entry.bak(备份文件)
由编辑软件自动生成的备份文件无执行权限,有可能直接以源代码形式显示。
经认证才可显示的文件
直接通过URL访问原本必须经过认证才能在web页面上使用的文件(HTML文件,图片,PDF等文档,CSS及其他数据)。
不正确的错误消息处理
不正确的错误消息处理(Error Handing Vulnerability)的安全漏洞是指,Web应用的错误信息内包含对攻击者有用的信息。
与Web应用有关的主要错误信息:
- Web应用抛出的错误消息
- 数据库等系统抛出的错误信息
Web应用不必在用户的浏览画面上展示详细的错误信息。对攻击者来说,详细的错误信息可能给他们攻击作为提示。
开放重定向
开放重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能。
而于此功能相关联的安全漏洞是指,假如指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站。
eg:
这是一个URL发生重定向跳转的正常请求
http://example.com/?redirect=http://tricorder.jp
但,如果攻击者知道,redirect后面的连接换成设置好的陷阱Web网站连接。如:
http://example.com/?redirect=http://hackr.jp
这样就会指向hackr.jp。
如果可信度高的Web网站,开放重定向功能,则很可能被攻击者选中并用来作为钓鱼攻击的跳板。
因会话管理疏忽引发的安全漏洞
会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。
会话劫持
会话劫持(Session Hijack):是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
下面列举了几种攻击者可获得会话ID的途径:
- 通过非正规的生成方法推测会话ID
- 通过窃听或XSS攻击盗取会话ID
- 通过会话固定攻击(Session Fixation)强行获取会话ID
会话固定攻击
会话固定攻击(Session Fixation):强制用户使用直指定的会话ID,属于被动攻击。
跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
跨站点请求伪造可能会造成以下影响:
- 利用已通过认证的用户权限更新设定信息等
- 利用已通过认证的用户权限购买商品
- 利用已通过认证的用户权限在留言板上发表言论
其他安全漏洞
密码破解
密码破解攻击(Password Cracking)即算出密码,突破认证。
密码破解的2种手段
- 通过网络进行密码试错
- 对加密密码进行破解
通过网络进行密码试错
主要有2种方式:
- 穷举法
- 字典攻击
穷举法
穷举法又称为暴力破解法,是指对所有密钥集合构成密钥空间,进行穷举。
如:银行密码,000000-999999中的数字逐一进行产生尝试,就可以试出真实密码。(当然,只能尝试3次)
字典攻击
字典攻击是指利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手法。
如:有些人喜欢用生日作为密码,可以将生日日期数值话,0101-1231保存为字典,进行尝试。
字典攻击与穷举法相比,需要尝试的候选密码较少,攻击耗费的时间较短;当然字典中如果没有正确密码,就无法破解,但是穷举法必定会找到一个正确的密码
对已加密密码的破解
Web应用在保存密码时,一般不会直接以明文的方式保存,通过散列做处理或salt(加盐)处理。如果想获取密码,就需要解密成明文形式。
从加密过的数据中导入明文通常有以下几种方法:
- 通过穷举法·字典攻击进行类推
- 彩虹表
- 拿到密钥
- 加密算法的漏洞
通过穷举法·字典攻击进行类推
如:破解MD5值。通过对大量的字符串进行MD5算法处理,然后一一匹配是否相等。
彩虹表
彩虹表:是由明文密码及与之对应的散列值构成的一张数据表,是一种事先制作庞大的彩虹表,可在穷举法·字典攻击等实际破解过程中缩短消耗时间的技巧。
拿到密钥
拿到密钥,破解密码。
加密算法的漏洞
考虑算法漏洞,利用漏洞尝试解密。(困难太大,不易成功)
点击劫持
点击劫持(Click jacking):是指利用透明的按钮或链接做成陷阱,覆盖在Web页面上。然后诱使用户在不知情的情况下,点击按钮,访问链接。这种行为又称为界面伪装(UIRedressing)。
Dos攻击
Dos攻击(Denial of Service attack):是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。
Dos攻击的两种攻击方式:
- 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。
- 通过攻击安全漏洞使服务头停止。
其中,集中利用访问请求的Dos攻击,单纯来讲就是发送大量的合法请求。服务器很难分辨何为正常请求,何为攻击请求,因此很难防止Dos攻击。
多台计算机发起的Dos攻击称为DDos攻击(Distributed Denial of Service attack)
DDos攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。
后门程序
后门程序(Backdoor):是指开发设置的隐藏入口,可不按不正常步骤使用受限功能。利用后门程序就能使用原本受限制的功能。
通常的后门程序分为以下3中类型:
- 开发阶段作为Debug调用的后门程序
- 开发者为了自身利益置入的后门程序
- 攻击者通过某种方法设置的后门程序
可通过监听进程和通信的状态发现被植入的后门程序。但设定在Web应用中的后门程序,由于和正常使用时区别不大,通常很难发现。
以上是关于图解HTTP读书笔记的主要内容,如果未能解决你的问题,请参考以下文章