2.失效的身份认证和会话管理
认证和授权
认证的目的:认出用户是谁。
授权的目的:决定用户能够做什么。
认证分类:
- 单因素认证(例如只需输入口令)
- 双因素认证(例如同时需要口令和Ukey证书)
- 多因素认证(例如不仅需要口令和Ukey证书,还可能需要身份证或者健康证等)
认证手段:
- 密码(成本最低,但存在弱口令问题)
- 动态口令
- 手机验证
- 数字证书
- 单点登录(openid,如登录支付宝,不仅可以访问支付宝,还可以访问淘宝和京东等)
会话管理
认证成功后,认证凭证的管理方式。
会话管理方式:
- cookie based方式
- 服务器端session方式
认证常见问题:
会话管理问题:
认证和会话管理漏洞防御:
使用burp suite暴力破解可以添加Payload处理:
3.敏感信息泄露
敏感信息泄露涉及两个方面:
- 存储
- 传输过程 https
常见敏感信息
运维层面:
- 日志
- 备份文件
- 配置文件
- rebots
应用层面:
- 用户信息
- 通信录
- 邮箱
4.XML外部实体(XXE)
利用方式:
可以通过构造XML引入外部实体
- 引入本网站服务器的系统命令文件路径,从而查看服务器文件。
- 引入内网的另一台服务器的地址,扫描其是否存在,端口是否开放等。
本质原理:
利用XML中Xpath语法结构,引入外部实体。
5.失效的访问控制
表现形式:
- 水平越权
- 垂直越权
6.安全配置错误
常见案例:
- 开启不必要服务:网站只开启80端口即可,但还开启了3306或者21等端口。
- 默认账户没有被改变:安装网络设备或应用程序的默认账户没有改,导致攻击者可直接用默认账户登录。
- 目录索引在服务器上未被禁用:网站管理员违规开启了目录索引,正常情况下找不到网页应该回显404,但开启后会显示所有目录,导致攻击者随意下载服务器文件。
- 应用服务器自带的示例应用程序没有从生产服务器中删除:安装服务后,默认会有install文件,里面包含数据库的配置文件,导致攻击者渗透提权时可以获取到数据库的账号密码等信息。
- 默认开启上传文件权限:上传shell。
- 软件没有及时更新:网站用的ThinkPHP5的框架,但框架爆出漏洞,没有及时更新框架,导致攻击者利用漏洞。
- 安装不必要的功能:mysql装完后会默认有phpmyadmin的网页管理界面,没有及时删除,导致攻击者直接利用。
- 错误信息未屏蔽:SQL注入的报错回显。
利用网站的配置错误上传shell:
- 打开IIS的web扩展服务,开启WebDAV。
- 网站属性---主目录,勾选脚本资源访问和写入。
- 使用老兵的IIS写权限利用工具,POST上传含有shell的txt文件,上传成功后选择COPY?将上传的txt文件转换成asp文件,即可完成上传shell。
8.不安全的反序列化
JBoss等中间件受影响。
9.使用含有已知漏洞的组件
ThinkPHP框架和Struts等框架漏洞。
10.不足的日志记录和监控
日志记录不足或者未开启,日志和服务在一台服务器上,攻击者可能会在攻击后删除日志记录。
session Fixation攻击:(会话固定攻击)
概述:
利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会话以成功冒充他人,造成会话固定攻击。
攻击流程图:
攻击步骤:
- 攻击者Attacker能正常访问该应用网站;
- 应用网站服务器返回一个会话ID给他;
- 攻击者Attacker用该会话ID构造一个该网站链接发给受害者Victim;
- 受害者Victim点击该链接,携带攻击者的会话ID和用户名密码正常登录了该网站,会话成功建立;
- 攻击者Attacker用该会话ID成功冒充并劫持了受害者Victim的会话。
攻击分析:
攻击的整个过程,会话ID是没变过的,所以导致此漏洞。
攻击修复
1、登录重建会话
每次登录后都重置会话ID,并生成一个新的会话ID,这样攻击者就无法用自己的会话ID来劫持会话,核心代码如下。
// 会话失效
session.invalidate();
// 会话重建
session=request.getSession(true);
2、禁用客户端访问Cookie
此方法也避免了配合XSS攻击来获取Cookie中的会话信息以达成会话固定攻击。在Http响应头中启用HttpOnly属性,或者在tomcat容器中配置。