实验使用session登陆的php demo源码进行测试,源码下载链接

使用前需要先将数据库文件cms.sql导入到cms数据库(没有就先创建一个),默认有两个账户:admin/123456,admin1/admin

session覆盖简介

session覆盖攻击是一种非常流行的针对session的攻击方式,攻击者通过截获正常用户在某个网站的session id,就可以模仿这个用户,实现下一步的攻击。通常会被用作恶意重置用户的密码。

session覆盖过程

使用浏览器访问我们的session源码网站目录,可以看到有账户、密码和密文的提交框

image-20200703163814695

先使用admin账户登录,并输入密文cxk后登录

image-20200703191218726

为了方便实验,在页面展示出了当前用户的session id

然后再打开另外一个浏览器,使用我们另外一个账号admin1登录,密文填写任意值

image-20200703191244473

这里使用另外一个浏览器是因为,在我们登录账号的时候,由于session的原因,浏览器会保存我们当前账号的登陆状态,如果不退出浏览器或者退出账号,就一直处于当前账号的登陆状态,无法登录进其他账号

打开BurpSuite对admin1进行拦截,刷新页面,可以在BurpSuite里看到admin1的session id

image-20200703191412156

将admin的session id改到在admin1抓的包中,然后点击Forward

image-20200703191459981

可以看到,我们在admin1账户下看到了admin账户下的密文信息

image-20200703191628755

至此,我们的session覆盖实验就成功了

利用seesion覆盖实现密码重置

如果某个网站对密码重置的流程不做过多的校验的话,可以使用session覆盖的方法对其他用户的密码进行恶意重置。具体流程如下:

  1. 首先在网站注册一个自己的账号,并进入到密码重置流程中

  2. 继续重置流程,直至完成邮箱或者手机号校验(只剩填写新密码这一步)

  3. 在浏览器另开一个标签,进入另一个密码重置的页面

  4. 在输入完要攻击的账号信息,等服务器确认了你要恶意重置的账号后,再切换到第二步中填写新密码的页面

  5. 输入设置的新密码并提交就可以实现对其他账号的密码重置

注意这种利用session覆盖导致的密码重置漏洞并非所有网站都存在

参考:某网session覆盖导致重置密码漏洞