xss小游戏源码分析

配置

下载地址:https://files.cnblogs.com/files/Lmg66/xssgame-master.zip
使用:下载解压,放到www目录下(phpstudy),http服务下都行,我使用的是phpstudy

第一关

查看源码:





第1关


第1关 先热个身吧

欢迎用户:".$str.""; ?>
payload的长度:".strlen($str).""; ?>

分析:

对name没有任何的过滤输出到标签中,基本的xss都行

payload:

level1.php?name=

第二关

查看源码:





第2关


第2关 窒息的操作

没有找到和".htmlspecialchars($str)."相关的结果.".'
'; ?>
payload的长度:".strlen($str).""; ?>

分析:

用htmlspecialchars()函数,之前做过,会html实体化,<>会被转义
可以尝试"来闭合"

payload:

" onclick=alert('XSS') //
" onclick=alert('XSS') "

第三关

查看源码:





第3关


第3关 这该咋办啊

没有找到和".htmlspecialchars($str)."相关的结果."."
"; ?>
payload的长度:".strlen($str).""; ?>

分析:

和第二关类似,只是变成了单引号,闭合单引号即可

payload:

' onclick=alert('xss') '
' onclick=alert('xs') //

第四关

查看源码:





第4关


第4关 生无可恋

","",$str); $str3=str_replace("<","",$str2); echo "

没有找到和".htmlspecialchars($str)."相关的结果.

".'
'; ?>
payload的长度:".strlen($str3).""; ?>

分析:

在第二关的基础上进行了< >的过滤,但第二关payload没有 < >仍然可以使用

payload:

" onclick=alert('XSS') //
" onclick=alert('XSS') "

第五关

查看源码:





第5关


第5关 没错又是搜索

没有找到和".htmlspecialchars($str)."相关的结果.".'
'; ?>
payload的长度:".strlen($str3).""; ?>

分析:

strtolower()函数,把字符转换为小写,接着替换script标签和on使这个两个事件没法使用,但仍可以闭合引号,所以要使用其他标签通过javascript:alert('xss')来触发弹出
xss小游戏源码分析_第1张图片
xss小游戏源码分析_第2张图片

payload:

">

第六关

查看源码:





第6关


第6关 嗯 还是搜索

没有找到和".htmlspecialchars($str)."相关的结果.".'
'; ?>
payload的长度:".strlen($str6).""; ?>

分析:

替换了script标签,on,src,data,herf,且html实体化看起来似乎没问题,但相比前几关发现没有转换为小写,所以可大小写来绕过匹配

payload:

" ONclick=alert('XSS') //
">

第7关

查看源码:





第7关


第7关 猜一猜下面题目还有搜索嘛

没有找到和".htmlspecialchars($str)."相关的结果.".'
'; ?>
payload的长度:".strlen($str6).""; ?>

分析:

get方式传入keyword,strtolowe()函数变为小写,然后replace()函数匹配script,on,src,data,href,但是只是匹配了一次,所以可以嵌套绕过,最后htmlspecialchars(),所以< > 不能用,尝试闭合"

payload:

" oonnclick=alert('XSS') //

第八关

查看源码:





第8关


第8关 老铁要和我换友链嘛?

'; ?>
友情链接'; ?>
payload的长度:".strlen($str7).""; ?>

分析:

get方式传入keyword,strtolower()转换为小写,然后replace替换script,on,src,data,href,"("号html实体化了),然后发现又html实体化输入,似乎没有问题,然后发现友情链接,没有html实体化输入,可以尝试在这个位置绕过,但是都被过滤了,尝试编码绕过对JavaScript;alert('xss')编码(呸,不是编码)转义https://www.jianshu.com/p/6dcefb2a59b2(参考链接),目的是绕过replace,然后仍能被html解析
xss小游戏源码分析_第3张图片

payload:

javascript:alert('xss')
javascrip	t:alert('XSS')

第九关

查看源码:





第9关


第9关 添加友连again

'; ?>
友情链接'; } else { echo '

友情链接
'; } ?>
payload的长度:".strlen($str7).""; ?>

分析:

和第八关相同,只是判断链接是否合法,加上http://就可以了

payload:

javascript:alert('xss') //http://

第十关

查看源码:





第10关


第10关 嗯 搜索又出现了

","",$str11); $str33=str_replace("<","",$str22); echo "

没有找到和".htmlspecialchars($str)."相关的结果.

".'
'; ?>
payload的长度:".strlen($str).""; ?>

分析:

传入keyword和t_sort,keyword没有过滤,但是html实体化输出,而且没在标签内,所以应该没问题,看t_sort,过滤了< > ,而且没有实体化输出
尝试闭合引号

payload:

?keyword=123&t_sort=" type="text" onclick=alert('XSS') //

第十一关

查看源码:





第11关


第11关 为什么这么多搜索呢

","",$str11); $str33=str_replace("<","",$str22); echo "

没有找到和".htmlspecialchars($str)."相关的结果.

".'
'; ?>
payload的长度:".strlen($str).""; ?>

分析:

str和str00都html实体化而且不在script标签内部,且闭合为',应该无解,然后发现str33,没有实体化,$_SERVER['HTTP_REFERER']获取httpreferer信息,只是过滤了< > ,可以闭合双引号来绕过,不过我没明白这题啥用

payload:

" type = "text" onclick=alert('xss')//
xss小游戏源码分析_第4张图片

第十二关

查看源码:





第12关


第12关 黑人问号

","",$str11); $str33=str_replace("<","",$str22); echo "

没有找到和".htmlspecialchars($str)."相关的结果.

".'
'; ?>
payload的长度:".strlen($str).""; ?>

分析:

和上一关一样,xss位置变一下

payload:

" type = "text" onclick=alert('xss')//
xss小游戏源码分析_第5张图片

第十三关

查看源码:





第13关


第13关 做题好爽啊

","",$str11); $str33=str_replace("<","",$str22); echo "

没有找到和".htmlspecialchars($str)."相关的结果.

".'
'; ?>
payload的长度:".strlen($str).""; ?>

分析:

$_COOKIE["user"];获取cookie,然后过滤< > 没有实体化输入,尝试闭合双引号

payload:

user=" type = "text" onclick=alert('xss')//

xss小游戏源码分析_第6张图片

第十四关

查看源码:






第14关

第14关 恭喜你快要通关了

'; ?>

分析:

传入src,然后实体化输出,然后似乎无解,仔细看前面ng-include:,
ng-include 指令用于包含外部的 HTML 文件。包含的内容将作为指定元素的子节点。ng-include 属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一个域名下。所以传入其他关的xss,不过不知道这有啥用既然其他地点有xss
xss小游戏源码分析_第7张图片

payload:

src='level1.php?name='

由于引用的js代码失败,所以我没成功,但云靶机是对的,云靶机地址:https://www.xss.tv/
xss小游戏源码分析_第8张图片

第十五关

查看源码:





第15关


第15关 厉害了 Word哥

".$str5.""; ?>
payload的长度:".strlen($str5).""; ?>

分析:

get传入可以word,转换为小写,让过滤script,空格,/,可以使用url编码来绕过

符号 url编码
回车 %0d
换行 %0d

payload:

level15.php?keyword=

参考文章

国光大佬:https://www.sqlsec.com/2020/01/xss.html
最后欢迎访问我的博客:https://lmg66.github.io/

你可能感兴趣的:(xss小游戏源码分析)