目录
Level1
右击查看页面源码
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function() //这里是显示一条指定消息和一个确认按钮的警告框
{
confirm("完成的不错!");//指定消息完成得不错!
window.location.href="level2.php?keyword=test"; //刷新当前页面,并且重定向到level2
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户test</h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:4</h3></body>
</html>
在script内,如果alert函数被调用执行,则会弹出警示框,重定向到level2
这里虽然没有输入框,但是在url内,如果我们将name=后面的参数改为我们想要的,页面也会随之改变
在url上写一个弹窗脚本
<script>alert()</script>
由于alert()被调用并且执行,window.location.href进行重定向
Level2
输入框执行我们输入的内容后,在上方进行回显,构造一个脚本
<script>alert()</script>
理应执行后跳出弹窗,这里输入的内容可能被过滤
右击查看一下源码
果然我们输入的<被进行HTML实体编码
HTML实体编码
命名字体:以&开头,以分号结尾。列如“<”的编码是“<”
字符编码:十进制,十六进制ASCII码或者Unicode字符编码,样式为“&#数值;”,如“<”可以编码为“<”和“<”
但是在input标签的value处,没有将我们输入的内容进行严格过滤,所有手动闭合value,再执行脚本
"><script>alert()</script>
这里有两个输入点,从url输入或者从value输入
Level3
尝试输入<script>alert()</script>,失败了
查看输入后的源码,这里连value输入的内容也进行了过滤
这边依旧是如果script内的alert函数被调用,则跳转第四关
假设我们在这里构造了一个事件,由于当事件发生时,可以执行 JavaScript,比如当用户点击一个 HTML 元素时,就会从事件处理程序中调用函数
构造一个payload,这里用onlcik,payload
' onclick=alert() '
注意:这里最好不要复制,自己打,复制可能会出错
Level4
输入脚本的后,点击搜索,可以看见原本的<直接被过滤
类似上一题,我们依旧利用事件
" onclick=alert(1) "
最好不要复制,不知道是我电脑原因还是bug,复制上去跳转不成功,手打就可以
Level5
当我输入<script>alert()</script>的时候,没想到直接将输入的内容进行添加下划线过滤,只能尝试别的方法
οnclick=alert()也不行
script不行,onclick不行,尝试利用其他的语句测试
列举一些常用的xss语句:
<script>alert(1)</script>
<img src=ganyu οnerrοr=alert(1)>
<svg οnlοad=alert(1)>
<a herf=javascript:alert(1)>
这里尝试了一下,javascript没有被过滤,可行
这里直接输入<a herf=javascript:alert(1)>是失败的,没有将前面内容闭合
" /> <a href=javascript:alert()>
点击">即可
Level6
输入<script>alert()</script> 失败了,将内容回显在页面上,查看源代码
果然将内容进行了过滤,我们尝试使用onclick、javascript、onerror、onload
还是只有Javascript 没被过滤,利用上题的方法试试
" /> <a href=javascript:alert()>
失败了,查看一下源码
直接将href过滤了
可以尝试双写、或者大小写、或者编码绕过,这里只能大小写尝试
" /> <a hrEf=javascript:alert()>
Level7
神奇,输入<script>alert()</script>的时候
直接是将我script删除,大写也不行,试试双写
注意:输入 scriptscript是不行的,这里我输入的是scrscriptipt,随便什么都行,把script包在里面就行了,记得将前面的内容闭合,成功了
"><scrscriptipt>alert()</scrscriptipt>
Level8
当我们输入内容的时候,value的内容会直接带入href,,触发友情链接的时候,就会执行带入的参数
利用这个特点javascript构造
javascript:alert()
失败了,将输入的javascript过滤
尝试大小写绕过,也不行,这里可以利用刚才说过的编码,既然他检测到了javascript,将script进行编码绕过
利用hackbar,进行HTML实体编码
javascript:alert()
Level9
查看一下源码
直接告诉我们输入的内容不符合规范,毕竟这里得输入规范的url才行,猜测可能是对协议进行检测 ,如检测http://
真的可以了,如果我们将ganyu替换成javascript:alert()呢【注意:将script实体化】
迎来一个问题,如何去掉http://,前面说到是对http://的一个检测,这里尝试能否注释掉
javascript:alert()//http://
Level10
除了url没有任何输入点,尝试在url写入脚本
直接回显,查看代码也直接将我们输入的内容进行HTML实体化
我们查看到了有一个表,但是页面没有显示关于这个表的内容,而且表内利用了input函数并且隐藏,用于接受标准输入数据,而后面的type=“hidden”用于隐藏域
value内为空,我们尝试在value输入
?t_link=ganyu&t_history=ganyu&t_sort=ganyu
有一行有回显
构造payload,然后点击即可【这里不一定是button,只是用作于显示而已】
t_sort=" οnclick=alert() type="button""
Level11
右击查看源码 ,发现和上一题有个类似的地方
我们继续像上一题那样,但这次是传4个参数过去
t_link=ganyu&t_history=ganyu&t_sort=ganyu&t_ref=ganyu
可以看到,这里t_sort的value有显示参数,继续像第十题那样构造payload
t_sort=" οnclick=alert() type="button""
超出了预期,并没有反映,查看了一下源码,被过滤
回去看下源代码,这里有一个特殊的referer
Reffer是HTTP请求header的一部分,当浏览器向web 服务器发送请求的时候,头信息里就有包含,比如在www.Firefox.com 里有一个www.baidu.com链接,那么点击这个链接 ,它的header信息里就会看见有:referer=http://www.Firefox.com,说明是被引用过来的
熟悉sql注入的应该会熟悉这个referer注入,我们尝试利用referer来传参
打开HackBar,点击referer
点击发送,在代码界面我们可以看到输入的ganyu成功在value回显
尝试在t_ref 写入参数
t_ref=" onclick=alert() type="botton""
Level12
一看源码,这个熟悉,也是类似SQL的ua注入
UA是什么?UA也称User-Agent,当用户发起一个请求时,网站会通过判断 UA的数据,如(名称,版本,浏览器内核,内核版本)等等,来给不同的操作系统,不同的浏览器发送不同的页面
利用Hackbar的ua
先传个参数进去试试
成功了,直接构造payload吧
t_ua=" onclick=alert() type="botton""
点击发送,成功
Level13
这边给出了提示,利用cookie传参
看下百度的回答,是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。当用户第一次访问页面的时候,服务器会生成一个用户特有的Cookie,之后浏览器会根据用户设置的Cookie信息加载出内容
简单来说,Cookie其实就是用户凭证的意思
知道了这些信息之后第一步还是利用HackBar的cookie查看是否能利用,勾选cookie,传入参数
这里好像不能用这个HackBar
试试bp行不行,点击重放
这里隐藏了一个user,在user后面输入参数试试
成功了,既然知道了隐藏的user,我们尝试继续利用HackBar
user=t_ua=" onclick=alert() type="botton""
点击text框,成功
Level14
这啥鬼,查看一下源码就一个内联框架,这题有bug?
Level15
没有任何输入点,查看一下源码
发现一个ng-include,include作用是将同一服务器的html文件包含进来,和src进行传参,在请求 src 资源时会将其指向的资源下载并应用到文档中,比如 JavaScript 脚本,img 图片等等,在这里我们将src指向任意一关,输入对应的xss弹窗脚本即可。
?src='level1.php?name=<img src="ganyu" onerror=alert(1)>'
这一关可以做,但是我这里没法跳转下一关,利用src包含任意一关卡的php源码, 利用那一关的弹窗完成这关即可
Level16
keyword后输入的内容回显,查看一下源码发现被center包裹,center用于居中显示文本
看看能不能利用这个进行弹窗
<script>alert()</script>
失败了,被过滤
查看一下都有什么被过滤了,还好似乎就过滤script
传入,还过滤??
<img src="" onerror=alert(1)>
过滤了空格,看看url编码表的空格是什么然后绕过吧
?keyword=<img%0asrc=""%0aonerror=alert(1)>
Level17
查看一下源码,发现有一个embed标签,用来嵌入内容,比如插件
尝试对值进行修改
构造payload【前提是你得有flash插件】
?arg01=a&arg02 onfocus=alert(1)
Level18
同理
Level19
Level20
很可惜这里都设计到falsh插件和flash xss,无法做下去了