首页 > 其他分享 >XSSLab保姆级教程

XSSLab保姆级教程

时间:2024-10-18 16:47:56浏览次数:10  
标签:教程 HTTP &# level alert 保姆 XSSLab payload 页面

XSS(Cross-Site Scripting)即为跨站脚本攻击。XSS-Lab是一个XSS的练习平台。可以在BUUOJ上很方便的进行练习。以下是我在做XSS-Lab的时候总结的题解和一些思路,给想要刷题的同学提供一些参考。

1.通用payload
<script>alert(1)</script>
可以直接加入新标签 level1
闭合原有标签后可以加入新标签 level2
οnmοuseοver='javascript:alert(1)'或者οnmοuseοver=alert(1)
使用了html实体编码 level3 level17 level18
闭合原有标签后过滤了<和> level4
οnclick=alert(1)
闭合原有标签后过滤了<和> level10
<a href=javascript:alert(1)>
绕过过滤了<script>和onmouseover level5
<a img=0 οnerrοr=alert(1)>
没有现成可填充标签且过滤了script level16
Tips
过滤<script>可以<Script>也可以<script >(空格只能在结尾)level6
绕过使用str_replace过滤为空,双写法 level7
对payload进行html编码绕过 level8 level9
空格可以用%0a替换 level16
通过改HTTP头部来做到XSS
HTTP_REFERER 在HTTP头中加入Referer level11
HTTP_USER_AGENT 在HTTP头中加入User-Agent level12
COOKIE在HTTP头中加入COOKIE信息 level13

angular中ng-include函数,可以包含外部的html页面。在服务器上写一个弹窗的页面,在原来的页面包含此页面。

绕过CORS可以使用加入使用在HTTP头中加入允许所有域名访问。level-15
2.题解
level-1

进入页面,给出了一个参数是name,我们尝试传入参数为test,查看源代码,如下图,此时的参数是在<h2>xxx</h2>标签中

所以我们直接尝试弹窗,构造payload为test<script>alert(123)</script>

level-2

进入页面,给出了一个参数是keyword,我们尝试传入参数为test,查看源代码,如下图,此时的参数是在<input name=keyword value="test">中

如果我们想要插入alert的代码,我们可以尝试构造如下


进入页面,我们直接尝试弹窗,构造payload为"><script>alert(1)</script>

level-3

进入页面,给出了一个参数是keyword,我们尝试传入参数为test,查看源代码,如下图,此时的参数是在<input name=keyword value='test'>中

和上道题目类似,只不过此时用来闭合value的为单引号,我们尝试payload为'><script>alert(1)</script>,查看源代码如下图

我们输入的<和>被转义成了&lt;和&gt;

查找资料,这里采用了实体编码htmlspecialchars,htmlspecialchars() 函数可以把一些预定义的字符转换为 HTML 实体。


可用的引号类型:

ENT_COMPAT 默认 仅编码双引号

ENT_QUOTES 编码双引号和单引号

ENT_NOQUOTES 不编码任何引号

所以此处我们不能选择有<和>的方式,但是可以使用不带有尖括号的特殊字符进行尝试:

onmouseover函数在鼠标指针移动到元素上被触发,onmouseover = 'javascript:alert(1)',在鼠标指针移动到元素会弹窗alert(1)。

闭合引号,构造payload为'onmouseover = 'javascript:alert(1)

level-4

进入页面,给出了一个参数是keyword,我们尝试传入参数为test,查看源代码,如下图,此时的参数是在<input name=keyword value='test'>中

用来闭合value的为双引号,我们尝试payload为"><script>alert(1)</script>,查看源代码如下图

