参考资料:
XSS常见的触发标签_可以触发xss的标签_H3rmesk1t的博客-CSDN博客
基础知识:
XSS漏洞的定义:
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意JS代码,当用户浏览该页面时,嵌入Web里面的JS代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
XSS漏洞的原理:
利用我们知道的方法,向web页面插入Js代码,让Js代码可以被浏览器执行,访问该页面的用户则被攻击
三大类型:
反射型xss 的原理为:攻击者在url 中插入xss 代码,服务端将url 中的xss 代码输出到页面上,攻击者将带有xss 代码的 url发送给用户,用户打开后收到攻击。
存储型XSS又称持久型XSS,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性。攻击者在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。
DOM型XSS全称Document Object Model,使用DOM动态访问更新文档的内容、结构及样式。 HTML标签都是节点,节点组成了节点树。通过HTML DOM 可以对树上的所有节点进行修改。服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应时,DOM对象就会处理XSS代码,触发XSS漏洞。
靶场实战
level 1
知识:JS弹窗函数alert()
查看源代码,看到默认name参数为test,回显了payload的长度
参数值直接放到<h2>这个标签里面了,判断为反射型xss
<script>是Js 的标签,alert()就是弹出一个对话框,并显示括号里的内容,后面的是闭合符
url?name=<script>alert()</script>
查看该关卡源代码,单纯插入即可
level 2
知识:闭合绕过
查看源代码发现被htmlspecialchars处理过了
htmlspecialchars的作用
可以看到在<h2>标签这里他将‘<’ 和 ’>‘ 进行了编码,而在输入<input> 这个标签中,他是没有被编码的,但是可以看到我们的注入语句被放到了value 值当中,这样浏览器是不会执行我们的注入语句的
我们只需要闭合掉双引号即可,构造payload:
这里的"是为了与value的双引号进行闭合,然后 > 这个符号是为了闭合<input>这个标签从而使得后面的成为HTML中的另一个标签而可以被浏览器执行,// 则是将后面的 "> 进行注释
"><script>alert(1)</script>//
除了使用这种闭合方式也可以使用其他方法,比如以下几种
1、当鼠标经过输入框时就会弹出弹窗
" onmouseover=alert(1)//
2、当鼠标点击输入框时就会弹出弹窗
" onclick=alert(1)//
level 3
知识:onfocus可以绕过html实体化
发现这里不仅是单引号闭合,而且符号也被实体化了
看看源码果然如此
我们可以利用onfocus事件绕过
onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,以html标签<input>为例,<input>标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码
' onfocus=javascript:alert() //
level 4
这里是双引号闭合,<input>标签,所以我们还能继续利用onfocus事件,构建payload
" onfocus=javascript:alert() //
查看源代码,用str_replace() 函数替换过滤了<>
level 5
知识:java伪协议_javascript伪协议是什么?_隅隅隅的博客-CSDN博客
可以插入标签(如<a>标签的href属性)达到js执行的效果,前提是闭合号<"">没失效
输入我们的老payload发现这里on被替换成了o_n
先看一下这关的源码
过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入
这里可以用伪协议来进行构造
"> <a href=javascript:alert(1)>1</a>//
href属性的意思是 当标签<a>被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码。这里的javascript: 就是javascript伪协议,就是将javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面。
之后点击1,触发a标签href属性即可