XVWA Session Flaws

0x00 Session Flaws

Web applications require better session management to keep tracking the state of application and it’s users’ activities. Insecure session management can leads to attacks such as session prediction, hijacking, fixation and replay attacks.

不安全的会话管理可以导致一些攻击,比如会话预测、会话劫持、会话固定以及会话重放攻击

会话预测

会话预测攻击(session prediction attack)重点在于预测允许攻击者绕过应用程序身份验证模式的会话ID值。

通过分析和理解会话ID的生成过程,攻击者可以预测一个有效的会话ID值来获得应用的访问权限。

  • 首先,攻击者需要收集一些有效的会话ID值以用于辨识认证的用户。
  • 然后,他必须了解会话ID的结构,用于创建它的信息以及应用程序用来保护它的加密或散列算法。一些错误的实现使用由用户名或其他可预测信息组成的会话ID,如时间戳或客户端IP地址。
  • 在最坏的情况下,这些信息以明文形式使用,或者使用像base64编码这样的弱算法进行编码。
  • 另外,攻击者可以实施暴力攻击技术来生成和测试不同的会话ID值,直到他成功访问应用程序。
会话劫持

会话劫持攻击(session hijacking attack)利用了Web会话控制机制,该机制通常是被会话令牌管理的。

因为HTTP交流使用了许多不同的TCP连接进行通讯,因此web服务器需要一种辨识每个用户连接的方法。最有效的方法是基于Web服务器在完成对客户端的认证后向客户端的浏览器发送令牌。会话令牌通常由一个可变宽度的字符串组成,并且可以以不同的方式使用。

劫持攻击通过窃取或预测有效的会话令牌来破坏认证,以获得对Web服务器的未经授权的访问。会话令牌可能以不同的方式受到损害,最常见的是:

  • 可预测的会话令牌
  • 会话嗅探
  • 客户端攻击(XSS,恶意JavaScript代码,特洛伊木马等)
  • 中间人攻击
  • 浏览器中间人攻击
会话固定

会话固定攻击(session fixation attack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会话以成功冒充他人,造成会话固定攻击。

  1. 攻击者Attacker能正常访问该应用网站,应用网站服务器返回一个会话ID给他;

  2. 攻击者Attacker用该会话ID构造一个该网站链接发给受害者Victim;

  3. 受害者Victim点击该链接,携带攻击者的会话ID和用户名密码正常登录了该网站,会话成功建立;

  4. 攻击者Attacker用该会话ID成功冒充并劫持了受害者Victim的会话。

会话重放

会话重放攻击(session reply attack)又称重播攻击、回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。

我们监听http数据传输的截获的敏感数据大多数就是存放在cookie中的数据。其实在web安全中的通过其他方式(非网络监听)盗取cookie与提交cookie也是一种重放攻击。我们有时候可以轻松的复制别人的cookie直接获得相应的权限。

看源码

 <?php
 if(isset($_SESSION['user'])){
     echo "Welcome ". ucfirst($_SESSION['user']);
     echo "<br><br><a href='../../logout.php'>Logout</a>";
 }else{
     echo "You are not a logged in. <br>Please login and try again.";
 }
?>

这里直接输出的是会话的名字,得再去找一个login的源码

<?php
        session_start();
        $uname = $_POST['username'];
        $password = md5($_POST['password']);
        $ActiveUser = '';
        include_once('config.php');
        $sql = "select username from users where username=:username and password=:password";
        $stmt = $conn1->prepare($sql);
        $stmt->bindParam(':username',$uname);
        $stmt->bindParam(':password',$password);
        $stmt->execute();
        while($rows = $stmt->fetch(PDO::FETCH_NUM)){
                $ActiveUser = $rows[0];
        }
        if(!empty($ActiveUser)){
                $_SESSION['user'] = $ActiveUser;
        }
        header("Location: /xvwa/");
?>

可以看到$_SESSION就是从数据库当中查询到的username


0x01 漏洞利用

在这里插入图片描述
登陆前,再看登陆后。
在这里插入图片描述
还是一样的,通过这点就可以说明是产生会话固定和会话重放攻击的。

此时会个浏览器直接就此session就可以直接登陆了。

在这里插入图片描述
未登陆状态,用burpsuite改下cookie,主要是我这个浏览器的插件不能用了,有隐私窗口的也可以用隐私窗口。
在这里插入图片描述


0x02 修复建议

  1. 定期更改session id
  2. 更改session的名称
  3. 关闭透明化session id,透明化session id指当浏览器中的http请求没有使用cookies来制定session id时,sessioin id使用链接来传递;
  4. 将session id随机处理
发布了265 篇原创文章 · 获赞 266 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u014029795/article/details/105324301