当我们传入的payload中包含<和>就会被删除,所以和上道题一样,我们传入的payload中不能包含<和>,根据上道题的经验构造payload为"onmouseover = "javascript:alert(1)(注意此时用来闭合的为")

level-5

进入页面,给出了一个参数是keyword,我们尝试传入参数为test,查看源代码,如下图,此时的参数是在<input name=keyword value='test'>中

用来闭合value的为双引号,我们尝试payload为"><script>alert(1)</script>,查看源代码如下图

我们传入的payload中的<script>被替换成了</scr_ipt>。

构造payload为" οnmοuseοver="javascript:alert(1)

image-20220206000322694

我们传入的payload中的onmouseover被替换成了o_nmouseover。

有什么解决方法呢?

使用大小写绕过,html对大小写不敏感
可以使用超链接的方式<a href="javascript:alert(1)">,注意闭合标签,构造payload为test"><a href="javascript:alert(1)
这里对script的过滤是对<script进行的过滤,若是对整体<script>过滤的话,我们可以使用<script >来绕过.
空格只能加在尾部,< script>是不符合要求的。
以下我们使用超链接的方法绕过

此时的页面有一个_

点击此处

level-6
大小写过滤

进入页面,给出了一个参数是keyword,我们尝试传入参数为test,查看源代码,如下图,此时的参数是在<input name=keyword value="test">中

用来闭合value的为双引号,我们还是尝试payload为"><script>alert(1)</script>,查看源代码如下图

<script>还是被过滤了

onmouseover和href都被过滤了,我们就直接使用大小写过滤就轻松绕过了。

payload为"><Script>alert(1)</scripT>

level1-level6 都比较容易盲测

从level7开始,个人建议在对照github上的源码再进行练习。

level-7

4

直接看源代码


使用php中的str_replace函数对script,on,src,data,href进行了过滤,将关键字替换为空,且无法使用大小写绕过。但是str_replace函数只会替换一次,因此我们可以使用双写来绕过。

payload为test" oonnmouseover="javascript:alert(1),构成的完成句子如下

<input name=keyword value="test" oonnmouseover="javascript:alert(1)">

level-8
html编码绕过过滤

直接看源代码


本题在level-7的基础上多过滤了一个",且关键词不是被过滤为空,所以不能用双写的方法绕过。我们level-7的paylaod无法使用,我们此时可以构成的是payload恰好可以在<a>标签里面,自然而然就想到构成<a href="javascript:alert(1)">,payload为javascript:alert(1)。

将javascript代码使用html编码,就可以避免payload中的script被过滤了。

payload为&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;

level-9

本题在level-8的基础上,payload中必须要包含http。我们可以直接用注释符将后来的内容注释掉,我们填进去的http://不会对原来的句子造成影响。payload为javascript:alert(1) //http://,填充payload之后如下:


再使用html编码之后,payload为&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29; //http://

level-10

发现str33是可以通过t_sort传入参数的。

可以使用payload为?t_sort=test" type="text" οnmοuseοver="javascript:alert(1)

当然也可以使用onclick属性构成payload为?t_sort=test type="text" οnclick=alert(1)

此时构成的input如下


level 11-level13 都是通过更改HTTP头来做到XXS

level-11
HTTP_REFERER

在HTTP头中加入Referer

进入页面,直接查看源代码,如下图所示。

尝试传入参数,发现只有t_sort是可用的,但是引号会被转义,传入的payload中的引号同时也被转义。目前看起来没有什么可以利用的点。

查看源代码


查看源代码可知,HTTP_REFERER过滤了<和>之后赋值给了t_ref,我们可以构造$str33为test" type="text" οnclick="alert(1),此时构成的标签如下:


可以使用burp在HTTP头中加入Referer: test" type="text" οnclick="alert(1),这样就可以发送HTTP_REFERER。

level-12
HTTP_USER_AGENT

在HTTP头中加入User-Agent

直接查看源码


和level-11类似,只不过这次要添加的头部信息是HTTP_USER_AGENT,$str33为test" type="text" οnclick="alert(1)"

此时input标签内容如下


利用burp改包

level-13
COOKIE

在HTTP头中加入COOKIE信息

直接查看源码


和level-11类似,只不过这次要添加的头部信息是$_COOKIE,$str33为test" type="text" οnclick="alert(1)"

此时input标签内容如下


利用burp改包

level-14
level-14的环境出现问题

level-15
angular中ng-include函数,可以包含外部的html页面。

在服务器上写一个弹窗的页面,在原来的页面包含此页面。绕过CORS可以使用加入使用在HTTP头中加入允许所有域名访问。


ng-include是Angularjs中的指令,可以包含外部的html文件。所以我们可以用来包含一个存在XSS的页面,最简单的思路就是包含一个前面我们已经打通的页面,但是并没有打通。

另辟蹊径,我们也可以自己在服务器上传一个存在XSS的页面,然后payload中包含这个页面。

构造存在XSS的页面的代码如下:


payload为src='http://xxx.xxx.xxx.xxx.xxx'

但是并没有成功,检查一下页面

注意到因为CORS被阻拦,我们在HTTP头中加入允许所有域名访问

level-16
没有现成可填充标签且过滤了script标签

<a img=0 οnerrοr=alert(1)>

查看源码


我们通过get参数传入的keyword,过滤了/,,script,可以显示在中间的位置。

构造payload为<img src=0 οnerrοr=alert(1)>,过滤的空格可以用%0a替换,最终的为?payloadkeyword=<img%0asrc=0%0aοnerrοr=alert(1)>

level-17
传参不严格造成XSS

οnmοuseοver=alert(1)


传入的参数都经过htmlspecialchars处理,因此payload中不能包含&,",',<,>。传参的同时,可以进行XSS

arg01=1&arg02=2 οnmοuseοver=alert(1)

level-18

几乎和level-18一样,payload为arg01=1&arg02=2 οnmοuseοver=alert(1)

标签:教程,HTTP,&#,level,alert,保姆,XSSLab,payload,页面
From: https://blog.csdn.net/2401_86014070/article/details/143054117

相关文章

  • JDK 安装教程
    在Java开发中,安装JDK(JavaDevelopmentKit)是第一步。本文将详细介绍JDK的安装过程,确保你能顺利搭建Java开发环境。一、准备工作下载JDK打开浏览器,访问Oracle官方网站。在官网找到JDK下载页面,根据你的操作系统选择对应的版本进行下载。例如,Windows系统可以......
  • 通义灵码实践教程
    点击此处,立即下载通义灵码!https://tongyi.aliyun.com/lingma/编码使用实践通义灵码最佳使用实践参考通义灵码是JetBrains或VSCode集成开发环境(IDE)中嵌入的一款智能开发助手工具,旨在通过人工智能技术简化软件开发过程,提升开发效率。本文将介绍在开发过程中如何深度体验多种辅助......
  • Ruby教程
    Ruby是一种简洁而强大的编程语言,以下是一个Ruby教程:一、安装Ruby在官方网站(https://www.ruby-lang.org/)下载适合你操作系统的Ruby安装包。按照安装向导进行安装。安装完成后,可以在命令行中输入ruby-v来检查Ruby的版本,确认安装成功。二、基本语法变量和数据类......
  • Navicat Premium 16.0.90 for Mac 破解版教程
    说明本人的系统是macOS15.0.1(Sequoia),安装的版本为NavicatPremium16.0.90,资源均为从网络处下载,安装破解版有风险,请自己权衡。下载资源从https://www.mhero.com/mac-soft/dev/navicat-premium.html下载免费的Navicat。解压的密码为mhero.com。也可以从此处通过网盘分......
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-3-启动浏览器(详细教程)
    1.简介 通过前边两篇文章跟随宏哥学习想必到这里已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动两大浏览器。按市场份额来说,全球前三大浏览器是:IE.Firefox.Chrome。但是微软已经在Win10中不维护IE浏览器了,用Edge浏览器代替或者兼容IE模式的浏览器,因此宏哥这......
  • Unity Apple Vision Pro 保姆级开发教程-环境配置、导入 PolySpatial 案例、程序发布
    视频教程Unity环境配置、导入PolySpatial案例、程序发布到设备教程说明这期教程我将介绍使用Unity开发AppleVisionPro应用所需要的Unity环境配置,以及如何导入PolySpatial样例场景、将Unity程序打包到头显中运行。开发前期准备(软硬件要求,开启visionpro......
  • Unity Apple Vision Pro 保姆级开发教程-准备阶段
    视频教程:UnityPolySpatial开发AppleVisionPro教程,三十分钟快速了解开发AppleVisionPro使用原生开发和unity开发有什么区别如果你的项目需要充分利用AppleVisionPro的独特功能、追求最佳的性能表现,或者针对特定于VisionOS的开发场景,原生开发可能是更好的......
  • DevExpress WinForms中文教程:Data Grid - 如何为网格绑定ADO. NET数据
    在本教程中,您将学习如何做到以下几点:在一个WinForms项目中创建并配置ADO.NET数据源将DevExpressWinForms数据网格绑定到数据源。将更改发布到数据库。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能......
  • 最新版给小白的PHP在线客服系统源码 带搭建教程
    在线客服系统源码是一种利用计算机技术实现在线客服功能的软件代码。随着互联网的发展,越来越多的企业意识到在线客服的重要性,因此出现了许多在线客服系统源码。本文将介绍在线客服系统源码的基本功能、搭建教程。需求分析:在线客服系统的核心功能包括:实时聊天:客户与客服人员能够......
  • 昇思MindSpore进阶教程--故障恢复
    大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。技术上主攻前端开发、鸿蒙开发和AI算法研究。努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧概述模型训练过程中,可能会遇到故障。重新启动训练,各种资源的开销是巨大的。为此MindSpore提供了故障......