[红日安全]Web安全Day12 - 会话安全实战攻防
字数 2000 2025-08-18 11:39:22
Web安全实战:会话安全攻防详解
1. 会话安全概述
1.1 会话机制原理
Session会话机制是一种服务器端机制,使用类似哈希表的结构保存信息。工作流程如下:
- 服务器检查客户端请求是否包含会话ID
- 如果包含,则检索已有会话(无法检索则创建新会话)
- 如果不包含,则为客户端创建新会话并生成会话ID
- 会话ID应是不重复且难以复制的字符串
- 会话ID返回给客户端保存
1.2 常见会话安全问题
1.2.1 会话预测
- 通过分析会话ID生成过程预测有效会话ID值
- 利用预测的会话ID获取应用访问权限
1.2.2 会话劫持
- 获取用户Session ID后使用该ID登录网站
- 获取目标用户的操作权限
1.2.3 会话重用
- 用户退出系统后服务器端Session未失效
- 攻击者可利用此Session继续发送请求
- 测试方法:登录后注销会话,重放登录数据包仍可登录
1.2.4 会话失效时间过长
- 会话失效时间设置过长
- 导致服务器性能受损且可被多次利用
- 测试方法:系统登录后长时间不失效仍可正常使用
1.2.5 会话固定
- 用户进入登录页面但未登录时已产生session
- 登录后session ID不变,不建立新session也不销毁原session
- 攻击者可诱使受害者使用特定session登录
- 测试方法:系统登录前后用户的session保持不变
2. 会话安全漏洞的危害
攻击者可利用这些漏洞绕过身份验证,实现权限提升。
3. 测试方法与靶场实践
3.1 测试靶场介绍
3.1.1 DVWA靶场
- 简介:PHP+MySQL编写的漏洞检测和教学程序
- 安装步骤:
- 下载地址:http://www.dvwa.co.uk/
- 解压到WWW目录,配置本地域名
- 修改config.inc.php.dist中的数据库密码,去掉.dist后缀
- 访问配置的本地域名,点击"Create Database"
- 使用默认管理员账户登录:admin/password
3.1.2 WebGoat靶场
- 简介:OWASP研制的Java web漏洞实验程序
- Docker安装:
apt install apt-get install docker.io # 安装Docker docker --version # 查看版本 docker pull webgoat/webgoat-7.1 # 下载容器 docker run -p 8080:8080 -t webgoat/webgoat-7.1 # 运行 - 访问地址:http://127.0.0.1:8080/WebGoat/login
3.2 DVWA靶场手工测试
3.2.1 Low级别测试
-
测试过程:
- 使用Firefox登录admin/password
- 设置安全等级为Low
- 在Weak Session IDs页面多次点击generate
- 观察dvwasessionid每次+1
- 构造Cookie:
dvwaSession=1; PHPSESSID=...; security=low
-
源码分析:
if (!isset ($_SESSION['last_session_id'])) { $_SESSION['last_session_id'] = 0; } $_SESSION['last_session_id']++; $cookie_value = $_SESSION['last_session_id']; setcookie("dvwaSession", $cookie_value);
3.2.2 Medium级别测试
-
测试过程:
- 设置安全等级为Medium
- 生成的dvwasessionid为当前时间戳
- 构造时间戳范围内的Cookie
-
源码分析:
$cookie_value = time(); setcookie("dvwaSession", $cookie_value);
3.2.3 High级别测试
-
测试过程:
- 设置安全等级为High
- 生成的dvwasessionid为Low级别的MD5加密值
- 构造MD5加密后的Cookie
-
源码分析:
$_SESSION['last_session_id_high']++; $cookie_value = md5($_SESSION['last_session_id_high']); setcookie("dvwaSession", $cookie_value, time()+3600, ...);
3.2.4 Impossible级别测试
-
测试过程:
- 生成的dvwasessionid为随机数+时间戳的sha1加密值
- 难以预测和破解
-
源码分析:
$cookie_value = sha1(mt_rand() . time() . "Impossible"); setcookie("dvwaSession", $cookie_value, time()+3600, ...);
4. CMS实战演练
4.1 XiaoCMS会话固定漏洞
4.1.1 CMS介绍
PHP+Mysql架构的轻量级CMS,适合企业站和博客。
4.1.2 安装步骤
- 下载地址:http://www.a5xiazai.com/php/108347.html
- 放入www目录
- 填写数据库信息完成安装
4.1.3 漏洞分析
- 漏洞文件:
core/library/session.class.php - 漏洞代码:
if(isset($session_id)){ session_id($session_id); } - 漏洞成因:直接使用传入的session_id而不重新生成
4.1.4 漏洞利用
- 注册普通管理员账号quan
- 获取quan的session_id
- 构造POST请求:
POST /admin/?xiaocms session_id=57049dc90ccd7226302dc8efbb8f2ce0 - 或构造HTML表单:
<form action="http://quan.xiaocms.net/admin/" method="post"> <input type="hidden" name="session_id" value="57049dc90ccd7226302dc8efbb8f2ce0"> <input type="submit"> </form>
4.2 YxCMS会话固定漏洞
4.2.1 CMS介绍
PHP+mysql的企业建站系统。
4.2.2 安装步骤
放入www目录,按向导完成安装。
4.2.3 漏洞分析
- 漏洞文件:
yxcms/protected/include/lib/common.function.php - 漏洞代码:
if(isset($sessionid)){ session_id($sessionid); } - request函数支持多种参数传输方式(GET/POST等)
4.2.4 漏洞利用
- 注册普通会员quan
- 获取quan的PHPSESSID
- 访问URL:
http://quan.yxcms146.net/index.php?r=admin/index/index&sessionid=5fcb75b7b1cda3d797b1cf7ac1cc0be1
5. 防御方法
- 防篡改验证:在Cookie值后添加防篡改验证串
- 及时清空会话:用户退出后服务器端应清空Session
- 设置合理有效期:强制设置Session存活时间,超时销毁
- 重新生成SessionID:认证信息或权限变更时重新生成SessionID并失效旧会话