天天看点

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

XSS Challenges stage1-10闯关详解

文章目录

  • XSS Challenges stage1-10闯关详解
    • 0x01 xss challenges 闯关环境准备
      • 1.XSS challenges介绍
      • 2.配置burpsuite 加载证书用于截断 HTTPS协议
    • 0x02 手动挖掘XSS漏洞 Stage # 1-10 关
      • 1.stage #1 无过滤的XSS注入
        • 1.1 使用闭合标签方式进行反射型 XSS 注入
      • 2.Stage #2 属性中的 XSS 注入
        • 2.1 使用闭合的input标签方式进行注入
        • 2.2 在input标签属性中注入事件
      • 3.Stage #3 选择列表中的 XSS 注入
      • 4.Stage #4 在隐藏域中注入 XSS
        • 4.1 查看隐藏域传递数值的效果
      • 5.Stage #5 限制输入长度的解决方法
      • 6.Stage #6 限制输入 <> XSS的注入
      • 7.Stage #7 限制输入引号的 XSS 注入
      • 8.Stage #8 JavaScript伪协议
      • 9.Stage #9 UTF-7编码注入(跳过,不常用)
      • 10.Stage #10 绕过关键字domain

0x01 xss challenges 闯关环境准备

1.XSS challenges介绍

xss challenges 和 sqli-labs 一样是一个闯关式的安全技术联系平台,它是由一个日本的安全研究员开发的

官方网址 https://xss-quiz.int21h.jp/

2.配置burpsuite 加载证书用于截断 HTTPS协议

首先打开burpsuite 开始监听:

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

使用插件配置火狐代理

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

浏览器访问 http://burp/创建证书

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

保存在本地

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

浏览器导入证书

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解
XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

选择导入的证书

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解
XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

0x02 手动挖掘XSS漏洞 Stage # 1-10 关

1.stage #1 无过滤的XSS注入

document.domain 该属性是一个只读的字符串,包含了再入当前文档的 web 服务器的主机名

首先测试一下页面的逻辑结构

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

搜索框中进行搜索信息,在页面下方会显示出搜索内容

按 F12 分析源码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

我们输入的信息会被加载到页面中,我们加载的

<script>alert(document.domain);</script>

F12 看一下它在代码中的位置

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解
XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

按F12 检查查看代码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

确实插入在b标签中,正常来说我们这样已经注入成功了

1.1 使用闭合标签方式进行反射型 XSS 注入

他和我们学习 SQL 注入时很像,可以使用对应的闭合方式进行插入代码

b 标签的结构

<b>

文本信息

</b>

作用是加粗文本信息

我们搜索时使用

</b>

对 b 标签进行闭合,在输入栏,输入

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解
XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解
XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

可以看到b标签成功闭合了,b标签后的JavaScript代码执行了

2.Stage #2 属性中的 XSS 注入

2.1 使用闭合的input标签方式进行注入

输入测试数据,查看信息

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

分析源码:

fengzilin的为位置是在input中的 value 属性中,我们注入payload的到value 代码中不会触发JavaScript脚本,所以我们要闭合value将js代码插入到属性外面

原代码:

<input type="text" name="p1" size="50" value="fengzilin">

使用

">

闭合标签并插入js代码,在输入框中输入代码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

成功了

我们查看源代码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

发现input标签被闭合了,然后执行了,js代码从而弹出弹框,会发现">并未被执行,当做普通文本信息打印出来了

2.2 在input标签属性中注入事件

事件是指:可以是HTML事件触发浏览器中的行为,比如说当用户点击某个HTML元素时启动一段JavaScript

1)onmouseover事件:当鼠标指针移动到元素之上时触发脚本

构造payload

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解
XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

分析:

可以看到当鼠标移动到输入框的时候就会触发 XSS,所以事件就需要用户手动触发才能够被执行

3.Stage #3 选择列表中的 XSS 注入

查看页面结构,表框中输入 fengzilin

在表框中输入 fengzilin 会在下面提示内容和右侧的搜索区域

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

发现是在b标签中

我们输入测试代码,判断是否过滤

输入发现没有弹框,查看代码发现<括号被转为实体符号了。

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

查看网页代码

HTML表单用于搜集不同类型的用户输入,我们输入的信息都是以表单的方式提交到服务器

Form表单

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

代码中定了一个文本输入为 p1 然后使用 select 元素创建了一个下拉列表为 p2

下面我们对选择的列表进行注入

我们在输入的时,使用burpsuite截取数据包对右侧选择列表进行注入

开始截取,在输入框中 输入fengzilin

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

抓取到的内容我们看到提交了2个参数p1和p2,p1是我们输入的内容,p2是下拉菜单的选线

将截取的数据包,进行篡改

将p2的字段值改为:

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

点击发送会发现弹出了,弹框说明代码执行成功了

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

4.Stage #4 在隐藏域中注入 XSS

隐藏域是用来收集或发送不可见元素的信息,对于网页的访问者来说,隐藏域是看不见的,当表单提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上

4.1 查看隐藏域传递数值的效果

