xss-labs通关记录

目录

leve1

level2

level3

level4

level5

level6

level7

level8

level9

level10

level11

level12

level13

level14

level15

level16

level17

level18

level19

level20


leve1

观察界面可以发现,它想服务器提交一个name参数,值为test,并将结果显示在页面上,并且显示了参数值的字符长度。

查看源码

 可以发现,这是一个简单的反射型xss,所有我们先直接将name参数重新赋值:

<script>alert(1)</script>

我们去查看level1.php并结合网页源码,不难看出,这里是将服务器获得的name参数赋值给str变量。并通关echo将str变量直接插入<h2> </h2>之间,发生了反射性xss漏洞

 

level2

观察url,发生仍然是get方式传递参数,先查看网页源码

 

 

从源码来看,它的功能就是通过点击“搜索”按钮,将输入框内的内容以get方式提交给服务器上的level2.php,我们先尝试进行弹窗。发现没有反应,查看源码发现,这里将<>编码成了&lt &gt

后台过滤了<>符号,对其进行了实体化。但是我们发现了另一个可搞的地方。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:javascrip&#116:alert()

 

level9

将上一关的payload放入试试

 显示我的连接不合法。想想链接的特征,http://或者https://。

试一下

 这里就合法了,所有我们可以构造

payload:javascrip&#116: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

......(哈哈

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值