黑客攻防技术宝典:Web 实战篇

黑客攻防技术宝典
内容简介
《黑客攻防技术宝典。Web 实战篇(第 2 版)》是探索和研究 Web 应用程序安全漏洞的实践指南。作者利用大量的实际案例和示例代码,详细介绍了各类 Web 应用程序的弱点,并深入阐述了如何针对 Web 应用程序进行具体的渗透测试。本书从介绍当前 Web 应用程序安全概况开始,重点讨论渗透测试时使用的详细步骤和技巧,总结书中涵盖的主题。每章后还附有习题,便于读者巩固所学内容。
第 2 版新增了 Web 应用程序安全领域近年来的发展变化新情况,并以尝试访问的链接形式提供了几百个互动式“漏洞实验室”,便于读者迅速掌握各种攻防知识与技能。
《黑客攻防技术宝典。Web 实战篇(第 2 版)》适合各层次计算机安全人士和 Web 开发与管理领域的技术人员阅读。
作者简介
Dafydd Stuttard,世界知名安全顾问、作家、软件开发人士。牛津大学博士,MDSec 公司联合创始人,尤其擅长 Web 应用程序和编译软件的渗透测试。Dafydd 以网名 PortSwigger 蜚声安全界,是众所周知的 Web 应用程序集成攻击平台 Burp Suite 的开发者。
Marcus Pinto,渗透测试专家,剑桥大学硕士,MDSec 公司联合创始人。Marcus 为全球金融、政府、电信、博彩、零售等行业组织和机构提供 Web 应用程序渗透测试和安全防御的咨询与培训。
精彩书评
★关于黑客攻防技术,没有一本书能比这本书讲解得更为透彻和全面!
——Jason Haddix,惠普公司渗透测试总监
★如果你对 Web 应用程序安全感兴趣,我强烈推荐本书,它实为 Web 安全人士必读之作。
——Robert Wesley McGrew,McGrew 安全公司研究人员
★第 1 版本来就是 Web 安全领域的扛鼎之作,第 2 版可谓经典之上的完善,值得拥有!
——Daniel Miessler,安全顾问
目录
第 1 章 Web 应用程序安全与风险
- 1.1 Web 应用程序的发展历程
- 1.1.1 Web 应用程序的常见功能
- 1.1.2 Web 应用程序的优点
- 1.2 Web 应用程序安全
- 1.2.1 “本站点是安全的”
- 1.2.2 核心安全问题:用户可提交任意输入
- 1.2.3 关键问题因素
- 1.2.4 新的安全边界
- 1.2.5 Web 应用程序安全的未来
- 1.3 小结
第 2 章 核心防御机制
- 2.1 处理用户访问
- 2.1.1 身份验证
- 2.1.2 会话管理
- 2.1.3 访问控制
- 2.2 处理用户输入
- 2.2.1 输入的多样性
- 2.2.2 输入处理方法
- 2.2.3 边界确认
- 2.2.4 多步确认与规范化
- 2.3 处理攻击者
- 2.3.1 处理错误
- 2.3.2 维护审计日志
- 2.3.3 向管理员发出警报
- 2.3.4 应对攻击
- 2.4 管理应用程序
- 2.5 小结
- 2.6 问题
第 3 章 Web 应用程序技术
- 3.1 HTTP
- 3.1.1 HTTP 请求
- 3.1.2 HTTP 响应
- 3.1.3 HTTP 方法
- 3.1.4 URL
- 3.1.5 REST
- 3.1.6 HTTP 消息头
- 3.1.7 cookie
- 3.1.8 状态码
- 3.1.9 HTTPS
- 3.1.10 HTTP 代理
- 3.1.11 HTTP 身份验证
- 3.2 Web 功能
- 3.2.1 服务器端功能
- 3.2.2 客户端功能
- 3.2.3 状态与会话
- 3.3 编码方案
- 3.3.1 URL 编码
- 3.3.2 Unicode 编码
- 3.3.3 HTML 编码
- 3.3.4 Base64 编码
- 3.3.5 十六进制编码
- 3.3.6 远程和序列化框架
- 3.4 下一步
- 3.5 问题
第 4 章 解析应用程序
- 4.1 枚举内容与功能
- 4.1.1 Web 抓取
- 4.1.2 用户指定的抓取
- 4.1.3 发现隐藏的内容
- 4.1.4 应用程序页面与功能路径
- 4.1.5 发现隐藏的参数
- 4.2 分析应用程序
- 4.2.1 确定用户输入入口点
- 4.2.2 确定服务器端技术
- 4.2.3 确定服务器端功能
- 4.2.4 解析受攻击面
- 4.2.5 解析 Extreme Internet Shopping 应用程序
- 4.3 小结
- 4.4 问题
第 5 章 避开客户端控件
- 5.1 通过客户端传送数据
- 5.1.1 隐藏表单字段
- 5.1.2 HTTP cookie
- 5.1.3 URL 参数
- 5.1.4 Referer 消息头
- 5.1.5 模糊数据
- 5.1.6 ASP.NET ViewState
- 5.2 收集用户数据:HTML 表单
- 5.2.1 长度限制
- 5.2.2 基于脚本的确认
- 5.2.3 禁用的元素
- 5.3 收集用户数据:浏览器扩展
- 5.3.1 常见的浏览器扩展技术
- 5.3.2 攻击浏览器扩展的方法
- 5.3.3 拦截浏览器扩展的流量
- 5.3.4 反编译浏览器扩展
- 5.3.5 附加调试器
- 5.3.6 本地客户端组件
- 5.4 安全处理客户端数据
- 5.4.1 通过客户端传送数据
- 5.4.2 确认客户端生成的数据
- 5.4.3 日志与警报
- 5.5 小结
- 5.6 问题
第 6 章 攻击验证机制
- 6.1 验证技术
- 6.2 验证机制设计缺陷
- 6.2.1 密码保密性不强
- 6.2.2 蛮力攻击登录
- 6.2.3 详细的失败消息
- 6.2.4 证书传输易受攻击
- 6.2.5 密码修改功能
- 6.2.6 忘记密码功能
- 6.2.7 “记住我”功能
- 6.2.8 用户伪装功能
- 6.2.9 证书确认不完善
- 6.2.10 非唯一性用户名
- 6.2.11 可预测的用户名
- 6.2.12 可预测的初始密码
- 6.2.13 证书分配不安全
- 6.3 验证机制执行缺陷
- 6.3.1 故障开放登录机制
- 6.3.2 多阶段登录机制中的缺陷
- 6.3.3 不安全的证书存储
- 6.4 保障验证机制的安全
- 6.4.1 使用可靠的证书
- 6.4.2 安全处理证书
- 6.4.3 正确确认证书
- 6.4.4 防止信息泄露
- 6.4.5 防止蛮力攻击
- 6.4.6 防止滥用密码修改功能
- 6.4.7 防止滥用账户恢复功能
- 6.4.8 日志、监控与通知
- 6.5 小结
- 6.6 问题
第 7 章 攻击会话管理
- 7.1 状态要求
- 7.2 会话令牌生成过程中的薄弱环节
- 7.2.1 令牌有一定含义
- 7.2.2 令牌可预测
- 7.2.3 加密令牌
- 7.3 会话令牌处理中的薄弱环节
- 7.3.1 在网络上泄露令牌
- 7.3.2 在日志中泄露令牌
- 7.3.3 令牌 - 会话映射易受攻击
- 7.3.4 会话终止易受攻击
- 7.3.5 客户端暴露在令牌劫持风险之中
- 7.3.6 宽泛的 cookie 范围
- 7.4 保障会话管理的安全
- 7.4.1 生成强大的令牌
- 7.4.2 在整个生命周期保障令牌的安全
- 7.4.3 日志、监控与警报
- 7.5 小结
- 7.6 问题
第 8 章 攻击访问控制
- 8.1 常见漏洞
- 8.1.1 完全不受保护的功能
- 8.1.2 基于标识符的功能
- 8.1.3 多阶段功能
- 8.1.4 静态文件
- 8.1.5 平台配置错误
- 8.1.6 访问控制方法不安全
- 8.2 攻击访问控制
- 8.2.1 使用不同用户账户进行测试
- 8.2.2 测试多阶段过程
- 8.2.3 通过有限访问权限进行测试
- 8.2.4 测试“直接访问方法”
- 8.2.5 测试对静态资源的控制
- 8.2.6 测试对 HTTP 方法实施的限制
- 8.3 保障访问控制的安全
- 8.4 小结
- 8.5 问题
第 9 章 攻击数据存储区
- 9.1 注入解释型语言
- 9.2 注入 SQL
- 9.2.1 利用一个基本的漏洞
- 9.2.2 注入不同的语句类型
- 9.2.3 查明 SQL 注入漏洞
- 9.2.4 “指纹”识别数据库
- 9.2.5 UNION 操作符
- 9.2.6 提取有用的数据
- 9.2.7 使用 UNION 提取数据
- 9.2.8 避开过滤
- 9.2.9 二阶 SQL 注入
- 9.2.10 高级利用
- 9.2.11 SQL 注入之外:扩大数据库攻击范围
- 9.2.12 使用 SQL 注入工具
- 9.2.13 SQL 语法与错误参考
- 9.2.14 防止 SQL 注入
- 9.3 注入 NoSQL
- 9.4 注入 XPath
- 9.4.1 破坏应用程序逻辑
- 9.4.2 谨慎 XPath 注入
- 9.4.3 盲目 XPath 注入
- 9.4.4 查找 XPath 注入漏洞
- 9.4.5 防止 XPath 注入
- 9.5 注入 LDAP
- 9.5.1 利用 LDAP 注入
- 9.5.2 查找 LDAP 注入漏洞
- 9.5.3 防止 LDAP 注入
- 9.6 小结
- 9.7 问题
第 10 章 测试后端组件
- 10.1 注入操作系统命令
- 10.1.1 例 1:通过 Perl 注入
- 10.1.2 例 2:通过 ASP 注入
- 10.1.3 通过动态执行注入
- 10.1.4 查找 OS 命令注入漏洞
- 10.1.5 查找动态执行漏洞
- 10.1.6 防止 OS 命令注入
- 10.1.7 防止脚本注入漏洞
- 10.2 操作文件路径
- 10.2.1 路径遍历漏洞
- 10.2.2 文件包含漏洞
- 10.3 注入 XML 解释器
- 10.3.1 注入 XML 外部实体
- 10.3.2 注入 SOAP
- 10.3.3 查找并利用 SOAP 注入
- 10.3.4 防止 SOAP 注入
- 10.4 注入后端 HTTP 请求
- 10.4.1 服务器端 HTTP 重定向
- 10.4.2 HTTP 参数注入
- 10.5 注入电子邮件
- 10.5.1 操纵电子邮件标头
- 10.5.2 SMTP 命令注入
- 10.5.3 查找 SMTP 注入漏洞
- 10.5.4 防止 SMTP 注入
- 10.6 小结
- 10.7 问题
第 11 章 攻击应用程序逻辑
- 11.1 逻辑缺陷的本质
- 11.2 现实中的逻辑缺陷
- 11.2.1 例 1:征求提示
- 11.2.2 例 2:欺骗密码修改功能
- 11.2.3 例 3:直接结算
- 11.2.4 例 4:修改保险单
- 11.2.5 例 5:入侵银行
- 11.2.6 例 6:规避交易限制
- 11.2.7 例 7:获得大幅折扣
- 11.2.8 例 8:避免转义
- 11.2.9 例 9:避开输入确认
- 11.2.10 例 10:滥用搜索功能
- 11.2.11 例 11:利用调试消息
- 11.2.12 例 12:与登录机制竞赛
- 11.3 避免逻辑缺陷
- 11.4 小结
- 11.5 问题
第 12 章 攻击其他用户
- 12.1 XSS 的分类
- 12.1.1 反射型 XSS 漏洞
- 12.1.2 保存型 XSS 漏洞
- 12.1.3 基于 DOM 的 XSS 漏洞
- 12.2 进行中的 XSS 攻击
- 12.2.1 真实 XSS 攻击
- 12.2.2 XSS 攻击有效载荷
- 12.2.3 XSS 攻击的传送机制
- 12.3 查找并利用 XSS 漏洞
- 12.3.1 查找并利用反射型 XSS 漏洞
- 12.3.2 查找并利用保存型 XSS 漏洞
- 12.3.3 查找并利用基于 DOM 的 XSS 漏洞
- 12.4 防止 XSS 攻击
- 12.4.1 防止反射型与保存型 XSS 漏洞
- 12.4.2 防止基于 DOM 的 XSS 漏洞
- 12.5 小结
- 12.6 问题