文章目录
- 一、确定服务器端功能
- 二、解析受攻击面
一、确定服务器端功能
通过留意应用程序向客户端披露的线索,通常可推断与服务器端功能和结构有关的大量信息,或者至少可做出有根据的猜测。以下面用于访问搜索功能的URL为例:
可见,.jsp文件扩展名表示它使用Java Server Pages。据此可以推断:
- 搜索功能从索引系统或数据库获取信息;
- OrderBy参数暗示它使用后端数据库,提交的值将被SQL查询的ORDER BY子句使用。
在这些参数中,isExpired字段同样值得我们注意,这是一个指定搜索查询是否应包含已到期内容的布尔型标志。如果应用程序的设计者并不希望用户访问任何到期的内容,将这个参数由0改为1就能够确定一个访问控制漏洞。
下面的URL允许用户访问内容管理系统,其中包含另外一些线索:
这里的.aspx文件扩展名表示这是一个ASP.NET应用程序;template参数很可能用于指定一个文件名;loc参数用于指定一个目录。很明显,文件扩展名.tpl证明了上述推论,而位置/default很有可能是一个目录名称。应用程序可能获得指定的模板文件,并将其内容包含在响应中。这些参数非常容易受到路径遍历攻击,允许攻击者读取服务器上的任何文件。
同样值得注意的是edit参数,它被设置为假。将这个值更改为真会修改注册功能,可能允许攻击者编辑应用程序开发者不希望用户编辑的数据。由ver参数并不能推断出任何有用的线索,但修改这个参数可能会使应用程序执行一组可被攻击者利用的不同功能。
最后,我们来分析以下请求,它用于向应用程序管理员提出问题:
)
#pic_center)同上,.php文件扩展名表示它使用PHP语言执行功能。而且,应用程序极有可能正通过接口与一个外部电子邮件系统连接;同时,它显示使用电子邮件的相关字段向那个系统提交用户可控制的输入。攻击者可利用这项功能向任何接收者发送任意邮件,并且,其中所有字段都易于遭受电子邮件消息头的注入攻击。
二、解析受攻击面
#pic_center)解析过程的最后一个步骤是确定应用程序暴露的各种受攻击面,以及与每个受攻击面有关的潜在漏洞。下面简要说明渗透测试员能够确定的一些主要行为和功能,以及其中最可能发现的漏洞。
- 客户端确认—服务器没有采用确认检查
- 数据库交互——SQL注入
- 文件上传与下载——路径遍历漏洞、保存型跨站点脚本
- 显示用户提交的数据——跨站点脚本
- 动态重定向——重定向与消息头注入攻击
- 社交网络功能——用户名枚举、保存型跨站点脚本
- 登录——用户名枚举、脆弱密码、能使用蛮力
- 多阶段登录——登录缺陷
- 会话状态——可推测出的令牌、令牌处理不安全
- 访问控制——水平权限和垂直权限提升
- 用户伪装功能——权限提升
- 使用明文通信——会话劫持、收集证书和其他敏感数据
- 站外链接——Referer消息头中查询字符串参数泄漏
- 外部系统接口——处理会话与/或访问控制的快捷方式
- 错误消息——信息泄漏
- 电子邮件交互——电子邮件与命令注入
- 本地代码组件或交互——缓冲区溢出
- 使用第三方应用程序组件——已知漏洞
- 已确定的Web服务器软件——常见配置薄弱环节、已知软件程序缺陷。