靶场地址:传送门
概述:
XSS(跨站脚本)概述
Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
反射型XXS是一种非持久性的攻击,它指的是恶意攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的目的。这里插入的恶意代码并没有保存在目标网站,需要引诱用户点击一个链接到目标网站的恶意链接来实施攻击。
原文链接:https://www.jianshu.com/p/a15c411e4c92
**2.存储型XSS;**
什么是存储型XSS:
攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型XSS的危害会更大。因为存储型XSS的代码存在于网页的代码中,可以说是永久型的。
原文链接:https://blog.csdn.net/weixin_44720762/article/details/89736508
**3.DOM(Document)型XSS;**
先以一张w3c的图来说明,到底什么是dom:
dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。了解了这么一个知识点,你就会发现,其实dom xss并不复杂,他也属于反射型xss的一种(domxss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可能是存储型的),简单去理解就是因为他输出点在DOM。dom - xss是通过url传入参数去控制触发的)
链接:https://www.jianshu.com/p/190dedd585f2
总之:就是向目标注入恶意的javascript代码。目前只能做出这样浅薄的思考。
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
这里写目录标题
level 1
注意观察我们可以发现这几个点
这是一个GET交互的xss漏洞
URL的name传参就是我们的注入点,构造payload
将test 替换为 达到注入的目的进入下一关。
level2
有输的地方就有可能存在注入,
输入一些值然后用选取工具观察一下,发现被填入了
input 的value值里面
对其进行闭合绕过
payload:">
level3
和level2 一样需要构造闭合
但是一顿操作之后发现搞不定,查看一下源码
发现唯一显示$str的地方都做了html实体化,也就是过滤了<>
这个时候我们可以借助点击事件onclick
onclick事件会在元素被点击时发生
鼠标其他事件
用 ’ 闭合前面的单引号 用 // 注释后面的代码
构造payload:** ’ οnclick=alert(1) //**
经过处理后,在代码中的情况:
因为此点击事件是包含在input输入框中的,所以我们在输入框中点击鼠标就会触发事件
level4
输入<>测试发现被过滤了
但是点击事件不需要大于小于号,这里需要闭合value
构造payload: ” onclick = alert(1) // ,然后点击输入框触发点击事件
level 5
尝试闭合注入
行不通script关键字被替换了
也被替换
尝试大小写饶过
" OnCliCk=alert(1)//
" 均被过滤
进行HTML编码:" οnclick=alert(1) //
没有解析
查看下源码
大于小于号没有被过滤,
这里可以构造a标签的伪协议">
点击链接即可促发
level6
这道题不仅对上一道题的内容进行了过滤,还过滤了href关键字
但是没有对大小写进行过滤
构造payload:">
level7
对关键字进行测试
script :直接全部白给
onclick: on也不知所踪😒
大小写也不管用
复写试试::>alert(1)
level8
发现添加后会传到此位置
这里我们尝试构造a标签
javascript:alert(1)
行不通,
尝试大小写双写,也不行
尝试将javascript进行HTML编码
payload:
javascript :alert(1)
搞定
注:对函数名进行编码后,解析出来的只是html的普通字符;
如:对,l ,a标签进行HTML编码
运行结果
因为这些函数方法,是底层构造好的,二,script,a…是这些方法,函数名,进行解析,时是不能对应哪些编码后的字符的
level9
添加链接:https://www.baidu.com
居然失败了
换http://www.baidu.com试试
可以跳转
经过测试应该有判断输入是否含有http,否则就跳转
看下源码:
这里对输入进行了一连串的过滤
然后通过strops函数查询输入的有没有http://这个字符串,
没有的话直接跳转的恶心人的网页
对javascript的t进行HTML编码;
构造payload:javascript:alert(1)//http://
搞定
level10
看来这是一个get方式的注入
输入
修改页面元素然后点击按钮触发弹窗
11,12,13题都可用此方法解答,就不赘述了
level14
这关需要请求远程站点资源,但好像出问题了,好吧,脚步不能停。
点击也没用,直接修改url
level15
payload:?name=test’
好吧又是转载的附上老哥链接:https://www.cnblogs.com/Zh1z3ven/p/12971361.html
level16
不知道为什么我的不显示了,下面,装载一位老哥的博客。
摘自:https://www.zhaosimeng.cn/writeup/119.html
二级目录 17-20
靶场不知道怎么了,无法接收,传入的参数,下面给出一位老哥的挺详细的
传送门