XSS Challenges stage#1-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闯关详解_第1张图片

使用插件配置火狐代理

XSS Challenges stage#1-10闯关详解_第2张图片

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

XSS Challenges stage#1-10闯关详解_第3张图片

保存在本地

XSS Challenges stage#1-10闯关详解_第4张图片

浏览器导入证书

XSS Challenges stage#1-10闯关详解_第5张图片

XSS Challenges stage#1-10闯关详解_第6张图片

选择导入的证书

XSS Challenges stage#1-10闯关详解_第7张图片

XSS Challenges stage#1-10闯关详解_第8张图片

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

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

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

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

XSS Challenges stage#1-10闯关详解_第9张图片

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

按 F12 分析源码

XSS Challenges stage#1-10闯关详解_第10张图片

我们输入的信息会被加载到页面中,我们加载的 F12 看一下它在代码中的位置

image-20210331160055879

image-20210331160014614

按F12 检查查看代码

XSS Challenges stage#1-10闯关详解_第11张图片

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

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

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

b 标签的结构 文本信息 作用是加粗文本信息

我们搜索时使用对 b 标签进行闭合,在输入栏,输入

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

image-20210331171357842

XSS Challenges stage#1-10闯关详解_第12张图片

XSS Challenges stage#1-10闯关详解_第13张图片

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

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

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

输入测试数据,查看信息

XSS Challenges stage#1-10闯关详解_第14张图片

分析源码:

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

原代码:

使用">闭合标签并插入js代码,在输入框中输入代码

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

XSS Challenges stage#1-10闯关详解_第15张图片

成功了

我们查看源代码

XSS Challenges stage#1-10闯关详解_第16张图片

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

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

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

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

构造payload

" onmouseover=alert(document.domain)>

XSS Challenges stage#1-10闯关详解_第17张图片

XSS Challenges stage#1-10闯关详解_第18张图片

分析:

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

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

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

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

XSS Challenges stage#1-10闯关详解_第19张图片

发现是在b标签中

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

fengzilin</b><script>alert(document.domain)</alert>

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

XSS Challenges stage#1-10闯关详解_第20张图片

查看网页代码

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

Form表单

XSS Challenges stage#1-10闯关详解_第21张图片

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

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

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

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

XSS Challenges stage#1-10闯关详解_第22张图片

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

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

将p2的字段值改为:

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

XSS Challenges stage#1-10闯关详解_第23张图片

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

XSS Challenges stage#1-10闯关详解_第24张图片

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

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

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

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

抓取的数据包

XSS Challenges stage#1-10闯关详解_第25张图片

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

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

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

XSS Challenges stage#1-10闯关详解_第26张图片

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

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

p3 的值为 hackme 我们直接插入代码">,这里必须使用 "> 闭合,这样XSS代码才会被执行

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

XSS Challenges stage#1-10闯关详解_第27张图片

发现弹窗了

XSS Challenges stage#1-10闯关详解_第28张图片

按F12 查看注入情况

XSS Challenges stage#1-10闯关详解_第29张图片

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

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

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

XSS Challenges stage#1-10闯关详解_第30张图片

构造payload

">

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

XSS Challenges stage#1-10闯关详解_第31张图片

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

XSS Challenges stage#1-10闯关详解_第32张图片

成功弹出

XSS Challenges stage#1-10闯关详解_第33张图片

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闯关详解_第34张图片

第二步:构造payload

">

XSS Challenges stage#1-10闯关详解_第35张图片

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

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

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

XSS Challenges stage#1-10闯关详解_第36张图片

查看源码

XSS Challenges stage#1-10闯关详解_第37张图片

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闯关详解_第38张图片

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

XSS Challenges stage#1-10闯关详解_第39张图片

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

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

成功弹出

XSS Challenges stage#1-10闯关详解_第40张图片

查看源码

XSS Challenges stage#1-10闯关详解_第41张图片

8.Stage #8 JavaScript伪协议

Stage #8 地址

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

表单输入数据查看构造

XSS Challenges stage#1-10闯关详解_第42张图片

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

构造payload

javascript:alert(document.domain)

XSS Challenges stage#1-10闯关详解_第43张图片

点击JavaScript才会触发XSS

XSS Challenges stage#1-10闯关详解_第44张图片

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闯关详解_第45张图片

10.Stage #10 绕过关键字domain

Stage #10 地址:

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

输入测试数据

XSS Challenges stage#1-10闯关详解_第46张图片

构造payload

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

XSS Challenges stage#1-10闯关详解_第47张图片

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

1234"><script>alert(document.domadomainin)</script>

image-20210406222853431

成功

查看源码

XSS Challenges stage#1-10闯关详解_第48张图片

编码绕过

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

alert(document.domain)

XSS Challenges stage#1-10闯关详解_第49张图片

输入

1234"><script>YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==</script>

XSS Challenges stage#1-10闯关详解_第50张图片

没有执行成功

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

我们修改 payload

fengzilin"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>

atob()函数将 base64 加密后的字符串进行解密还原为 alert(document.domain)
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
还原成明文是:

fengzilin"><script>eval(alert(document.domain));</script>

开始输入:

fengzilin"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>

XSS Challenges stage#1-10闯关详解_第51张图片

成功

XSS Challenges stage#1-10闯关详解_第52张图片

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

你可能感兴趣的:(漏洞原理,靶场,xss)