XSS Challenges stage#1-10闯关详解

XSS Challenges stage1-10闯关详解

0x01 xss challenges 闯关环境准备

1.XSS challenges介绍

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

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

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

首先打开burpsuite 开始监听:

image-20210331144530902

使用插件配置火狐代理

image-20210331144734798

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

image-20210331144925276

保存在本地

image-20210331144948381

浏览器导入证书

image-20210331145328128

image-20210331145409579

选择导入的证书

image-20210331151927856

image-20210331152022248

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

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

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

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

image-20210331154946967

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

按 F12 分析源码

image-20210331155107382

我们输入的信息会被加载到页面中,我们加载的<script>alert(document.domain);</script> F12 看一下它在代码中的位置

image-20210331160055879

image-20210331160014614

按F12 检查查看代码

image-20210331164916349

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

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

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

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

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

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

image-20210331171357842

image-20210331171330290

image-20210331171456259

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

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

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

输入测试数据,查看信息

image-20210331172811838

分析源码:

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

原代码:<input type="text" name="p1" size="50" value="fengzilin">

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

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

image-20210331173258756

成功了

我们查看源代码

image-20210331173402181

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

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

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

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

构造payload

" onmouseover=alert(document.domain)>

image-20210331175209610

image-20210331175310794

分析:

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

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

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

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

image-20210331183422735

发现是在b标签中

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

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

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

image-20210331183853760

查看网页代码

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

Form表单

image-20210331184132581

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

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

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

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

image-20210331184427982

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

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

将p2的字段值改为:

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

image-20210331185200198

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

image-20210331185415965

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

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

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

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

抓取的数据包

image-20210331191030011

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

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

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

image-20210331191437855

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

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

p3 的值为 hackme 我们直接插入代码"><script>alert(document.domain)</script>,这里必须使用 "> 闭合,这样XSS代码才会被执行

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

image-20210331191910923

发现弹窗了

image-20210331191956512

按F12 查看注入情况

image-20210331192047844

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

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

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

image-20210406130140416

构造payload

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

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

image-20210406130346954

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

image-20210406130434206

成功弹出

image-20210406130541184

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

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

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

属性描述
onclickscript当单击鼠标时运行脚本
ondbclickscript当双击鼠标时运行脚本
ondragscript当拖动元素时运行脚本
ondragendscript当拖动操作时结束运行脚本
ondragenterscript当元素被拖动至有效的拖放目标时运行脚本
ondragleavescript当元素离开有效拖放目标时运行脚本
ondragoverscript当元素被拖动至有效拖放目标上方式运行脚本
ondragstartscript当拖动操作开始运行脚本
ondropscript当被拖动元素正在被拖放时运行脚本

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

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

image-20210406214918442

第二步:构造payload

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

image-20210406215131514

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

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

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

image-20210406215510045

查看源码

image-20210406215603734

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)"

image-20210406220012113

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

image-20210406220146935

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

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

成功弹出

image-20210406220734249

查看源码

image-20210406220805856

8.Stage #8 JavaScript伪协议

Stage #8 地址

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

表单输入数据查看构造

image-20210406221008833

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

构造payload

javascript:alert(document.domain)

image-20210406221542526

点击JavaScript才会触发XSS

image-20210406221647630

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

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

直接使用payload

οnclick="alert(document.domain)"

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

image-20210406222238158

10.Stage #10 绕过关键字domain

Stage #10 地址:

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

输入测试数据

image-20210406222530124

构造payload

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

image-20210406222644745

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

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

image-20210406222853431

成功

查看源码

image-20210406222920347

编码绕过

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

alert(document.domain)

image-20210406223240935

输入

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

image-20210406223444104

没有执行成功

我们在 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>

image-20210406223911762

成功

image-20210406223933576

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值