任务一:总结反射型、存储型、DOM型XSS特点和区别
一、反射型:
1.特点:
即时性:攻击载荷(payload)通过URL参数、表单字段或HTTP头等方式传送到受害者的浏览器,并立即执行。
依赖用户交互:需要用户点击一个含有恶意脚本的链接才能触发攻击。
非持久性:恶意脚本不会存储在目标服务器上,攻击载荷仅在受害者点击链接的单个请求/响应过程中存在。
2.区别:
存储位置:恶意脚本不存储在服务器上,而是动态生成并反射回用户浏览器。
影响范围:通常只影响点击恶意链接的用户。
攻击方式:通过社交工程手段诱骗用户点击特定链接。
二、存储型xss:
1.特点:
持久性:攻击载荷被永久存储在目标服务器的数据库或文件中,如留言板、评论区等。
广泛影响:一旦恶意脚本被存储,任何访问该页面的用户都可能受到影响。
隐蔽性:由于脚本存储在服务器上,攻击者可能不需要直接与用户交互即可实施攻击。
2.区别:
存储位置:恶意脚本永久存储在服务器上。
影响范围:广泛,可能影响所有访问受影响页面的用户。
攻击方式:攻击者将恶意脚本注入到网站的存储区域,等待用户访问。
三、DOM型xss特点:
1.特点:
客户端执行:恶意脚本通过客户端的JavaScript操作DOM(文档对象模型)动态生成和执行,不依赖于服务器响应。
隐蔽性高:由于攻击发生在客户端,服务器日志可能不记录任何异常,使得检测和追踪更加困难。
动态内容相关:攻击通常与网页的动态生成内容有关,如通过URL参数、JavaScript生成的内容等。
2.区别:
执行位置:恶意脚本在客户端执行,不通过服务器。
输入验证:防护重点在于客户端JavaScript的输入验证和安全的DOM操作。
触发方式:通过修改页面的DOM结构来植入恶意代码,可能通过URL参数、事件触发等方式实现。
任务二:上网搜索一份XSS的fuzz字典或字典生成工具
打开网站:
https://gitcode.com/gh_mirrors/up/upload-fuzz-dic-builder/overview?utm_source=csdn_github_accelerator&isLogin=1,下载upload-fuzz-dic-builder-master.zip,解压可得到多种fuzz字典
任务三:到XSS挑战靶场打靶(https://xss.tesla-space.com/)
进入靶场:
第一关
观察到url的参数里有name项,根据XSS原理,注入恶意脚本,尝试注入payload
插入“?name=<script>alert()</script>”
注入后显示成功
第二关
首先尝试和第一关一样的方法,考虑注入payload。没能成功。
在输入框处点击右键选择,查看网站源码,这里可以以看到input一个value值,这样表示此处不会执行注入语句的,在这里我们需要构造标签闭合来破解
已知输入的内容会直接被引号框住,所以我们可以尝试将引号给消除掉,添加"><script>alert()</script><"
第三关
尝试像第二关一样绕过,失败
观察到有函数onfocus,用于输入框input,这里键入payload如下
'οnfοcus='alert(1)
第四关
同第三关做法一致 改为" οnclick="alert(1)
第五关
输入"> <a href=javascript:alert()>xxx</a> <"后点击xxx
任务四:
一、浏览器解析机制:
第一步:HTTP请求:当用户在地址栏输入URL并点击回车,浏览器发送一个HTTP请求到服务器,获取HTML文档。
第二步:接收到响应:服务器返回HTTP响应,通常包含HTML、CSS和JavaScript等文件的内容。
第三步:解析HTML:浏览器开始解析HTML文档,从头部开始,遇到标签开始读取内容,将html的标签转换为DOM树,将结构转换成一棵节点树,每个元素都有相应的属性和事件处理程序。
第四步:CSS渲染:浏览器解析CSS规则,并应用到DOM元素上,调整样式和布局,形成渲染层。CSS文件解析完成后,CSS规则都保存在了CSSRuleList实例中,这些规则会在创建Render节点的过程中使用到。
第五步:解析脚本:遇到标签内的JavaScript,浏览器会按顺序执行它们,可能影响页面内容和交互。解析完成后,浏览器引擎会通过DOMTree和CSSRuleTree来构造RenderTree
第六步:渲染完成:所有的HTML、CSS和JavaScript都被解析执行后,浏览器最终渲染出完整可视的网页。
二、解释《漏洞利用之XSS注入》
1.
不执行的原因主要是URL的协议部分(javascript:)被编码了。浏览器在解析这个URL时,无法正确识别其协议,因此不会执行其后的JavaScript代码。不执行的原因主要是URL的协议部分(javascript:)被编码了。浏览器在解析这个URL时,无法正确识别其协议,因此不会执行其后的JavaScript代码。
2.
当浏览器遇到这个<a>标签时,它会尝试解析href属性中的URL。然而,由于:字符被编码为%3a,浏览器无法识别出这是一个javascript:伪协议。因此,它不会执行该URL中的JavaScript代码。
3.
字符实体转换回它们代表的字符,得到的JavaScript代码是alert(9),试图通过字符实体编码来隐藏其JavaScript本质,,但是因为大多数现代浏览器都有内置的XSS防护机制,可以防止这类通过字符实体编码的脚本执行。
4.
使用了Unicode转义序列来编码JavaScript代码,实际表示的代码是alert(10),这段JavaScript代码将会执行,并显示一个包含数字10的警告框。
5.
这段代码被浏览器解析并执行时,JavaScript引擎会将\u000a转换为实际的换行符。因此,alert函数将会显示一个包含数字14和一个换行符的字符串。