一、XSS全称:跨站脚本(Cross Site Scripting) ,为了不和层叠样式表(Cascading Style Sheets)的缩写CSS混合,所以改名为XSS;攻击者会向web页面(input表单、URL、留言版等位置)插入恶意JavaScript代码,导致管理员/用户访问时触发,从而达到攻击者的目的
二、xss原理:服务器对用户提交的数据过滤不严,导致浏览器把用户的输入当成了JS代码并直接返回给客户端执行,从而实现对客户端的攻击目的
三、xss分类:
1.反射型(非持久型):反射型XSS,又称非持久型XSS,攻击相对于受害者而言是一次性的,具体表现在受害者点击了含有的恶意JavaScript脚本的url,恶意代码并没有保存在目标网站,而Web应用程序只是不加处理的把该恶意脚本“反射”回受害者的浏览器而使受害者的浏览器执行相应的脚本
2.存储型(持久性):存储型XSS是指应用程序通过Web请求获取不可信赖的数据,在未检验数据是否存在XSS代码的情况下,便将其存入数据库。当下一次从数据库中获取该数据时程序也未对其进行过滤,页面再次执行XSS代码持续攻击用户。存储型XSS漏洞大多出现在留言板、评论区,用户提交了包含XSS代码的留言到数据库,当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。
3.DOM型(非持久性):DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式,DOM-XSS简单理解就是不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题。
四、漏洞危害:
1.窃取用户Cookie
2.后台增删改文章
3.XSS钓鱼攻击
4.利用XSS漏洞进行传播和修改网页代码
5.XSS蠕虫攻击
6.网站重定向
7.获取键盘记录
8.获取用户信息等
XSS-labs通关教程
- 第一关
黑盒:
看到这里有个get传参果断进行测试
Payload:
/level1.php?name=<script>alert( xss)</script>wu'ao'guo
白盒:查看源码
2.第二关
黑盒:先进行输入发现有文字更改查看源码
找到更改的元素可以进行闭合来达到xss
Payload:”> <script>alert(‘xss’)</script>
白盒:
也是get传参和拼接但将html进行了实体转化如果实体转化是在script和input里面是可以突破的
- 第三关
黑盒:继续第二关的姿势发现失败查看源码
< >都被转义了
换个姿势绕过这里用到了onfocus事件绕过' οnfοcus=javascript:alert(xss) '
还可以使用onblur事件绕过
onblur和onfocus一个是光标离开事件一个是光标进入事件
白盒:
4.第四关
黑盒:继续上一关的操作发现失败
白盒:
- 第五关
黑盒:重复上一关的payload
a herf标签法
直接构造payload:"> <a href=javascript:alert()>xxx</a> <"
herf的属性当a被点击后就会触发链接
白盒:
- 第六关
黑盒:
href被替换
白盒:
发现script、on、src、data、href全部被替换尝试大小写发现无过滤进行直接构造payload
:”> <sCript>alert(‘xss’)></sCript> <”
白盒:
7.第七关
黑盒:
发现大小写被转化成小写并且script被删除这样就用上了双写绕过如oonn中间的on被删除就剩下onpayload:"oonnfocus=javascscriptrip:alert('xss') "
白盒:
第八题
黑盒:img标签的姿势”(1)当鼠标移出图片的时候执行属性onmouseout
- 当鼠标移动到图片的时候执行的属性onmouseover
再来看看data的,这里利用iframe标签,插入一个标签data:text/html;base64, 将后面的内容进行base64解码,PHNjcmlwdD5hbGVydCgpPC9zY3JpcHQ+进行base64解码后是<script>alert()</script>
"> <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgpPC9zY3JpcHQ+"> <"
被替换了无法进行双写和替换双引号也被替换了可以利用href的隐藏属性:自动Unicode解码JavaScript:alert('xss')
白盒:
- 第九题
黑盒:
直接白盒看源码
白盒:
strpos函数:查找字符串第一次出现的位置
当false等于false的时候(就是传入的值没有http://)就会执行if,为了防止false===false,我们需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗,让函数strpos返回一个数字,构造payload:javascript:alert('xss')/* http:// */
- 第十题
黑盒:" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j
先测试一波看看什么被过滤掉了全部被实体化了直接白盒
白盒:
- 第十一题
黑盒:发现有四个隐藏的函数不管怎么搞都无法找到xss漏洞直接审计源码
白盒:
构造一个Referer头:Referer: " οnfοcus=javascript:alert() type="text
- 第十二题
白盒:直接进行代码审计
- 第十三题
白盒:
构造cookie信息:
- 第十四题
白盒:HTML <iframe> 标签:作用是标记一个内联框架!!一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。
查看源码通过iframe标签引入了一个http://exofvoewer.org, 结合乌云爆出的漏洞利用文件上传一个含xss的图片然后触发图片
- 第十五题
ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号
先注释掉’然后将src放到第一题然后进行xss
- 第十六题
果然给过掉了,空格可以用回车来代替绕过,回车的url编码是%0a,再配合上不用/的<img>、<details>、<svg>等标签,更多标签可参考XSS常见的触发标签
- 第十七题
,传入的参数都出现在了embed标签上,打开后缀名为swf的文件(FLASH插件的文件,现在很多浏览器都不支持FLASH插件了)
embed标签可以理解为定义了一个区域,可以放图片、视频、音频等内容,但是呢相对于他们,embed标签打开不了文件的时候就会没有显示的区域在,他们就能有块错误的区域
再看一下onfocus和onclick事件,这两事件是等价的,都是一触即发
- 第十八题
和第十七题一个思路
- 第十九题
同第十八题
- 第二十题
反编译不太熟练直接拿大佬的payload
?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123