0


iwebsec靶场 XSS漏洞通关笔记

前言

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:

1.反射性XSS

反射型XXS是一种非持久性的攻击,它指的是恶意攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的目的。

2.存储型XSS

存储型XSS又名持久型XSS,攻击的恶意代码会被存储在数据库、文件系统等存储介质,因为是永久存储所以功效持久。通常来讲攻击者可以把payload放在网站留言板、评论等位置,等用户访问网站并有匹配payload的行为时,即可触发攻击。

3.DOM型XSS

DOM XSS的XSS代码并不需要服务器解析响应的直接参与,触发XSS靠的就是浏览器端的DOM解析,可以认为完全是客户端的事情,无法通过WAF防护。

第01关 反射型XSS漏洞

1.打开靶场

2.源码分析

如下所示,未对传入参数name进行任何过滤,存在xss漏洞

<?php require_once '../header.php'; ?>
<html>
    <head>
        <title>反射型XSS漏洞</title>
    </head>
    <h2>反射型XSS漏洞</h2>
        <div class="alert alert-success">
            <p>/01.php?name=iwebsec </p>
        </div>
    <body>

<table class='table table-striped'>

<?php

    if(isset($_GET['name'])){
        $name=$_GET['name'];
        echo "<h2>"."Hello ".$name."<h2>";
    }else{
        
        exit();
    }
?>
</table>

很明显,这是一个反射型的XSS漏洞

3.渗透

传入参数<script>alert('ljn')</script>

iwebsec 靶场漏洞库iwebsechttp://iwebsec.com:81/xss/01.php?name=渗透成功,效果如下所示

第02关 存储型XSS漏洞

1.打开靶场

iwebsec 靶场漏洞库iwebsechttp://iwebsec.com:81/xss/02.php如下所示,这是一个留言板相关内容的网页

2.源码分析

如下所示对传入的参数name并未做任何过滤,具备XSS漏洞。

<?php

  require_once('../header.php');
  require_once('../sqli/db.php');
  ?>
<html>
    <head>
        <title>存储型XSS漏洞</title>
    </head>
    <h2>存储型XSS漏洞</h2>
        <div class="alert alert-success">
            <p>请输入你的留言信息</p>
        </div>
        <form  method="get">
        <input type="text" name="name">
<input type="submit" value="submit">
</form>
    <body>
  <?php
  if(isset($_GET['name'])){
    $name=$_GET['name'];
    $sql="INSERT INTO xss set name='$name'";
    $result=mysql_query($sql);
    
    $sql="SELECT * FROM xss";
    $result=mysql_query($sql);
    }
    else{
        exit();
    }
    if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th></tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
            
            echo "</tr>";
        }    
        echo "</table>";
    }
    else 
    {
    print_r(mysql_error());
    }
  
?>

同时对参数name使用SQL语句进行insert存储,关键源码如下

    $sql="INSERT INTO xss set name='$name'";
    $result=mysql_query($sql);

接下来再使用select查询语句将其展示出来,关键源码如下

    $sql="SELECT * FROM xss";
    $result=mysql_query($sql);

很明显这是具有存储型XSS漏洞,注入的XSS命令会永久存储到服务器,从而触发XSS漏洞。

4.渗透

方法1:

这里要注意的是,因为涉及到SQL语句,第一个SQL插入源码如下所示,闭合方式为单引号。

   $sql="INSERT INTO xss set name='$name'";

故而name的赋值不可以有单引号,故而如果想输出ljn,那么参数不能是<script>alert('ljn')</script>这是因为包含了单引号

<script>alert(/xss/)</script>

如下所示

渗透结果如下所示

方法2

因为使用SQL语句单引号闭合,故而可以选择使用双引号来进行渗透

<script>alert("hello ljn")</script>

在留言处输入参数后如下所示

如下所示,渗透成功

方法3

<script>alert(20221128)</script>

如下所示渗透成功

第03关 DOM XSS漏洞

1.打开靶场

iwebsec 靶场漏洞库iwebsechttp://iwebsec.com:81/xss/03.php

2.源码分析

如下代码中存在domxss函数,可能存在dom型xss漏洞

<?php require_once '../header.php'; ?>
<html>
    <head>
        <title>DOM XSS漏洞</title>
    </head>
    <h2>DOM XSS漏洞</h2>
        <div class="alert alert-success">
            <p>请输入内容 </p>
        </div>
    <body>

<table class='table table-striped'>

<script>
function domxss()
{

    var str = document.getElementById("input").value;
    document.getElementById("output").innerHTML = str;
}
</script>

<h2 id = "output"></h2>

<input type="text" id="input" value="" />
<input type="button" value="submit" onclick="domxss()" />
</table>

3.渗透分析

输入参数,判断是否有过滤信息

'"<>?%66666ljn

在当前页面元素,搜索框中输入关键字搜索ljn,寻找刚刚输入的内容,很明显所有字符都还在,并不存在过滤单引号和双引号等特殊字符, 并将输入内容显示到页面中。

接下来分析一下闭合关系,查看器中的内容如下,于是可以输入完整的xss语句,通过将内容输出到页面,再出发显示到页面的内容执行xss脚本。

<h2 id="output">'"&lt;&gt;?%66666ljn</h2>

3.渗透过程

(1)渗透方法1

基于此可以构造闭合,参数输入xss恶意脚本(点击ljn后输出你好)

<li/onclick=alert('你好')>ljn</li>

输入后提交如下所示

在页面的ljn处点击鼠标,则弹出你好,渗透成功

(2)渗透方法2

参数为xss恶意脚本(因图标执行错误而出发弹框输出ljn)

<img src=1 onerror=alert('ljn')>

如下所示,渗透成功

(3)渗透方法3

参数为xss恶意脚本(鼠标移动到图标后输出ljn)

<img src="#" onmouseover="alert('ljn')">

提交后如下图所示

当鼠标移动到图标处时,弹出弹框,渗透成功

第04关 XSS修复示例

1.打开靶场

iwebsec 靶场漏洞库iwebsechttp://iwebsec.com:81/xss/04.php

2.源码分析

如下所示对参数使用了htmlspecialchars函数过滤,这样就可以防范恶意的xss攻击

<?php require_once '../header.php'; ?>
<html>
    <head>
        <title>XSS修复示例</title>
    </head>
    <h2>XSS修复示例</h2>
        <div class="alert alert-success">
            <p>/04.php?name=iwebsec </p>
        </div>
    <body>

<table class='table table-striped'>

<?php

    if(isset($_GET['name'])){
        $name=$_GET['name'];
        echo "<h2>"."Hello ".htmlspecialchars($name)."<h2>";
    }else{
        
        exit();
    }
?>
</table>

3.渗透实战

再次尝试第01关渗透成功的内容

<script>alert('ljn')</script>

如下所示,渗透失败,说明xss漏洞修复成功

标签: xss 安全 web安全

本文转载自: https://blog.csdn.net/mooyuan/article/details/128080345
版权归原作者 mooyuan天天 所有, 如有侵权,请联系我们删除。

“iwebsec靶场 XSS漏洞通关笔记”的评论:

还没有评论