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

一些有趣的XSS注入GAME

目录

1.ma,Spaghet

2.Jefff

3.Ugandan Knuckles

4.Ricardo Milos

5. Ligma

6.Ah That's Hawt

7.Msfia

8.Ok,Boomer


1.ma,Spaghet

innerHTML :设置 innerHTML 的值可以让你轻松地将当前元素的内容替换为新的内容。

HTML 5 中指定不执行由 innerHTML 插入的 <script> 标签。

payload: ?somebody=<img%20src=1%20οnerrοr="alert(1337)"%20>

2.Jefff

innerTEXT:在一个节点上设置 innerText 会移除该节点的所有子节点,并用给定的字符串值的单一文本节点代替它们。

简单说就是标签不起作用,直接当成字符串了

setTimeout:全局的 setTimeout() 方法设置一个定时器,一旦定时器到期,就会执行一个函数或指定的代码片段。只能执行一次

所以:这里只能从eval这里破局!

首先通过引号闭合前面的内容,让我们的执行的命令逃逸出来!然后在闭合后面的引号

3.Ugandan Knuckles

可以看见这里被<>被过滤了

我们可以想到onclick这个属性

但是这样写的话有点不满足要求,因为它与用户交互了

input使用这样一个属性 onfocus ,autofocus

这里autofucus默认是yes.

4.Ricardo Milos

这里action为注入点

5. Ligma

这里过滤了英文和数字

这样感觉有点无从下手的感觉,这里只能使用编码了,看下源码!

jsfuck编码

由于URL不识别有些符号,需要对它进行URL编码

6.Ah That's Hawt

分析代码发现()不能使用了

试试能不能通过编码的方式来代替()

但是简单的使用%28 %29并不起作用

因为当浏览器将数据传到后端以后,因为转为()了,还是会被过滤

将%编码试试,%25,这样到后端以后就会变成%28 %29,如果js能够解码的话,最后传到页面的时候在解码%28,%29为(),这样不就实现了嘛

但是,js对符号并不进行解码,只对字符串和标识符进行编码。

那能不能将这一串变为字符串,然后对其解码呢?

当然是可以的,location,可以将其后面的内容当作字符串

7.Msfia

这里当alert,confirm prompt都不能使用

这里有三个方法:

方法1:匿名函数

Function(/ALERT/.source.toLowerCase())()

Function()() 第二个括号的作用,为了执行第一个括号里面的内容

这里得/  /代表之前得是函数,固定格式

方法2:

parseInt 和toString两个搭档

parseInt('alert',30) 得到一个数n,n..toString(30)就变回来了

注意:这里只能30以上36以下,因为30进制才包含t,parseInt最大只能写36

不过这里需要的是:toString转换之后是字符串

需要使用alert()将其当成js代码执行

方法3:

location.hash.slice(1)#alert(1337)

location.hash可以获取#后面的值,#后面的值不会被认为传递的参数

但是得到的是一个字符串,我们需要执行它

最终的payload:?mafia=eval(location.hash.slice(1))#alert(1337)

8.Ok,Boomer

由于我们的输入被过滤框架过滤了,所以,这里基本上没什么希望了

然后我们将目光放在了setTimeOut这个函数这里

发现它2s后执行了一个ok。感觉没啥用

那如果我们能够将这个OK换成我们注入的代码,那是不是就实现注入了呢?

这里需要用到一个DOM破坏的知识

举个栗子:

通过这种方式我们就可以拿到这个标签

通过这种方式我们可以执行标签里面的内容,但是发现它返回的是HTMLFormElent这个玩意

我们写的不是dadsa吗,怎么输出个这个

那是因为:所以元素的顶点就是object,object得toString方法最终得到得是一个元素,如果没有自己的toString方法的话,将会继承object的,返回类似这样的一个值

那怎么得到一个有自己toString方法的元素呢?

