当前位置: 首页 > news >正文

XSS初级漏洞靶场

一、环境的搭建

可以在githb上找靶机包,使用小皮面板搭建在自己本机

与此文章类似(放在www目录下)

二、XSS漏洞简介

1、什么是xss漏洞

当用户访问被xss注入的网页,xss代码就会被提取出来。用户浏览器就会解析这段xss代码,也就是用户被攻击了。

用户最简单的动作就是使用浏览器上网,并且浏览器中有js解释器,可以解析js,然而由于浏览器不具有人格,不会判断代码是否具有恶意行为,只要代码符合语法规则,浏览器就可以解析这段xss代码。

简单来说,xss就是通过攻击者精心构造的js代码注入到网页中,并且浏览器解释运行了这段恶意的js代码,以达到恶意攻击浏览器的效果。

xss的攻击对象是用户浏览器,属于被动攻击,因此xss攻击涉及到三个角色

  • 攻击者
  • 用户浏览器
  • 服务器

当然不要以为xss属于客户端攻击,受害者是用户,就会以为跟自己的网站、服务器安全就没有关系,网站的管理员也是用户之一,知识相对普通用户权限更高。

实现xss攻击需要具备的两个条件:

  • 需要向Web页面注入精心构造的恶意代码
  • 对用户的输入没有做果过滤,恶意代码能被浏览器成功执行

2、XSS漏洞的类型

xss漏洞的位置通常在于Web应用程序的输入验证或者输出过滤不严格的地方

类型:

  • 存储型XSS(Stored XSS):攻击者将恶意脚本存储在服务器上,当其他用户访问这些恶意脚本的网页时,就会触发XSS漏洞
  • 反射型XSS(Reflected XSS):恶意脚本作为URL参数发送给服务器,服务器将恶意脚本插入到返回的页面中,用户访问该页面就会执行该脚本
  • DOM-based XSS:攻击不涉及服务器端,而是通过修改页面的DOM结构来实现攻击,通常通过修改客户端脚本中的DOM元素来触发漏洞。

三、开始闯关

在此之前补充三个弹窗函数

alert()
confirm()
prompt()

反射型XSS

1、level1

语句插入

 从源码可以看到,后端是get接收参数,并且没有过滤,
那么我们直接在参数的后面加上script标签

?name=test<script>alert(1)</script>

结果:

2、level2

和第一关差不多,按刚才的输入以此,看下情况

可以看到,我们的输入被原米原样输出,没有弹出警告框

看下后端源代码,我们的参数会经过这个过滤函数

htmlspecialchars()会将& (& 符号)、" (双引号)、' (单引号)、< (小于)、> (大于)等符号转换成HTML实体编码。

那么在h2标签中我们无法进行注入,但可以看到下面的input标签还有一个输出点,
在这里我们只需要绕过双引号和闭合尖括号就可以实现

效果:

test"><script>alert(0)</script>

第二种方法:鼠标点击事件onclock

也是对input标签进行操作,闭合前一个单引号,在后面加上点击事件的属性

test"onclick="alert(1)

点击一下:

3、level3

先试着用上一关的闭合单双引号试试,

这时候我们使用点击事件,来进行注入,先将单引号闭合

test'onclick='alert(1)

点击,查看效果

4、level4

我们在使用上一关的方法,直接使用利用属性,看能不能过
很明显可以直接过

看下源码,看考察的点是什么?
他在考查看我们input的闭合,会将尖括号替换为空

5、level5

我们直接在试一下上一关的方法
可以看到我们的onclick被过滤替换了

我们看源码,都替换了哪些

可以看到我们是不能再使用script标签了,带on的事件关键字也不能用了

我们不妨直接将input前面的标签闭合掉,使用a标签在href后直接使用javascript伪协议

1"><a href="javascript:alert(1)">1</a

6、level6

直接看源码可以看到,将我们上一关用的href也过滤掉了

在html的标签中,浏览器在解析过程中会忽略大小写的,而我们可以看到上面都是过滤小写,那我们不妨可以试试大小写绕过
(当然在javascript内部是严格区分大小写的)

1 " OnCLick="alert(1)

7、level7

我们可以看到这关是将关键词替换为空进行过滤,那么我们可以进行双写实现绕过

1"oonnclick="alert(1)

8、level8

此处添加友情链接,那么不就可以用我们a标签里href的javascript伪协议了吗

但可惜的是被过滤掉了

那我们直接使用编码就行

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

9、level9

查看源码可以看到过滤了我们很多关键字,并且必须需要加上http://才可以

那我们针对这些过滤使用实体编码来绕过

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;http://;&#x27;&#x29;

很明显我们添加上了我们想要的东西

相关文章:

  • qt 5.15版本安装
  • 【视频编码\VVC】编码结构基础知识
  • 一张图读懂人工智能
  • SpringBoot底层原理
  • 计算机网络——22TCP拥塞
  • uniapp中导入css和scss的区别
  • Fastjson:高效、便捷的Java语言JSON解析器和生成器
  • 出海遇见SOCKS5:电商与游戏的网络安全奇航
  • C语言的reverse函数
  • MATLAB环境下脑电信号EEG的谱分析
  • C#,双向链表(Doubly Linked List)归并排序(Merge Sort)算法与源代码
  • SpringBoot+Vue实战:打造企业级项目管理神器
  • 【前端素材】推荐优质后台管理系统 Adminity平台模板(附源码)
  • mysql学习
  • java009 - Java面向对象基础
  • ----------
  • 收藏网友的 源程序下载网
  • 30天自制操作系统-2
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Redis中的lru算法实现
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • vue-cli在webpack的配置文件探究
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 汉诺塔算法
  • 解决iview多表头动态更改列元素发生的错误
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 浏览器缓存机制分析
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 一些关于Rust在2019年的思考
  • 自定义函数
  • C# - 为值类型重定义相等性
  • 带你开发类似Pokemon Go的AR游戏
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (09)Hive——CTE 公共表达式
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)计算机毕业设计ssm电影分享网站
  • (过滤器)Filter和(监听器)listener
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转载)Linux网络编程入门
  • .NET 发展历程
  • .NetCore 如何动态路由
  • .NET开发人员必知的八个网站
  • ??eclipse的安装配置问题!??
  • @DataRedisTest测试redis从未如此丝滑
  • @RequestMapping-占位符映射