xss-labs下载地址:GitHub - do0dl3/xss-labs: xss 跨站漏洞平台
目录
level1
猜测使用GET传参,将name显示在界面上,并且显示name的长度
直接将name重新赋值:
<script>alert('xss')</script>
成功
查看源码
发现直接将GET方式的name返回,没有任何的安全防护
level2
类似于上一题,传参方式依然为GET,只不过是加入的搜索框和“搜索”
测试:
<script>alert('xss')</script>
并没有我们想要的结果,然后我们查看源码
发现<和>被编码变成了html字符实体
但是我们发现,在下面的value中,输入的恶意代码没有被改变,我们就从下面来入手
构造
"><script>alert('xss')</script>//
说明:这里前面的">用来闭合value中前面的"<,//用来注释value后面的">
另外,查看源码可以得到
htmlspecialchars()函数:把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体
并且下面的value确实也没有经过任何的过滤
level3
类似于上一题,进行简单测试
<script>alert('xss')</script>
和上一题一样,页面并没有我们想要的结果。
查看源码
这次两个都做了转换
我们可以通过事件标签触发表单执行
'onmouseover='alert(/xss/)
onmouseover 事件会在鼠标指针移动到指定的元素上时发生。
在提交之后,没有立刻弹出。将鼠标移动到文本框,触发弹窗
查看源码
level4
测试
<script>alert('xss')</script>
页面并没有弹窗。查看源码
发现对<和>进行了过滤
发现对<和>进行了置空
模仿上一关
"onmouseover="alert(/xss/)
查看源码
level5
首先进行最简单的测试
发现
测试
"onmouseover="alert(/xss/)
发现
猜测是对script和onmouseover进行了部分的替换
查看源码
strtolower()函数:把字符串转换为小写
这里过滤了大小写,并且将script和on进行了改写
试试javascript
"><a href=javascript:alert(1)>
点击即可
level6
进行简单的测试
和上一关很像
使用上一关的方法进行测试
这次把href也改写了
进行大小写的绕过
"><a hRef=javascript:alert(1)>
成功,看来是没有过滤大小写
查看源码
可以看到,上面都进行了改写替换,但是没有过滤大小写
level7
进行简单测试
发现和前面的不一样,这里直接将script置空了
发现将on也置空了
尝试使用双向进行绕过
"oonnmouseover="alert(1)
成功
level8
进入发现这里有一个“友情链接”,点进去查看
尝试上面的方法
源码:
发现对前面的方法都进行了过滤
下面尝试使用Unicode编码进行绕过
javascript:alert(1)
javascript:alert(1)
成功
level9
经过简单的测试,发现
都会有这么一句话
查看源码:
strpos()函数:查找字符串在另一字符串中第一次出现的位置。
这里就是查找在$str7中是否有 http://
这关同样可以使用Unicode编码就行绕过
javascript:alert('http://')
成功
level10
简单测试
发现下面多出来三个hidden属性
查看源码
发现我们构造的keyword在过滤后会传入在t_sort处
我们可以在前端修改hidden为text
然后输入
"onmouseover="alert(1)
之后再次修改为text
成功
level11
可以看到和上一关很相似
测试这里的t_sort,类似于上一关
发现t_ref也发生了变化
使用上一关的方法同样可以过关
也可以修改下面这个
最后看一下源码
相比前面多出来一个HTTP_REFERER,经过简单过滤后传入了t_ref
level12
这关又多出来一个t_ua
发现也就是这里的User-Agent
修改即可
看一下源码
level13
本关多出来了t_cook,猜测是cookie
使用Burp进行抓包
修改这里的cookie
"type="text" onmouseover="alert(1)
源码和前面差不多
level14
这道题有问题,跳过
level15
查看源码
发现了不一样的东西
查看源码
ng-include是 angular js中的东西,其作用相当于php的include函数
ng-include的用法:
1、ng-include 指令用于包含外部的 HTML文件。
2、包含的内容将作为指定元素的子节点。
3、ng-include 属性的值可以是一个表达式,返回一个文件名。
4、默认情况下,包含的文件需要包含在同一个域名下。
值得注意的是:
ng-include,如果单纯指定地址,必须要加引号
ng-include,加载外部html,script标签中的内容不执行
ng-include,加载外部html中含有style标签样式可以识别
可以构造
'level1.php?name=<a href="javascript:alert(/xss/)">'
点击即可
level16
简单测试
发现
script和/script都被置空了
尝试
<img src=1 onerror=alert(1)>
发现
空格也被转换了
使用%0a代替空格,%0a的含义是换行
<img%0asrc=1%0aonerror=alert(1)>
看一看源码
果然都被替换了
level17
发现是通过arg01和arg02进行传参
发现两个参数是直接拼接在一起的
我们提交的两个参数的值出现在了<embed>
标签的src属性值中
直接构造
arg01=a&arg02=b%0aonmouseover=alert(1)
最后看一下源码
没有很复杂
注:没有触发弹窗可以换个浏览器再尝试
level18
这里和上一关差不多
尝试和上面一样的方法
直接就成功了...
看一下源码
和上一关几乎没有区别...
level19
发现这一关比前面在src处多了双引号
如果想要成功执行js代码肯定需要去闭合标签,但是此处应该还是会用
htmlspecialchars()
函数进行处理,所以无法成功闭合。
参考:XSS-labs Level 19 Flash XSS_baynk的博客-CSDN博客
arg01=version&arg02=<a href='javascript:alert(/xss/)'>xss</a>
答案是这么写的,但是我没有复现成功....
看一下源码
level20
看上去和前面差不多
看一下源代码
不能说毫无关系,只能说一模一样