XSS漏洞
XSS漏洞定义
XSS又叫CSS(Cross Site Script),跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意JS代码,当该用户浏览该页时,嵌入其中Web里面的JS代码会被执行,从而达到恶意的特殊目的。
XSS漏洞原理
利用各种方法,向Web页面插入JS代码,让JS代码可以被浏览器执行,访问该页面的用户则被攻击。
XSS漏洞分类
反射型
原理:攻击者在URL中插入XSS代码,服务器端将URL中XSS代码输出到页面上,攻击者将带有XSS代码的URL发送给用户,用户打开后受到XSS攻击.
LOW
服务器端核心代码
可以看到,代码未对输入内容进行过滤与检查,存在XSS漏洞
我们可以输入<script>alert("XSS")</script>
JS代码
成功触发XSS漏洞
Medium
服务器端核心代码
可以看到,代码中对于输入内容进行了一定的过滤,使用了str_replace函数将输入的
成功触发XSS漏洞
High
服务器端核心代码
可以看到代码中利用preg_replace 函数进行正则表达式的搜索和替换来对<script>
进行过滤
我们可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。如输入:<body onload=alert("XSS")>、<img src=1 onerror=alert("XSS")> 、<a href='' onclick=alert('XSS')>click</a>
等进行绕过
成功触发XSS漏洞
存储型
原理:攻击者在页面上插入XSS代码,服务端将数据存入数据库,当用户访问到存在XSS漏洞的页面时,服务端从数据库中取出数据展示到页面上,导致XSS代码执行,达到攻击效果.
LOW
服务器端核心代码
尝试对Name插入JS代码,发现有字符数量限制
于是决定在Message框中插入,输入<script>alert("XSS")</script>
成功触发XSS漏洞
Medium
服务器端核心代码
可以看到,代码中对于输入内容进行了一定的过滤,使用了str_replace函数将输入的<script>
标签删除,且对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码
但Name参数限制了输入字符串长度
此时我们可以通过打开开发者工具
选中Name框后,发现此部分页面代码中有一个maxlength参数
将其直接修改
就可以在Name框中直接输入JS代码
成功触发XSS漏洞
High
可以看到代码中利用preg_replace 函数进行正则表达式的搜索和替换来对<script>
进行过滤
接下来我们任然可以通过上述方法修改Name框输入字符串长度后,通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。如输入:<body onload=alert("XSS")>、<img src=1 onerror=alert("XSS")> 、<a href='' onclick=alert('XSS')>click</a>
等进行绕过
成功触发XSS漏洞
DOM型
原理:攻击者在URL中插入XSS代码,前端页面直接从URL中获取XSS代码并且输出到页面,导致XSS代码的执行,攻击者将带有XSS代码的URL发送给客户,用户打开后受到XSS攻击。
LOW
服务器端源代码
我们发现代码中未对字符进行过滤、检查且前端页面设置了下拉选择表单,以此控制用户输入,所以我们可以构造XSS代码,访问链接
成功触发XSS漏洞
Medium
服务器端源代码
可以看到代码中过滤了<script>
,且不区分大小写
构造JS语句,访问后却无反应,再尝试多条语句,均无反应
查看页面源码后,构造</option><img src=1 onerror=alert("XSS")>
访问后依然没有反应
再次查看源码后,构造</option></select><img src=1 onerror=alert("XSS")>
成功弹窗