十三、Weak Session IDs - 弱会话IDs
原理
用户登录后,在服务器就会创建一个会话(Session),叫做会话控制,接着访问页面的时候就不用登录,只需要携带 Session 去访问。SessionID 作为特定用户访问站点所需的唯一内容,如果能够计算或轻易猜到该 SessionID,则攻击者将可以轻易获取访问权限,无需登录密码直接进入特定用户界面,进而进行其他操作。
用户访问服务器的时候,在服务器端会创建一个新的会话,会话中会保存用户的状态和相关信息,用于标识用户。服务器端维护所有在线用户的 Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。为了告诉服务器应该使用哪一个 Session,浏览器需要把当前用户持有的 SessionID 告知服务器。用户拿到 SessionID 就会加密后保存到 cookies 上,之后只要 cookies 随着 http 请求发送服务器,服务器就知道你是谁了。SessionID 一旦在生命周期内被窃取,就等同于账户失窃。
Session 利用的实质:
由于 SessionID 是用户登录之后才持有的唯一认证凭证,因此黑客不需要再攻击登录过程(比如密码),就可以轻易获取访问权限,无需登录密码直接进入特定用户界面,进而查找其他漏洞如 XSS、文件上传等等。
1. Low
Low 级别的代码中,服务端对 SessionID 的生成策略非常简单,如果用户 Session 中的 last_session_id 不存在就设为0, 存在就直接在原来的基础上加 1
构造 payload: Cookie: dvwaSession=3; PHPSESSID=1g43p3nrv608n4v9tlo2o8bnqq; security=low
通过火狐浏览器的 hackbar,提交,选择 cookie 提交方式,为验证有效性,清除浏览器的 cookie 值,提交后发现直接登录 dvwa,绕过密码验证。
2. Medium
Medium 级别源码中的 SessionID 是基于时间戳生成的,关于时间戳转换,直接查找转换器进行转换即可
通过设置时间戳,可以诱导受害者在某个时间点进行点击
3. High
High 级别使用了 PHP setcookie() 函数来设置 cookie
setcookie(name,value,expire,path,domain,secure,httponly)
参数 描述
name 必需。规定cookie的名称。
value 必需。规定cookie的值。
expire 可选。规定cookie的有效期。
path 可选。规定cookie的服务器路径。
domain 可选。规定cookie的域名。
secure 可选。规定是否通过安全的HTTPS连接来传输cookie。
httponly 可选。规定是否Cookie仅可通过HTTP协议访问。
抓包发现,dvwaSession 值很像 md5 加密,使用 md5 解密,发现是对从零开始的整数进行加密,构造 payload 提交即可。
防护方法
- 使用强 SessionID,随机数,时间戳,加密算法混合等
- cookie 机制