文章目录
一、xss的原理
XSS是一种在web应用中的安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中、xss也可以叫做前端注入其核心是用户输入的数据被当做前端代码(JavaScript)执行。
HTML 是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是 HTML 标签的开始,当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了 HTML 标签,当这些 HTML 标签插入了一段 JavaScript 脚本时,这些脚本程序就会在用户浏览器中被执行、就会产生 XSS 漏洞。
二、xss的危害
- 窃取目标cookie(读取cookie然后发送出去)
- 获取内网IP(攻击内网)
- 获取浏览器保存的明文密码
- 截取网页屏幕
- 网页上的键盘记录
三、xss的类型
(1)反射型xss
反射性xss也称非持久型xss,类似于一次性会话,攻击的脚本代码不会被记录到目标数据库中,用此类型xss需要自己构建带有xss漏洞的页面去诱导用户访问才能达到攻击目的
(2)存储型xss
存储性xss也称持久型xss,具有很高的隐蔽性危害性也是最高的,与反射性相反,攻击的脚本代码会被永久的记录到目标数据库中并在网页上显示,只要有用户访问了带有该xss攻击的网页就能达到攻击
(3)DOM型xss
DOM型xss漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞通常也是反射型xss,不会经过后端,其核心是通过网页url传参恶意代码 通过js把网页进行了修改并把恶意代码执行出来
四、xss的常见触发方法
标签法
直接插入标签
<script>alert(1)</script> //弹窗1
<script src=http://xss.com/></script> //引用外部xss
<script>alert(document.cookie)</script> //直接弹出cookie
伪协议法
有跳转的地方可以触发
<a href='Javascript:alert(1)'>abc</a>
事件法
满足条件自动触发
<img src=oninput=alert(1) />
五、xss挖掘
xss的挖掘必要前提是有输入和有输出的地方,核心就是见框就插, 在能输出的地方输入一些醒目字符 并在网页源代码中寻找该字符出现的位置, 在分析该位置是否能注入成功。
反射型xss大多出现在搜索框、
存储型xss大多出现在留言板、个人信息、邮箱、意见框等
dom型xss挖掘可寻找关键函数:Document.write(把里面的内容写到页面里)、document.URL(获取URL地址)
六、反射型xss靶场案例
首先使用标签法进行测试、发现无法弹窗
在源代码中发现此处<>被过滤了,并且需要闭合前面的引号注释后面的 '>
采用事件法 输入 'οninput=alert(1)// 此事件是输入弹窗 在对话框中随意输入,成功触发反射型xss
七、存储型xss靶场案例
网上查找cms版本号在网上曾经爆出的漏洞,发现一存在一个存储性xss,通过构造URL,让后台生成错误日志,而后台对错误日志的内容写入没有进行安全检查,导致写入的内容原原本本的显示在错误日志的页面中,当管理员在后台查看错误日志时,就会触发XSS代码。
输入:index.php?c=x&m=
直接利用xss平台生成攻击代码进行注入,只要管理员访问就能盗取cookie并发送到xss平台上
八、Dom型xss靶场案例
查看源代码发现此处存在使用js向url获取参数并显示到页面
在url处传参尝试让其弹窗,发现让安全狗拦截了
document.write 支持native编码 尝试进行编码绕过waf
九、xss防御
在输出数据之前对潜在的威胁的字符进行编码、转义是防御XSS攻击十分有效的措施。如果使用好的话,理论上是可以防御住所有的XSS攻击的
-
对输入进行过滤和html实体化(对代码进行编码,让代码只有文本意义),比如把尖括号换成<
-
httponly:禁止JS代码获取Cookie 但是此方法可以使用IE浏览器进行绕过 因为IE浏览器不支持httponly
-
架设Waf
-
过滤危险参数