靶机
实验地址
认识xss
概述
人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。
跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
原理
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,
xss类型
类型 | 解释 |
---|---|
反射型xss | 非持久型, 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一次性,所见即所得,一般容易出现在搜索页面。 |
存储型xss | 持久型, 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。 |
DOM型 | 基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。 |
xss实验测试
1.反射型xss(get)
输入<script>alert('123')</script>
,maxlength="20"限制了输入长度,故可改为100再输入
弹窗后将不在出现
2.存储型xss
输入<script>alert(document.domain);</script>
后弹框,已经存储在服务器里,之后再次点击会促发xss弹框
3.DOM型xss
分析代码,可看出参数传给了客户端javascript的doomxss函数执行,没有经过服务端
输入123,查看123在html的位置,发现在a标签里,尝试添加事件如onmouseover,先将前面引号闭合再输入’ onmouseover="alert('123')"
鼠标移动指向what do you see? 促发事件onmouseover弹框
4.xss之 htmlspecialchars
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为 ’
< (小于)成为 <
> (大于)成为 >
故可以利用伪协议javascript:alert(document.domain);
绕过过滤,再点击javascript:alert(document.domain);
弹框
5.xss之js输入
输入123查看在html的哪个位置,123在中,可尝试闭合<script>
故输入</script><script>alert('123')</script>
闭合之后弹框
xss绕过过滤
a.闭合标签,增加事件等
如"></a><scrip>alert('123')</script>
如onmouseover="alert('123')"
b.空格绕过字符串替换,大小写
如"><a href="javas cript:alert(document.domain)">xss</a>
' "><sCripT>alert(63252)</sCrIpT>
c.编码绕过
base64加密 "><script>eval(atob('base64加密过后的'));</script>
unicode编码 \u003c \u003e 分别为 <>
hex编码 <scrip>alert('123')</script>
为%3C%73%63%72%69%70%3E%61%6C%65%72%74%28%27%31%32%33%27%29%3C%2F%73%63%72%69%70%74%3E
d.存在htmlspecialchars()和htmllentities()等 实体输出函数
如' onmouseover='javascript:alert(document.domain)'
在此欢迎大家指正,补充(学习笔记)