第四章 解析应用程序
4.1 枚举内容与功能
4.1.1 Web抓取
人工浏览或使用工具爬取Web站点的内容。
robots.txt文件:列出了不希望Web爬虫访问或搜索引擎列入索引的URL。(有时存在敏感信息)
自动化爬取的限制:
- 一般无法正常处理不常用的导航机制(如复杂的JS代码动态建立和处理的菜单)。
- 可能无法抓取隐藏在编译客户端对象(如Flash、Java applet)中的链接。
- 可能不会接受由自动工具提交的值。(如注册提交字符串返回失败,无法成功通过注册,因此无法发现这以后的内容)。
- 自动化爬虫通常使用URL作为内容标识符。(即已请求过该链接,不会再请求该链接)。
- 一些应用程序在URL中插入并不用于确定资源或功能的可变数据,导致它不断进行不确定的抓取。
- 应用程序的身份验证机制。
4.1.2 用户指定抓取
以常规方式浏览应用程序,试图枚举应用程序的所有的功能,随后生成的流量穿过一个组合拦截代理服务器与爬虫的工具,监控和所有请求和响应。
用户点击浏览器访问屏幕上的可见链接,代理服务器/爬虫工具就会将生成的内容添加到站点地图中。
优点:
- 对应用程序不常用或复杂的导航机制,用户能够以常规方式使用浏览器来遵循这些机制。
- 用户控制提交到应用程序的所有数据,可确保满足数据确认要求。
- 能够以正常方式登录应用程序,并确保通过验证的会话在整个解析过程中保持活动状态,如果会话终止,可重新浏览。
- 能完整枚举任何危险功能,并合并到站点地图中。
4.1.3 发现隐藏的内容
1.蛮力技巧
暴力破解目录文件
2. 通过公布的内容进行推测
留意服务器返回的资源格式(首字母大小写等),针对性的暴力破解。
3. 利用公共信息
搜索引擎(例:内容保存在缓存中)(google hack等)
Web档案:这些档案保存大量Web站点的历史记录或不同时期的快照。
4. 利用Web服务器
利Web服务器层面的漏洞来发现未建立链接的内容与功能。
4.2 分析应用程序
重要方面如下:
- 应用程序的核心功能:用于特定目的时可利用它执行的操作。
- 其他较为外围的应用程序行为,包括站外链接、错误消息、管理与日志功能、重定向使用等。
- 核心安全机制及其运作方式,特别是会话状态、访问控制、验证机制与支持逻辑(注册、修改密码、账户恢复等)。
- 应用程序处理用户提交的输入的所有不同位置:每个URL、查询字符串参数、POST数据、cookie以及类似内容。
- 客户端使用的技术,包括表单、客户端脚本、厚客户端组件(java applet、Active X控件和Flash)和cookie。
- 服务器使用的技术,包括静态与动态页面、使用的请求参数类型、ssl使用、Web服务器软件、数据库交互、电子邮件系统和其他后端组件。
- 任何可收集到的、关于服务器端应用程序内部结构与功能的其他信息(客户端可见的功能和行为的后台传输机制)。
4.2.1 确定用户输入入口点
关键位置包括:
- 每个URL字符串,包括查询字符串标记。
- URL查询字符串中提交的每个参数。
- POST请求主体中提交的每个参数。
- 每个cookie。
极少情况下可能包括由应用程序处理的其他所有HTTP消息头,特别是User-Agent、Referer、Accept、Accept-Language和Host消息头。
1. URL文件路径
2. 请求参数
3. HTTP消息头
4. 带外通道
通过带外通道接收用户可控制的数据的Web应用程序包括:
- 处理并显示通过SMTP接收到的电子邮件消息的Web邮件应用程序。
- 具有通过HTTP从其他服务器获取内容功能的发布应用程序。
- 使用网络嗅探器收集数据并通过Web应用程序界面显示这些数据的入侵检测应用程序。
- 任何提供由非浏览器用户代理使用的API接口,如移动电话应用程序。
4.2.2 确定服务器端技术
1. 提取版本信息
如HTTP Server消息头揭露的服务器信息,除Server消息头以外还有:
建立HTML页面的模板;
定制的HTTP消息头;
URL查询字符串参数。
2. HTTP指纹识别
服务器返回的信息可能被有意伪造,除Server消息头判断外,还可以使用大量迂回的方法来识别Web服务器,例如使用Httprecon工具对服务器扫描,以不同的可信度报告各种可能的Web服务器。
3.文件扩展名
- asp——Microsoft Active Server Pages;
- aspx——Microsoft ASP.NET;
- jsp——Java Server Pages;
- cfm——Cold Fusion;
- php——php语言;
- d2w——WebSphere;
- pl——perl语言;
- py——Python语言;
- dll——通常为编译型本地代码(C或C++);
- nsf或ntf——Lotus Domino;
4. 目录名称
- servlet——Java servlet;
- pls——Oracla Application Server PL/SQL网关;
- cfdocs或cfide——Colde Fusion;
- SilverStream——SilverStream Web服务器;
- WebObjects或{function}.woa——Apple WebObjects;
- rails——Ruby on Rails;
5. 会话令牌
- jsessionid——java平台
- ASPSESSIONID——Microsoft IIS 服务器
- ASP.NET_SessionId——Microsoft ASP.NET
- CFID/CFTOKEN——Cold Fusion
- PHPSESSID——PHP
4.2.4 解析守攻击面
客户端确认——服务器没有采用确认检查。
数据库交互——SQL注入。
文件上传和下载——路径遍历漏洞,保存型跨站点脚本。
显示用户提交的数据——跨站点脚本。
动态重定向——重定向与消息头注入攻击
社交网络功能——用户名枚举、保存型跨站点脚本。
登录——用户名枚举、脆弱密码、能使用蛮力。
多阶段登录——登录缺陷。
会话状态——可推出的令牌、令牌处理不安全。
访问控制——水平权限和垂直权限提升。
用户伪装功能——权限提升。
使用明文通讯——会话劫持、收集证书和其他敏感数据。
站外链接——Referer消息头中查询字符串参数泄露。
外部系统接口——处理会话/或访问控制的快捷方式。
错误消息——信息泄露。
电子邮件交互——电子邮件与命令注入。
本地代码组件或交互——缓冲区溢出。
使用第三方应用程序组件——已知漏洞。
已确定的Web服务器软件——常见配置薄弱环节、已知软件程序缺陷。
第五章 避开客户端控件
通过客户端传送数据:
可以使用代理服务器拦截:
- 隐藏表单字段:通过使用代理服务器拦截(burp proxy)随意修改表单中的隐藏值
- HTTP COOKIE:虽然cookie和隐藏表单字段一样,都是不能够被直接修改的,但是用户也可以使用拦截代理服务器,通过更改设置cookie的服务器响应或者随后发布这些cookie的客户端请求,对 HTTP cookie进行修改。
- URL参数
- Referer消息头