XSS简述
1、本质:前端代码写的有问题,允许用户自己嵌入HTML或者css或者js代码并执行(一般js的危害比较大),从而造成漏洞
2、类型:反射型、存储型、DOM型
(1)反射型:前端-后端-前端
前端页面输入后,经过后端代码执行,再返回到前端页面。(反射型XSS通常只在URL中,用户访问特定的URL才会中招)
把含有攻击代码的URL替换成一个短链接,用户访问该链接就会造成恶意代码的执行。
(2)存储型:前端-后端-数据库(服务器)-前端
前端提交的数据会经过后端,后端的代码把它存到一个地方,例如数据库或者一个文件夹,再返回前端。
存储型XSS一般出现在用户可以访问到的地方,例如评论区,留言板等地方,访问之后即执行恶意代码。
(3)DOM型:前端
DOM(document object model):文本对象模型
当确认客户端代码中有DOM型XSS漏洞时,诱使用户访问自己构造的URL。利用步骤和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。
XSS-labs靶场练习记录
level1
打开第一关,页面显示欢迎用户test,经过观察我们看到URL有name=test,且下方提示payload长度为4,猜测应该是提交了一个test给name
输入<script>alert('xss')</script>
(alert是弹窗,引号里的内容为弹窗内容),完成第一关
level2
这里比第一关多了一个搜索框,尝试输入<script>alert('xss')</script>
,显示
查看网页源代码,发现尖括号<>被编码了,value参数值中的恶意代码并没有被编码而是直接原样返回
看别人的wp知道,要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以了。我们用">去闭合原先的",用//去注释原先的"> "><script>alert('xss')</script>//
level3
输入test试试
输入<script>alert('xss')</script>
试试
查看网页源代码看看,发现这两处都将<和>这样的敏感字符编码成了html字符实体。
看看PHP代码,
浏览器可以通过标签的一些特殊事件来执行js代码,如onfocus,onblur,但是这两个是属于输入框在光标进入/离开时调用后面的js代码
构造payload' onclick ='javascript:alert(1)'//
最后要点一下输入框才会出现弹窗