黑客攻防技术宝典Web实战篇.docx
- 文档编号:8449049
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:35
- 大小:36.20KB
黑客攻防技术宝典Web实战篇.docx
《黑客攻防技术宝典Web实战篇.docx》由会员分享,可在线阅读,更多相关《黑客攻防技术宝典Web实战篇.docx(35页珍藏版)》请在冰豆网上搜索。
黑客攻防技术宝典Web实战篇
Web应用程序安全的关键问题因素:
1.不成熟的安全意识
2.独立开发
3.欺骗性的简化
4.迅速发展的威胁形式
5.资源与时间限制
6.技术上强其所难
Web应用程序使用三层相关联的安全机制处理用户访问:
1.身份验证
2.会话管理
3.访问控制
处理用户输入:
1.输入的多样性
2.输入处理方法:
a)拒绝已知的不良输入
b)接受已知的正常输入
c)净化
d)安全数据处理
e)语法检查
3.边界确认步骤:
a)应用程序受到用户的登录信息
b)应用程序执行一个SQL查询检验用户证书
c)如果用户成功登录,应用程序再将用户资料中的某些数据传送给SOAP服务,经一步获得用户账户的有关信息
d)应用程序在用户的浏览器中显示用户的帐户信息
4.多步确认与规范化
处理攻击者:
1.处理错误
2.维护审计日志
3.向管理员发出警报
4.应对攻击
HTTP
1.HTTP请求:
每个HTTP请求的第一行都由三个以空格间隔的项目组成
三个项目:
1)一个说明HTTP方法的动词(最常用的是GET)
2)被请求的URL
3)使用的HTTP版本
2.HTTP响应:
每个HTTP响应的第一行都由三个以空格间隔的项目组成
三个项目:
1)使用的HTTP版本
2)表示请求结果的数字状态码
3)一段文本形式的“原因短语”,进一步说明响应状态
3.HTTP方法:
GET——获取资源
POST——执行操作
HEAD——与GET类似,但服务器不会在其响应中返回消息主体
TRACE——诊断目的
OPTIONS——要求服务器报告对某一特殊资源有效的HTTP方法
PUT——试图使用包含在请求主体中的内容
HTTP消息头
1.常用消息头:
Connection——用户告诉通信的另一端,在完成HTTP传输后是否关闭TCP/IP连接
Content-Encoding——压缩响应以加快传输速度
Content-Length——规定消息主体的字节长度
Content-Type——规定消息主体的内容类型
Transfer-Encoding——为方便通过HTTP传输而对消息主体使用的任何编码
2.请求消息头:
Accept——告诉服务器客户愿意接受哪些内容
Accept-Encoding——告诉服务器客户愿意接受哪些内容编码
Authorization——用于为一种内置HTTP身份验证向服务器提交证书
Cookie——用于向服务器提交它以前发布的cookie
Host——用于指定出现在被请求的完整URL中的主机名称
If-Modified-Since——用于说明浏览器最后一次收到被请求的资源的时间
If-None-Match——用于指定一个实体标记
Referer——用于指示提出当前请求的原始URL
User-Agent——提供与浏览器或发生请求的其他客户端软件有关的信息
3.响应消息头:
Catch-Control——用于向浏览器传送缓存指令
ETag——用于指定一个实体标签
Expires——用户向浏览器说明消息主题内容的有效时间
Location——用户在重定向响应中说明重定向目标
Pragma——用户向浏览器传送缓存指令
Server——提供所使用的Web服务器软件的相关信息
Set-Cookie——用户向浏览器发布cookie,浏览器又在随后的请求中将其返回服务器
WWW-Authenticate——提供与服务器所支持的身份验证类型相关的信息
状态码:
1xx——提供信息
2xx——请求被成功提交
3xx——客户被重定向到其它资源
4xx——请求包含错误
5xx——服务器执行请求时遇到错误
服务器端功能:
1.脚本语言(PHP、VBScript、Perl)
2.Web应用程序平台(ASP.NET、JAVA)
3.Web服务器(Apache、IIS、NetscapeEnterprise)
4.数据库(SQL、ORACLE、MySQL)
客户端功能:
HTML、超链接、表单、JavaScript、厚客户组件
编码方案:
URL编码、Unicode编码、HTML编码、Base64编码、十六进制编码
解析应用程序:
枚举内容和功能:
1.Web抓取
2.用户指定的抓取
3.发现隐藏的内容
4.应用程序页面与功能路径
5.发现隐藏的参数
分析应用程序:
1.确定用户输入进入点
2.确定服务器端技术:
a)提取版本信息
b)HTTP指纹识别
c)文件扩展名
d)目录名称
e)会话令牌
f)第三方代码组件
3.确定服务器端功能:
a)仔细分析请求
b)推测应用程序的行为
4.解析受攻击面
通过客户端传送数据:
1.隐藏表单字段
2.HTTPCookie
3.URL参数
4.Referer消息头
5.模糊数据
6.ASP.NETViewState
收集用户数据:
HTML表单:
1.长度限制
2.基于脚本的确认
3.禁用的元素
收集用户数据:
厚客户端组件
1.Javaapplet(反编译Java字节码、字节码模糊处理)
2.ActiveX控件(逆向工程、利用输出函数、修改由控件处理的输入、托管代码反编译)
3.ShockwaveFlash对象
安全处理客户端数据:
1.通过客户传送数据
2.确认客户生成的数据
3.日志与警报
攻击验证机制
一、验证技术:
1.基于HTML表单的验证
2.多元机制
3.客户SSL证书或智能卡
4.HTTP基本和摘要验证
5.使用NTML或Kerberors、整合Windows的验证
6.验证服务
二、验证机制设计缺陷:
1.密码保密性不强:
a)非常短或空白的密码
b)以常用的字典词汇或名称为密码
c)密码和用户名完全相同
d)仍然使用默认密码
2.蛮力攻击登录
3.详细的失败消息
4.证书传输易受攻击
5.密码修改功能
6.忘记密码功能
7.记忆功能(“记住我”)
8.用户伪装功能
9.证书确认不完善
10.非唯一性用户名
缺陷:
a)在注册阶段或随后修改密码的过程中,共享同一个用户名的两个用户可能碰巧选择相同的密码
b)及时由于失败登录尝试次数方面的限制,在其他地方不可能实施这种攻击,攻击者仍然可以利用这种行为成功实施蛮力攻击)
11.可预测的用户名
12.可预测的初试密码
13.证书分配不安全
三、验证机制执行缺陷:
1.故障开放登录机制
2.多阶段登录机制中的缺陷:
a)使得仅拥有部分正常登录所需各种证书的攻击者能够成功登录
b)攻击者若能在不同登录阶段的转换过程中干扰这些标记,就可以更改应用程序的行为,让他们只需部分证书即可通过验证,或者提升其权限
c)应用程序可能认为每个阶段的用户身份不会发生变化
3.不安全的证书储存
四、保障验证机制的安全:
1.使用可靠的证书:
a)强制执行适当的最小密码强度要求
b)使用唯一的用户名
c)系统生成的任何用户名和密码应具有足够的随机性
d)允许用户设置足够强大的密码
2.安全处理证书:
a)以不会造成非授权泄露的方式创建、保存和传送所有证书
b)使用公认的加密技术保护客户与服务器之间的所有通信
c)只使用POST请求向服务器传输证书
d)客户端“记住我”功能应仅记忆非保密类数据
e)使用一种密码修改工具,定期修改密码
f)考虑在适当的地方使用下拉菜单而非文本字段截取用户的一些登录信息
3.正确确认证书:
a)确认完整的密码
b)在登录处理过程中主动防御无法预料的事件
c)对验证逻辑的伪代码和实际的应用程序源代码进行仔细的代码审查
d)严格控制用户伪装功能,防止攻击者滥用它获得未授权访问
e)对多阶段登录进行严格控制
4.防止信息泄露:
a)应用程序使用的各种验证机制不应通过公开的消息,或者通过从应用程序的其他行为进行推断,来揭示关于验证参数的任何信息
b)由单独一个代码组件使用一条常规消息负责响应所有的失败登录尝试
5.防止蛮力攻击:
a)必须对验证功能执行的各种质询采用保护措施,防止攻击者试图使用自动工具响应这些质询
b)使用无法预测的用户名,同时阻止用户名枚举
6.防止滥用密码修改功能:
a)应用程序应始终执行密码修改功能,允许定期使用的密码到期终止并允许用户修改密码
b)只能从已通过验证的会话中访问该功能
c)不应以任何方式直接提供用户名,或通过隐藏表单字段或cookie提供用户名
d)应用程序应对密码修改功能加以保护,防止攻击者通过其他安全缺陷获得未授权访问
e)为防止错误,新密码应输入两次
f)使用一条常规错误消息告知用户现有证书中出现的任何错误
g)使用“带外”方式通知用户其密码已被修改
7.防止滥用账户恢复功能:
a)精心设计的密码恢复机制需要防止账户被未授权方攻破,避免给合法用户造成任何使用中断
b)绝对不要使用密码“暗示”之类的特性
c)通过电子邮件给用户发送一个唯一的、具有时间限制的、无法猜测的一次性恢复URL是帮助用户重新控制账户的最佳自动化解决方案
d)为进一步防止未授权访问,可能会向用户提出一个次要质询,用户必须在使用密码重设功能前完成质询)
8.日志、监控与通知:
a)应用程序应在日志中记录所有与验证有关的事件
b)应用程序的实时报警与入侵防御功能应对验证过程中的一场事件进行处理
c)应以“带外”方式向用户通报任何重大的安全事件
d)应以“带内”方式向用户通报经常发生的安全事件
攻击会话管理
执行会话的最简单、也是最常见的方法就是向每名用户发布一个唯一的会话令牌或标识符。
1.会话管理机制中存在的两类漏洞:
a)会话令牌生成过程中的薄弱环节
b)在整个生命周期过程中处理会话令牌的薄弱环节
2.会话替代方案
a)HTTP验证
b)无会话状态机制
3.结构化令牌的组成成分:
a)账户用户名
b)应用程序用来区分账户的数字标识符
c)用户的电子邮件地址
d)用户在应用程序中所属的组或扮演的角色
e)日期/时间戳
f)一个递增或可预测的数字
g)客户的IP地址
4.会话令牌处理中的薄弱环节:
1)在网络上泄露令牌:
a)一些应用程序在登录阶段选择使用HTTPS保护用户证书的安全,但在用户会话的其他阶段转而使用HYYP
b)一些应用程序在站点中预先通过验证的区域使用HTTP,但从登录页面开始转换到HTTPS
c)即使应用程序在用户成功登录后发布一个新令牌,并从登录页面开始使用HTTPS,但如果用户通过单击验证区域中的一个连接、使用“后退”按钮或者直接输入URL,重新访问一个预先验证的页面
d)一些应用程序对应用程序内的全部静态内容使用HTTP
e)即使应用程序在每一个页面都使用HTTPS,有些情况下,用户的令牌仍然通过HTTP传送
2)在日志中泄露令牌:
a)用户浏览器的日志
b)Web服务器的日志
c)企业或ISP代理服务器的日志
d)任何在应用程序主机环境中采用的反向代理的日志
e)应用程序用户通过单击站外链接访问的任何服务器Referer日志
3)令牌-会话映射易受攻击
4)会话终止易受攻击
5)客户暴露在令牌劫持风险之中:
a)攻击者可通过跨站点脚本攻击查询用户的cookie,获得他们的会话令牌,然后将其传送给自己控制的任意服务器
b)攻击者可以使用其他针对用户的攻击,以不同的方式劫持用户的会话
6)宽泛的cookie范围
5.保障会话管理的安全:
(1)生成强大的令牌
(2)在整个生命周期保障令牌的安全:
a)令牌只能通过HTTPS传送
b)绝不能在URL中传送会话令牌
c)总是执行推出功能
d)会话处于非活动状态一段时间后,执行会话终止
e)防止并行登录
f)尽可能限定应用程序会话cookie的域和路径范围
g)严格审查应用程序的代码库,以确定并删除任何跨站点脚本漏洞
h)不接受用户提交、但服务器并不认可的任何令牌
i)在执行转帐之类的重要操作前,要求进行两步确认或重新验证
j)不完全依赖HTTPcookie传送会话令牌
k)成功验证后总是建立一个新的会话,以避免会话固定攻击的影响
(3)日志、监控与警报
攻击访问控制
1.访问控制两大类:
a)垂直访问控制
b)水平访问控制
2.常见的漏洞:
a)完全不受保护的功能
b)基于标识符的功能
c)多阶段功能
d)静态文件
e)访问控制方法不安全
3.保障访问控制的安全:
(1)明显的缺陷:
a)不要认为用户不知道用于指定应用程序资源的URL或标识符就无法访问这些资源
b)不要信任任何用户提交的表示访问权限的参数
c)不要认为用户将按设定的顺序访问应用程序页面
d)不要相信用户不会篡改通过用户传送的数据
(2)在Web应用程序中执行有效访问控制的最佳方法:
a)仔细评估并记录每个应用程序功能单元的访问控制要求
b)通过用户会话做出所有访问控制决定
c)使用一个中央应用程序组件检查访问控制
d)通过中央应用程序组件处理每个客户请求,确认提出请求的用户被允许访问他请求的功能和资源
e)对于特别敏感的功能,确保只有特殊网络范围内的用户能够访问这些功能
f)无论何时通过客户传送,指定用户所希望访问资源的标识符都容易遭到篡改,服务器只信任完整的服务器端数据
g)对于安全性很关键的应用程序功能考虑对每笔交易执行重复验证和双重授权,进一步确保该功能不会被未授权方使用
h)记录每一个访问敏感数据或执行敏感操作的事件
(3)中央应用程序组件的优点:
a)可增进应用程序访问控制的透明度
b)可提高访问控制的可维护性
c)可改善可适应性
d)比在整个应用程序中逐步执行访问控制代码造成更少的错误和省略
4.安全模型中应用各种有益的访问控制:
a)编程控制
b)自主访问控制
c)基于角色的访问控制
d)声明式控制
代码注入
1.注入解释型语言
(1)解释型语言:
一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言
(2)编译型语言:
它的代码在生成时转换成机器指令,然后在运行时直接由使用该语言的计算机处理执行这些指令。
2.注入SQL
(1)利用一个基本的漏洞:
攻击者提交包含引号的输入终止SQL控制的字符串,然后编写任意的SQL修改开发者想要应用程序执行的查询
(2)避开登录:
(3)查明SQL注入漏洞:
a)字符串数据
b)数字数据
(4)注入不同的语句类型:
a)SELECT语句
b)INSERT语句
c)UPDATE语句
d)DELECT语句)
e)UNION操作符
(5)“指纹识别”数据库
(6)提取有用的数据
(7)利用ODBC错误消息(仅使用与MS-SQL):
a)枚举表和栏名称
b)提取任意数据
c)使用递归
(8)避开过滤:
a)避免使用被阻止的字符
b)避免使用简单确认
c)使用SQL注释
d)处理被阻止的字符串
e)使用动态执行
f)利用有缺陷的过滤
(9)二阶SQL注入:
(10)高级利用:
A.获取数字数据
B.使用带外通道
a)MS-SQL——使用OpenRowSet命令与外部数据库建立连接并在其中插入任何数据
b)Oracle——使用大量低权限用户可访问的默认功能建立带外连接
c)MySQL——SELECT…INTOOUTFILE命令可将任意一个查询的输出指向一个文件
d)利用操作系统
e)使用推论——条件式响应:
引发条件性错误和使用时间延迟
C.SQL注入之外:
扩大数据库攻击范围
D.防止SQL注入部分有效的防御措施:
a)将用户输入中的任何单引号配对,对它们进行转义
b)使用存储过程完成全部数据库访问
c)参数化查询(步骤):
1)应用程序指定查询结构,为用户输入的每个数据预留占符位
2)应用程序指定每个占符位的内容
E.深层防御:
a)当访问数据库时,应用程序应尽可能使用最低权限的用户
b)许多企业数据库包含大量默认功能,可被能够执行任意SQL语句的攻击者利用
c)应评估、测试并及时安装供应商发布的所有安全补丁,以修复数据库软件本身存在的漏洞
3.注入操作系统命令
a)通过Perl注入
b)通过JSP注入
c)查找OS命令注入漏洞
d)防止OS命令注入——完全避免直接调用操作系统命令
4.注入web脚本语言
A.动态执行漏洞:
1)PHP中的动态执行——eval函数
2)ASP中的动态执行——Exrcute函数
3)查找动态执行漏洞
B.文件包含漏洞:
1)远程文件包含
2)本地文件包含
3)查找文件包含漏洞
C.防止脚本注入漏洞——避免将用户提交的输入或者来自用户的数据传送给任何动态执行或包含函数
5.注入SOAP
A.SOAP(简单对象访问协议)是一种基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息。
B.查找并利用SOAP注入
C.防止SOAP注入——在用户提交的数据被插入SOAP消息中的任何位置实施边界确认过滤
6.注入XPath
A.XPath是一种用于导航XML文档并从中获取数据的解释性语言
B.破坏应用程序逻辑
C.谨慎XPath注入
D.盲目XPath注入
E.查找XPath注入漏洞
F.防止XPath注入——提交可实施严格输入确认的简单数据
7.注入SMTP
A.操纵电子邮件消息头
B.SMTP命令注入
C.查找SMTP注入漏洞
D.防止SMTP注入:
(根据一个适当的正则表达式检查电子邮件地址
E.消息主题不得包括而内核换行符,并实施适当的长度限制
F.禁止使用仅包含一个点字符的消息行)
8.注入LDAP
A.LDAP(轻量级目录访问协议)用于访问网络中的目录服务
B.注入查询属性
C.修改查询过滤器
D.查找LDAP注入漏洞
E.防止LDAP注入
1)只提交可实施严格输入确认的简单数据
2)根据一份可接受字符“白名单”检查用户输入
3)阻止任何可能破坏LDAP查询的字符包括(),;*|&=
4)拒绝而不是净化任何与白名单不匹配的输入
利用路径遍历
目录遍历(路径遍历)是由于Web服务器或Web应用程序对用户输入文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过HTTP请求和利用一些特殊字符就可以绕过服务器的安全限制,访问任意受限的文件,甚至执行系统命令。
1.查找并利用路径遍历漏洞:
A.确定攻击目标
B.探查路径遍历漏洞
C.避开遍历攻击障碍(输入过滤方法):
1)检查文件名参数中是否存在任何路径遍历序列
2)确认用户提交的输入是否包含应用程序想要的后缀或前缀
D.利用遍历漏洞——从包含有用信息的服务器上获取有益的文件,帮助优化针对其他漏洞的攻击
2.防止路径遍历漏洞:
1)对用户提交的文件名进行相关解码与规范化之后,应用程序应检查该文件名是否包含路径遍历序列或空字节
2)应用程序应使用一个硬编码的、被允许访问的文件类型列表,并拒绝任何访问其他文件类型的请求
3)对用户提交的文件名进行一切必要的过滤后,应用程序应使用适当的文件系统API确认,以及使用该文件名访问的文件是否位于应用程序指定的起始目录中
4)应用程序可以使用一个chrooted环境访问包含被访问文件的目录,减轻大多数路径遍历漏洞造成的影响
5)应用程序应将其路径遍历攻击防御机制与日志和报警系统机制整合在一起
攻击应用程序逻辑
逻辑缺陷的本质——代码中的简单错误以及几种应用程序核心组件互操作方面的极其复杂的漏洞
1.现实中的逻辑缺陷:
1)欺骗密码修改功能
2)直接结算
3)修改保险单
4)入侵银行
5)擦除审计追踪
6)规避交易限制
7)获得大幅折扣
8)避免转义
9)滥用搜索功能
10)利用调试消息
11)与登录机制竞赛
2.避免逻辑缺陷:
1)确保将应用程序各方面的设计信息清楚、详细地记录在文档中,以方便其他人了解设计者做出的每个假设
2)要求源代码提供清楚的注释
3)注意任何应用程序用户可完全控制的假设条件
4)根据会话确定用户的身份和权限,不要根据请求的任何其他特性对用户的权限做出假设
5)当根据用户提交的数据或者用户执行的操作更新会话数据时,仔细考虑更新后的数据可能会给应用程序的其他功能造成什么影响
攻击其他用户
1.跨站点脚本
跨站脚本攻击(XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
反射型XSS是需要欺骗用户自己去点击链接才能触发XSS的,如在论坛发贴处的XSS就是持久型的XSS。
非持久性XSS,就是我们通常所说的反射型XSS,也是最常用,使用最广的一种方式。
它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。
它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。
持久性XSS,指的是恶意脚本代码被存储进被攻击的数据库,当其他用户正常浏览网页时,站点从数据库中读取了非法用户存入非法数据,恶意脚本代码被执行。
这种攻击类型通常在留言板等地方出现。
1)反射性XSS漏洞与保存型XSS漏洞的区别:
反射性XSS漏洞——攻击者必须以某种方式诱使受害者访问他精心设计的URL
攻击者可能会说服用户登录,然后点击它们提供的一个连接,从而劫持用户的对话
保存型XSS漏洞——攻击者只需要等待受害者浏览已被攻破的页面或功能
攻击者能保证受害用户在他实施攻击时已经在访问应用程序
2)基于DOM的XSS漏洞:
利用此漏洞通常需要攻击者诱使一名用户访问一个包含恶意代码的专门设计URL,并由服务器响应那个使得恶意代码得以执行的特殊请求
3)连接XXS与其他攻击
4)XSS攻击有效载荷:
a)虚拟置换
b)注入木马功能
c)诱使用户执行操作
d)利用信任关系
e)扩大客户端攻击范围:
i.记录键击
ii.截获剪切板内容
iii.窃取历史记录与搜索查询
iv.枚举当前使用的应用程序
v.对本地网络进行端口扫描
vi.攻击其他网络主机
vii.利用浏览器漏洞
5)XXS攻击的传送机制:
a)传送反射型与基于DOM的XSS攻击
b)传送保存型XSS攻击
6)查找并利用XSS漏洞:
A.查找并利用反射型XSS漏洞:
攻击者截获一名通过验证的用户的会话,劫持会话后,攻击者就可以访问该用户经授权访问的所有数据和功能
B.服务器对输入的处理:
i.应用程序发现一个攻击签名,完全阻止了输入
ii.应用程序已经接受了输入,但对攻击字符串进行了某种净化或编码
iii.应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 黑客 攻防 技术 宝典 Web 实战
![提示](https://static.bdocx.com/images/bang_tan.gif)