DVWA靶场 – Weak Session IDs

blog 31
DVWA靶场 – Weak Session IDs

标题简介

Weak Session IDs(弱会话id),当用户登录到页面时,就随之创建了一个session,称为会话控制,接着我们每次访问页面的时候,就不用再次输入密码重新进行验证了。只需要携带者session去请求即可。为了用户的安全性考虑,session也有一定的存活期,当存活期已过,则会清除该用户的session,这时就需要重新进行登录。之后重新获取新的sessionsessioncookie的区别在与cookie存放在客户端,而session存放在服务端。他们两者都是记录用户状态的机制。

low级别

使用burpsuite进行抓包,可以观察到,当我们每次在页面点击Generate的时候,对应cookiedvwaSession的值就会加1。那么这个session就是一个有过滤的session直接爆破该值即可。

DVWA靶场 – Weak Session IDs

那么我们打开一个Firefox浏览器,这里将dvwasession设置为6,之后cookie保持未登录时自生成的cookie,之后直接访问index.php,发现无法绕过认证。

DVWA靶场 – Weak Session IDs

假设我们获取了该网站的cookie,那么我们即可直接使用cookie进行免密登录。不需要设置dvwasession就可以。

DVWA靶场 – Weak Session IDs

我们直接来看下后端的代码

DVWA靶场 – Weak Session IDs

代码只有这些,大概思想就是我们没有设置last_session_id的时候,就会设置该值默认为0。之后我们每刷新一次页面,该sessionid就会自身增1,并且该sessionid被设置为cookie中的一部分。

medium级别

当我们在此页面刷新的时候,会随之产生一个cookie。该cookiedvwaSession

DVWA靶场 – Weak Session IDs

根据cookie的值形式来看,这应该是一个时间戳。时间戳是从1970年1月1日0:00秒起到现在一共经历了多少秒。(如果设置的dvwaSession值还是上一等级的值,请尝试清除浏览器的cookie)

DVWA靶场 – Weak Session IDs

通过时间戳转北京时间网站,将其转换为北京时间。那么这种sessionid也是可以被暴力枚举出来的。

下面我们来查看关级别的后端代码:

DVWA靶场 – Weak Session IDs

代码很简单,只是在我们每次点击Generate的时候,会随之获取当前时间的时间戳。之后将其设置为cookie

high级别

DVWA靶场 – Weak Session IDs

这里可以看到,直接将dvwaSession进行了加密,尝试使用cmd5.com网站进行解密。

DVWA靶场 – Weak Session IDs

发现枚举出来的数字为8,那么为什么为8呢?这里我再次点击generate重新获取dvwaSession

经过多次尝试(因为我点击generate的时候,cookie里面就没有dvwaSession了,考虑可能是因为靶场的问题)之后又获取到了。

DVWA靶场 – Weak Session IDs

继续拿到网站中进行枚举:

DVWA靶场 – Weak Session IDs

枚举的结果为21。直接查看后端的源代码:

DVWA靶场 – Weak Session IDs

发现这里就是每次刷新last_sessio_id_hight的值自身加1,初始值为0,之后又将其进行md5()加密设置了cookie,并且cookie名为dvwasession,那么攻击者只需要将枚举的数字进行md5加密之后枚举即可。

接下来我们说下setcookie()函数各参数的作用:

参数1为cookie的名称,代码中为dvwaSession,参数2就是cookie的值,代码中为变量$cookie_value的值,参数3指定的是cookie过期时间,代码中为当前的时间加上3600秒。也就是一小时后过期。参数4为cookie有效值的路径,代码中只对当前页面有效。参数5为cookie有效的域名或者子域名。这里通过$_SERVER['HTTP_HOST']获取到了当前的域名,参数6为是否仅通过HTTPS传送给客户端,参数7表示是否仅通过HTTP传送给用户。

impossible级别

直接审计源码:

DVWA靶场 – Weak Session IDs

这里将dvwaSession的值经过sha1()函数的散列值加密,并且使用mt_rand()生成一个随机数。该函数如果不指定参数的话,会从0到mt_getrandmax()函数规定的最大值中随机取一个值,并且追加了当前的时间戳。并且再次追加了字符串(Impossible)进行加密。

DVWA靶场 – Weak Session IDs

那么加密出来的值就为如上。使用解密网站进行解密,也是解不出来的,复杂性较高。

DVWA靶场 – Weak Session IDs
DVWA靶场 – Weak Session IDs

可以看到,比较著名的密文枚举网站,都不能进行破解。由于dvwaSession的复杂性,防止了其被暴力枚举的可能性。

md5和sha1加密都是不可逆的,也就是说无法通过密文解析到明文,网上的解密网站也都是经过对应明文的加密,将加密后的密文,写入到了数据库,之后我们通过输入密文,就有可能找到对应的明文。

分享