Object.getOwnPropertyNames(window) .filter(p => p.match(/Element$/)) .map(p => window[p]) .filter(p => p && p.prototype && p.prototype.toString !== Object.prototype.toString)

我们可以得到两种标签对象:HTMLAreaElement ()& HTMLAnchorElement ()

HTMLAnchorElement () 就是a标签,它会将href属性后面内容当字符串输出

利用这点,我们可以实现恶意代码注入

全局的 setTimeout() 方法设置一个定时器,一旦定时器到期,就会执行一个函数或指定的代码片段。setTimeout()可以允许将函数当作字符串执行,a 标签得href可以自动替换成字符串

OK,答案一下就出来了

我们可以<a id=ok href="javascript:alert(1337)">

但是,发现没反应。那是因为javascript被这个框架过滤了,黑名单

换一个它白名单里面的就行了

但是!经过测试,并不是所有的都行

tel ,cid callto 这三个都行

总结:a标签可以让href属性后面内容当作字符串,而不是返回object对象

当我们执行标签代码时,标签会调用toString方法,将内容转换为字符串

我发现一个有意思的点:

href后面转化为我们想要的字符串了

这样看起来没什么问题

这样又有问题了

又正常了

这说明setTimeout执行的是alert函数,而前面的javascript:应该是每传进来,不然就语法错误。

我理解的是javascript:将后面的alert字符串替换成alert js代码,类似于eval的作用,传进setTimeout的时候就不是字符串,而是js代码

但是setTimeout()传进去又变成字符串了,不过不影响,它能将字符串当函数执行

是不是糊涂了

如果我们不经过前面的javascript:将其变成字符串,那么传进去后时候就会带两个引号,那么就算setTimeout可以将字符串当作代码执行,但是,里面还是一层字符串,执行不了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Delphi】中多显示器操作基本知识点
  • vmware安装openEuler操作系统
  • C++(11)类语法分析(2)
  • 【JAVA入门】Day21 - 时间类
  • ThinkPHP中Db事务的使用:删除操作的示例
  • JAVA SpringBoot jar 程序 Systemctl 生产环境部署
  • 函数声明与函数表达式的区别是什么?
  • 【数学建模】趣味数模问题——棋子颜色问题
  • 解决使用uniapp时,uni.switchTab跳转标签页面不刷新的问题
  • android display 笔记(六)SurfaceFlinger初始化
  • KEEPALIVED高可用集群知识大全
  • 基于YOLOv8-pose的手部关键点检测(3)- 实现实时手部关键点检测
  • Python中的元类( metaclass )
  • 嵌入式八股-C++面试35题(20240816)
  • 如果从mysql导出百万数据级的excel
  • 时间复杂度分析经典问题——最大子序列和
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Apache Spark Streaming 使用实例
  • Apache的80端口被占用以及访问时报错403
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • pdf文件如何在线转换为jpg图片
  • SQLServer之索引简介
  • VUE es6技巧写法(持续更新中~~~)
  • vue.js框架原理浅析
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 入门级的git使用指北
  • 使用agvtool更改app version/build
  • 说说动画卡顿的解决方案
  • 通过几道题目学习二叉搜索树
  • 温故知新之javascript面向对象
  • 我有几个粽子,和一个故事
  • 用Canvas画一棵二叉树
  • 由插件封装引出的一丢丢思考
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (4)Elastix图像配准:3D图像
  • (Ruby)Ubuntu12.04安装Rails环境
  • (定时器/计数器)中断系统(详解与使用)
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)ssm码农论坛 毕业设计 231126
  • (三)mysql_MYSQL(三)
  • (十八)Flink CEP 详解
  • (四)React组件、useState、组件样式
  • (转)创业家杂志:UCWEB天使第一步
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (状压dp)uva 10817 Headmaster's Headache
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • (自适应手机端)行业协会机构网站模板
  • ***原理与防范
  • .form文件_SSM框架文件上传篇
  • .NET 中什么样的类是可使用 await 异步等待的?