DVWA靶机:172.16.12.10
windos攻击机:172.16.12.7
kali攻击机:172.16.12.30
实验步骤:
一、Low级
WeakSessionIDs:
密码与证书等认证手段,一般仅仅用于登录(Login)的过程。当登陆完成后,用户访问网站的页面,不可能每次浏览器请求页面时都再使用密码认证一次。因此,当认证完成后。就需要替换一个对用户透明的凭证。这个凭证就是SessionID。
当用户登陆完成后,在服务器端就会创建一个新的会话(Session),会话中会保存用户的状态和相关信息。服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。为了告诉服务器应该使用哪一个Session,浏览器需要把当前用户持有的SessionID告知服务器。
SessionID一旦在生命周期内被窃取,就等同于账户失窃。同时由于SessionID是用户登录之后才持有的认证凭证,因此黑客不需要再攻击登陆过程(比如密码)
1、源码分析
<?php $html = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { if (!isset ($_SESSION['last_session_id'])) { $_SESSION['last_session_id'] = 0; } //服务器每次生成的session_id加1给客户端 $_SESSION['last_session_id']++; $cookie_value = $_SESSION['last_session_id']; setcookie("dvwaSession", $cookie_value); } ?>
从服务端的代码端可以看出,SessionID只是从0开始累加,所以可以较容易的猜测出别人的SessionID。
而且在Burpsuite中使用Sequencer模块也可以进行流量分析,显示
打开BP拦截,点弱口令界面的生成
拦截如下,dvwasession=1
再次生成,抓包如下,session变成2
我们对比每次生成后抓包发现,cookie值中只有session值会变化,后面的内容则不会变化
2、漏洞复现
打开bp抓包,访问弱口令靶机,在弱口令界面点生成,并复制这个url备用
抓包如下
我们复制这段cookie
111=dvwaSession=2; PHPSESSID=bh2qf1c60edcd3il23olcm8q12; security=low
清除cookie缓存,退出火狐浏览器
再次火狐浏览器,按F12调出hackbar(需要提前安装),把URL和cookie复制进去,点击Excute
没有输入账号密码直接登录了
也就是说我们只要猜到sessionID,就一直绕过用户名密码
二、Medium级
1、源码分析
<?php $html = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { $cookie_value = time(); //返回当前时间的 Unix 时间戳,并格式化为日期: time() 函数返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数 setcookie("dvwaSession", $cookie_value); } ?>
从服务器端的代码来看,将SessionID的值改成了当前的时间,看起来比low的随机了点,但是经过连续的收集后就很容易发现其中的规律。
说白了,和自增1没啥区别,说白了就是从1970年到现在的秒数,那不也是一秒一秒自增
2、漏洞复现
点生成,抓包
通过设置时间戳,可知诱骗受害者在某个时间点基进行点击
复制刚才的devwasession值 1635307131
打开时间戳(Unix timestamp)转换工具 - 在线工具 时间戳转换工具,把刚才复制的值粘贴进去,点击转换,就出来dvwa登录时间了
然后在下一行伪造一个靠后几分钟的时间,点击转换,出现新的值
把新值在BP中修改,然后复制整个cookie
111=dvwaSession=2; dvwaSession=1635307440; PHPSESSID=bh2qf1c60edcd3il23olcm8q12; security=medium DNT: 1
再复制刚才访问的url http://172.16.12.10:81/vulnerabilities/weak_id/
清除火狐浏览器缓存,退出重新打开火狐浏览器,按F12
把url和cookie值粘贴进去,直接登录,不要账号密码,成功绕过
三、High级
1、源码分析
<?php $html = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { if (!isset ($_SESSION['last_session_id_high'])) { $_SESSION['last_session_id_high'] = 0; } $_SESSION['last_session_id_high']++; $cookie_value = md5($_SESSION['last_session_id_high']); //setcookie(name,value,expire,path,domain,secure,httponly) 参数 描述 name 必需。规定cookie的名称。 value 必需。规定cookie的值。 expire 可选。规定cookie的有效期。 path 可选。规定cookie的服务器路径。 domain 可选。规定cookie的域名。 secure 可选。规定是否通过安全的HTTPS连接来传输cookie。 httponly 可选。规定是否Cookie仅可通过HTTP协议访问。 setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false); } ?>
这里将cookie的值进行了md5计算,并且还设置了期限之类进一步增加
SessionID的安全性,但不足的是进行md5散列的值是0的累加,若有经验的人在多次尝试后,很容易看出来其中的规律。
2、漏洞复现
点生成抓包
复制全部,右键点击,选择发送给Repeater
点重发器——发送, 发现服务器颁发的sessionID
复制c4ca4238a0b923820dcc509a6f75849b,打开md5在线解密破解,md5解密加密解密
然后在burp中改cookie参数,然后复制整个cookie
清除火狐浏览器缓存,重新打开,按F12打开hackerbar
,把cookie和url复制进去
111=dvwaSession=2; dvwaSession=1; PHPSESSID=bh2qf1c60edcd3il23olcm8q12; security=low
http://172.16.12.10:81/vulnerabilities/weak_id/
不用账号密码成功登录,绕过成功
四、Impossible级
1、源码分析
<?php $html = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { //随机数+时间戳+固定字符串"Impossible",再进行sha1运算 $cookie_value = sha1(mt_rand() . time() . "Impossible"); setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true); } ?>
mt_rand()使用MersenneTwister算法返回随机整数。再上这次使用了
SHA1,使猜测破解机率大大减小