xss.pwnfunction靶场网站简单8道题练习

本次练习涵盖如图青蓝色标识的8道题目:
[1.Ma Spaghet!](#1.Ma Spaghet!)
2.Jefff
[3.Ugandan Knuckles](#3.Ugandan Knuckles)
[4.Ricardo Milos](#4.Ricardo Milos)
[5.Ah That's Hawt](#5.Ah That’s Hawt)
6.Ligma
7.Mafia
8.Ok,Boomer

1.Ma Spaghet!

该题用到了innerHTML,如果get参数somebody有值就传参,没有就使用默认的somebody

如图,默认显示somebody ,规则说明:网页要显示警告1337,无须用户操作就要跳出警告,在Chrome浏览器运行

尝试传参,发现somebody被aaaaa代替了

尝试用<script>标签执行alert()函数,发现并没有生效,F12查看发现确实传参进去了

查阅官方文档发现HTML5中<script>标签被认为可能是跨站脚本而被禁用,不过只禁用了<script>一个标签,比如图片底下的<img>仍然可以xss攻击

根据上方图片的<img src='x' onerrer='alert(1)'>给somebody传参,成功显示警告1337

https://sandbox.pwnfunction.com/warmups/ma-spaghet.html?somebody=\<img src=1 οnerrοr='alert(1337)'>

2.Jefff

第二题把jeff传参到eval执行函数中了

闭合字段逃逸出eval()函数并执行alert()函数

https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aa";alert(1337);"

另一种方法:

https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aa"-alert(1337);-"

3.Ugandan Knuckles

如图,代码过滤了"<"和">"

发现页面多了一个框

于是在原本的<input>标签中加入onclick属性来执行alert()函数,发现能成功,但是需要用户手动点击

又考虑到有个onfocus可以按tab执行alert()函数,但仍需要用户操作,于是添加autofocus

最终成功告警

https://sandbox.pwnfunction.com/warmups/da-wey.html?wey=aaa" οnfοcus=alert(1337) autofocus="

4.Ricardo Milos

该代码会2秒后自动提交

默认提交

因为没有过滤,尝试写入xss代码,警告成功

https://sandbox.pwnfunction.com/warmups/ricardo.html?ricardo=javascript:alert(1337)

5.Ah That's Hawt

改代码过滤了 "[" , "]" , "(" , ")"

既然()不能用,选择将其转换成URL编码来绕过过滤

结果无法执行,F12查看代码发现()并没有被URL解释

思考是不是%的问题,将%也进行URL编码

加入%25后发现出现了%28和%29,但是没有被URL解释

将οnerrοr=location后成功警告

https://sandbox.pwnfunction.com/warmups/thats-hawt.html?markassbrownlee=\<img src=1 οnerrοr=location="javascript:alert%25281337%2529">

6.Ligma

如图,过滤了大小写和数字

可以去regex101.com网站测试正则过滤

jsfuck可以绕过这个正则,只是编码出来的字符串很长

还需要对其进行URL编码,才能被URL解释

最终成功警告

7.Mafia

如图过滤了"" , " ' " , ' " ', " + " , " - " , " ! " , " \ " , " [ " , " ] ",还有alert,但是()没有过滤,所以是可以使用函数的

因为开发者没有考虑到confirm()函数,可以投机取巧弹出警告

当然,也可以利用JavaScript的特性,构造函数后面加()可以直接执行,Function()(),

因为要绕过alert过滤,将其大写并转换回小写让JavaScript识别。

如图,成功告警

https://sandbox.pwnfunction.com/warmups/mafia.html?mafia=Function(/ALERT(1337)/.source.toLowerCase())()

通过查阅官方文档,发现了parseint和tostring两个函数可以进行进制转换


F12在控制台尝试转换进制,发现29进制只显示aler,而30进制显示alert,这是因为16进制是0-F,而30进制刚好对应到字母T

如图,成功告警

https://sandbox.pwnfunction.com/warmups/mafia.html?mafia=eval(8680439...toString(30))(1337)

location.hash可以输出#aaaa字符串如图,可以使用slice来将#去掉

外边再添加一个eval执行语句,成功告警

8.Ok,Boomer

DOMPurify这个过滤很厉害

尝试用<img>,发现有害字符串都被过滤了

尝试<a>,发现也被过滤了

选择不传参,默认页面下发现OK找不到,回到上头发现有一个定时函数提到了OK

如下图F12控制台,发现该函数下的字符串可以被输出

考虑到href可以调用函数,尝试加入JavaScript:alert(1337),发现仍被过滤

通过在github搜索DOMPurify,找到了其变态的过滤机制,发现有白名单

尝试其中一个cid来代替JavaScript,发现成功告警

替换成另一个白名单callto发现也能告警

相关推荐
GHUIJS6 分钟前
【vue3】vue3.5
前端·javascript·vue.js
pemper_21 分钟前
怎么操作使http变成https访问?
网络·网络协议·http·https·ssl
paixiaoxin22 分钟前
学术新手进阶:Zotero插件全解锁,打造你的高效研究体验
人工智能·经验分享·笔记·机器学习·学习方法·zotero
蒙奇·D·路飞-28 分钟前
古诗词四首鉴赏
网络
&白帝&33 分钟前
uniapp中使用picker-view选择时间
前端·uni-app
谢尔登40 分钟前
Babel
前端·react.js·node.js
ling1s40 分钟前
C#基础(13)结构体
前端·c#
卸任1 小时前
使用高阶组件封装路由拦截逻辑
前端·react.js
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑1 小时前
苍穹外卖学习笔记(五)
java·笔记·学习
lxcw1 小时前
npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED
前端·npm·node.js