在输入框中输入fengzilin 然后提交

抓取的数据包

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

正常我们可以看到的提交的数据是 p1=fengzilin,p2=Japan,但是实际上还提交了一个p3=hackme

为什么需要将参数隐藏呢,原因很简单,这样可以避免在 URL 中传递参数,传递的参数用户不可见

Stage #4 和 Stage #3 的页面结构是一致的所有我们直接查看源代码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

页面中存在一个 p3参数 type类型为 hidden,闭合方式为双引号,所以p3为隐藏参数

我们将之前用 burpsuite 进行截断数据包进行分析

p3 的值为 hackme 我们直接插入代码

"><script>alert(document.domain)</script>

,这里必须使用 "> 闭合,这样XSS代码才会被执行

我们直接在截断的POST请求中修改p3参数然后点击放行

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

发现弹窗了

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

按F12 查看注入情况

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

5.Stage #5 限制输入长度的解决方法

地址:https://xss-quiz.int21h.jp/stage–5.php?sid=65c87b362d7102962568ce4c3059851b5d7da80f

输入测试代码 fengzilin 按F12查看页面源码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

构造payload

"><script>alert(document.domain)</script>
           

代码中定了文本框。类型为 text,最多允许输入15个字符

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

我们修改input标签的属性 maxlength 修改为150 按回车确定·

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

成功弹出

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

6.Stage #6 限制输入 <> XSS的注入

https://xss-quiz.int21h.jp/stage-no6.php?sid=804e625275e00c53cb52d87d2046ebc50253e6c3

HTML 时间中常见的鼠标事件:

属性 描述
onclick script 当单击鼠标时运行脚本
ondbclick script 当双击鼠标时运行脚本
ondrag script 当拖动元素时运行脚本
ondragend script 当拖动操作时结束运行脚本
ondragenter script 当元素被拖动至有效的拖放目标时运行脚本
ondragleave script 当元素离开有效拖放目标时运行脚本
ondragover script 当元素被拖动至有效拖放目标上方式运行脚本
ondragstart script 当拖动操作开始运行脚本
ondrop script 当被拖动元素正在被拖放时运行脚本

更多事件参考https://www.runoob.com/tags/ref-eventattributes.html

第一步:输入测试数据,寻找位置

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

第二步:构造payload

"><script>alert(document.domain)</script>
           
XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

测试发现<>被转换为实体符号了,那就不能使用括号了,使用 " 引号来构造payload

123 " οnmοusemοve="alert(document.domain)"
           

成功弹出,当鼠标移到输入框就会触发payload

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

查看源码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

7.Stage #7 限制输入引号的 XSS 注入

Stage #7地址:

https://xss-quiz.int21h.jp/stage07.php?sid=27d0401f027248136e0baa63dcb51b0dc152dd20

7和6的页面一样,我们输入同样的payload按F12 查看效果

123 " οnmοusemοve="alert(document.domain)"
           
XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

在输入测试数据发现,数据做了处理,在传输数据发现单引号,会自动加入一个双引号

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

我们根据这个构造payload,我们使用空格对payload进行分割

123 οnmοuseοver=alert(document.domain)
           

成功弹出

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

查看源码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

8.Stage #8 JavaScript伪协议

Stage #8 地址

https://xss-quiz.int21h.jp/stage008.php?sid=e919fe3fd372837a81b8d4dd90089d5f91c8bc4c

表单输入数据查看构造

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

测试数据发现,我们输入的地址都被转换为了

<a>

标签 并生成了跳转属性,我们结合 Stage #8 输入一个 URL 在页面中添加一个 URL,这样我们可以输入一个 JavaScript:伪协议用户点击链接直接调用 JavaScript 代码,触发XSS攻击

构造payload

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

点击JavaScript才会触发XSS

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

9.Stage #9 UTF-7编码注入(跳过,不常用)

第Stage #9 https://xss-quiz.int21h.jp/stage_09.php?sid=9b2d9e4488cc52c31d589d6f94a045ce6f25be08

直接使用payload

οnclick="alert(document.domain)"
           

在 Hint 标签后面添加然后点击 Hint ,就会触发

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

10.Stage #10 绕过关键字domain

Stage #10 地址:

https://xss-quiz.int21h.jp/stage00010.php?sid=14b1749ba6ca454be3aae20a98594ee379ced0f6

输入测试数据

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

构造payload

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

发现domain 被替换了,我们尝试绕过进行注入

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

成功

查看源码

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

编码绕过

我们可以使用 base64 编码进行绕过站点防护机制

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

输入

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

没有执行成功

我们在 SQL 注入时服务器端已经配置了解密函数进行解密,我们这里页面中是不会对我们加密的字符串进行解密的,所以直接使用加密后的代码是不能够被执行的,我们需要使用解密函数对字符串进行解密再进行执行

我们修改 payload

atob()函数将 base64 加密后的字符串进行解密还原为 alert(document.domain)

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

还原成明文是:

开始输入:

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

成功

XSS Challenges stage#1-10闯关详解XSS Challenges stage1-10闯关详解

代码成功执行弹出域名信息