关于XSS的靶场详解

这篇博客详细记录了一次XSS跨站脚本攻击的测试过程,从Level1到Level20,逐级深入,展示了各种常见的XSS过滤和绕过技巧,包括HTML实体编码、事件触发、URL参数篡改等。博主通过分析源码,发掘隐藏的输入点,利用JavaScript、onclick属性、cookie、referer、UA等手段构造有效payload,揭示了Web应用安全防护的重要性。
摘要由CSDN通过智能技术生成

xss测试链接

目录

Level1

Level2

Level3

Level4

Level5

Level6

Level7

Level8

Level9

Level10

Level11

Level12

Level13

Level14

Level15

Level16

Level17

Level18

Level19

Level20


Level1

 右击查看页面源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  //这里是显示一条指定消息和一个确认按钮的警告框
{     
confirm("完成的不错!");//指定消息完成得不错!
 window.location.href="level2.php?keyword=test"; //刷新当前页面,并且重定向到level2
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户test</h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:4</h3></body>
</html>

在script内,如果alert函数被调用执行,则会弹出警示框,重定向到level2

这里虽然没有输入框,但是在url内,如果我们将name=后面的参数改为我们想要的,页面也会随之改变

在url上写一个弹窗脚本

<script>alert()</script>

由于alert()被调用并且执行,window.location.href进行重定向


Level2

输入框执行我们输入的内容后,在上方进行回显,构造一个脚本

<script>alert()</script>

理应执行后跳出弹窗,这里输入的内容可能被过滤

右击查看一下源码

果然我们输入的<被进行HTML实体编码

HTML实体编码

        命名字体:以&开头,以分号结尾。列如“<”的编码是“&lt;”

        字符编码:十进制,十六进制ASCII码或者Unicode字符编码,样式为“&#数值;”,如“<”可以编码为“&#060;”和“&#x3c;”

但是在input标签的value处,没有将我们输入的内容进行严格过滤,所有手动闭合value,再执行脚本

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

这里有两个输入点,从url输入或者从value输入


Level3

尝试输入<script>alert()</script>,失败了

查看输入后的源码,这里连value输入的内容也进行了过滤

这边依旧是如果script内的alert函数被调用,则跳转第四关

假设我们在这里构造了一个事件,由于当事件发生时,可以执行 JavaScript,比如当用户点击一个 HTML 元素时,就会从事件处理程序中调用函数

构造一个payload,这里用onlcik,payload

' onclick=alert() '

注意:这里最好不要复制,自己打,复制可能会出错


Level4

输入脚本的后,点击搜索,可以看见原本的<直接被过滤

类似上一题,我们依旧利用事件

" onclick=alert(1) "

 最好不要复制,不知道是我电脑原因还是bug,复制上去跳转不成功,手打就可以


Level5

当我输入<script>alert()</script>的时候,没想到直接将输入的内容进行添加下划线过滤,只能尝试别的方法

οnclick=alert()也不行

script不行,onclick不行,尝试利用其他的语句测试

列举一些常用的xss语句:

<script>alert(1)</script>

<img src=ganyu οnerrοr=alert(1)>

<svg οnlοad=alert(1)>

<a herf=javascript:alert(1)>

这里尝试了一下,javascript没有被过滤,可行

这里直接输入<a herf=javascript:alert(1)>是失败的,没有将前面内容闭合

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

点击">即可


Level6

输入<script>alert()</script> 失败了,将内容回显在页面上,查看源代码

果然将内容进行了过滤,我们尝试使用onclick、javascript、onerror、onload

还是只有Javascript 没被过滤,利用上题的方法试试

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

失败了,查看一下源码

直接将href过滤了

可以尝试双写、或者大小写、或者编码绕过,这里只能大小写尝试

" /> <a hrEf=javascript:alert()>


Level7

神奇,输入<script>alert()</script>的时候

直接是将我script删除,大写也不行,试试双写

注意:输入 scriptscript是不行的,这里我输入的是scrscriptipt,随便什么都行,把script包在里面就行了,记得将前面的内容闭合,成功了

"><scrscriptipt>alert()</scrscriptipt>


Level8

当我们输入内容的时候,value的内容会直接带入href,,触发友情链接的时候,就会执行带入的参数

利用这个特点javascript构造

javascript:alert()

失败了,将输入的javascript过滤

尝试大小写绕过,也不行,这里可以利用刚才说过的编码,既然他检测到了javascript,将script进行编码绕过

利用hackbar,进行HTML实体编码

java&#115;&#99;&#114;&#105;&#112;&#116;:alert()


Level9

查看一下源码

直接告诉我们输入的内容不符合规范,毕竟这里得输入规范的url才行,猜测可能是对协议进行检测 ,如检测http://

真的可以了,如果我们将ganyu替换成javascript:alert()呢【注意:将script实体化】

迎来一个问题,如何去掉http://,前面说到是对http://的一个检测,这里尝试能否注释掉

java&#115;&#99;&#114;&#105;&#112;&#116;:alert()//http://


Level10

除了url没有任何输入点,尝试在url写入脚本

直接回显,查看代码也直接将我们输入的内容进行HTML实体化

我们查看到了有一个表,但是页面没有显示关于这个表的内容,而且表内利用了input函数并且隐藏,用于接受标准输入数据,而后面的type=“hidden”用于隐藏域

value内为空,我们尝试在value输入

?t_link=ganyu&t_history=ganyu&t_sort=ganyu

有一行有回显

构造payload,然后点击即可【这里不一定是button,只是用作于显示而已】

t_sort=" οnclick=alert() type="button""


Level11

右击查看源码 ,发现和上一题有个类似的地方

我们继续像上一题那样,但这次是传4个参数过去

t_link=ganyu&t_history=ganyu&t_sort=ganyu&t_ref=ganyu

可以看到,这里t_sort的value有显示参数,继续像第十题那样构造payload

t_sort=" οnclick=alert() type="button""

超出了预期,并没有反映,查看了一下源码,被过滤

回去看下源代码,这里有一个特殊的referer

Reffer是HTTP请求header的一部分,当浏览器向web 服务器发送请求的时候,头信息里就有包含,比如在www.Firefox.com 里有一个www.baidu.com链接,那么点击这个链接 ,它的header信息里就会看见有:referer=http://www.Firefox.com,说明是被引用过来的

熟悉sql注入的应该会熟悉这个referer注入,我们尝试利用referer来传参

打开HackBar,点击referer

点击发送,在代码界面我们可以看到输入的ganyu成功在value回显

尝试在t_ref 写入参数

t_ref=" onclick=alert() type="botton""


Level12

一看源码,这个熟悉,也是类似SQL的ua注入

UA是什么?UA也称User-Agent,当用户发起一个请求时,网站会通过判断 UA的数据,如(名称,版本,浏览器内核,内核版本)等等,来给不同的操作系统,不同的浏览器发送不同的页面

利用Hackbar的ua

先传个参数进去试试

成功了,直接构造payload吧

t_ua=" onclick=alert() type="botton""

点击发送,成功


Level13

这边给出了提示,利用cookie传参

看下百度的回答,是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。当用户第一次访问页面的时候,服务器会生成一个用户特有的Cookie,之后浏览器会根据用户设置的Cookie信息加载出内容

简单来说,Cookie其实就是用户凭证的意思

知道了这些信息之后第一步还是利用HackBar的cookie查看是否能利用,勾选cookie,传入参数

这里好像不能用这个HackBar

试试bp行不行,点击重放

这里隐藏了一个user,在user后面输入参数试试

成功了,既然知道了隐藏的user,我们尝试继续利用HackBar

user=t_ua=" onclick=alert() type="botton""

点击text框,成功


Level14

这啥鬼,查看一下源码就一个内联框架,这题有bug?


Level15

没有任何输入点,查看一下源码

发现一个ng-include,include作用是将同一服务器的html文件包含进来,和src进行传参,在请求 src 资源时会将其指向的资源下载并应用到文档中,比如 JavaScript 脚本,img 图片等等,在这里我们将src指向任意一关,输入对应的xss弹窗脚本即可。

?src='level1.php?name=<img src="ganyu" onerror=alert(1)>'

这一关可以做,但是我这里没法跳转下一关,利用src包含任意一关卡的php源码,  利用那一关的弹窗完成这关即可


Level16

keyword后输入的内容回显,查看一下源码发现被center包裹,center用于居中显示文本

看看能不能利用这个进行弹窗

<script>alert()</script>

失败了,被过滤

查看一下都有什么被过滤了,还好似乎就过滤script

传入,还过滤??

<img src="" onerror=alert(1)>

过滤了空格,看看url编码表的空格是什么然后绕过吧

?keyword=<img%0asrc=""%0aonerror=alert(1)>


Level17

查看一下源码,发现有一个embed标签,用来嵌入内容,比如插件

尝试对值进行修改

构造payload【前提是你得有flash插件】

?arg01=a&arg02 onfocus=alert(1)


Level18

同理

Level19

Level20

很可惜这里都设计到falsh插件和flash xss,无法做下去了

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值