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

xss靶场 pwnfunction WW3

目录

 代码

代码分析

payload构造

结果


代码

<div><h4>Meme Code</h4><textarea class="form-control" id="meme-code" rows="4"></textarea><div id="notify"></div>
</div><script>/* Utils */const escape = (dirty) => unescape(dirty).replace(/[<>'"=]/g, '');const memeTemplate = (img, text) => {return (`<style>@import url('https://fonts.googleapis.com/css?family=Oswald:700&display=swap');`+`.meme-card{margin:0 auto;width:300px}.meme-card>img{width:300px}`+`.meme-card>h1{text-align:center;color:#fff;background:black;margin-top:-5px;`+`position:relative;font-family:Oswald,sans-serif;font-weight:700}</style>`+`<div class="meme-card"><img src="${img}"><h1>${text}</h1></div>`)}const memeGen = (that, notify) => {if (text && img) {template = memeTemplate(img, text)if (notify) {html = (`<div class="alert alert-warning" role="alert"><b>Meme</b> created from ${DOMPurify.sanitize(text)}</div>`)}setTimeout(_ => {$('#status').remove()notify ? ($('#notify').html(html)) : ''$('#meme-code').text(template)}, 1000)}}
</script><script>/* Main */let notify = false;let text = new URL(location).searchParams.get('text')let img = new URL(location).searchParams.get('img')if (text && img) {document.write(`<div class="alert alert-primary" role="alert" id="status">`+`<img class="circle" src="${escape(img)}" onload="memeGen(this, notify)">`+`Creating meme... (${DOMPurify.sanitize(text)})</div>`)} else {$('#meme-code').text(memeTemplate('https://i.imgur.com/PdbDexI.jpg', 'When you get that WW3 draft letter'))}
</script>

代码分析

经过分析大部分的输入输出都被过滤函数过滤了例如下图

过滤了以后再寻找新的注入点,看一下这里,漏洞点就在这里

payload构造

对于Jquery.html()和innerHTML是有区别的,来个例子来解释一下

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

输入上面一样的东西对于innerHTML来说,他会补全标签,且style中不允许有标签,如果有标签的话里面的内容会被当作文本解析,里面的内容无法执行,所以就会出现下面那个样子

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

对于Jquery.html的话对于标签的处理是先调用htmlPrefilter() 这个函数,然后再用innerHTML

调用htmlPrefilter() 这个函数会将你的输入进行一个匹配,所匹配的代码就是<div/>这个样子,然后他会对你标签进行补全,补完以后就成这样了<div></div>

上面的例子就成了这样,其中script就逃逸出来了,然后中间的两个标签是替换后的标签,然后最上面的标签是innerHTML整出来的标签,然后第一个和第三个标签闭合了

(注:这个技巧对于Jquery.html版本是有要求的)

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

然后回来看一下这道题,首先进行的是DOMPurify这个过滤然后再进行.html,这样是不是就可以使用上面的技巧去绕过

但是想要触发这个.html还需要notify为true,但是这里是false

这里我们就要想办法进行DOM破坏了

然后我们尝试使用<img name=notify>来绕过,为什么不使用<img id=notify>,因为id不允许覆盖已经存在的值,但是name可以覆盖

所以我们构造如下payload

<img name=notify><style><style/><script>alert()//

然后需要我们进入到刚刚分析的漏洞点,所以我们需要进入下图所示,但是只有当img图片加载成功才可以,所以我们需要再img传一个真值,且img标签中属性的执行是异步的所以在src加载的过程中,下面的text也会加载,然后才是onload加载,这样payload也加载到了memeGen里面

所以最终传参为

img=valid_img_url&text=<img name=notify><style><style/><script>alert()//

结果

这里图片源可以添加一个更容易访问的图片,如果很难访问的图片的话可能会因为访问超时而没有回应

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • EMC学习之接地与平面
  • 表格解析调研
  • 【Python】函数进阶(下)
  • 写给大数据开发:在Databricks中自定义函数
  • 前端开发攻略---在Vue3项目中修改Element-Plus主题色
  • Kubernetes-Pod调度基础
  • 昇腾 - AscendCL C++应用开发 图像文件的解码时硬件对图像的宽度和高度的处理方式
  • Python开发中,SQLAlchemy 的同步操作和异步操作封装,以及常规CRUD的处理。
  • Java 3.1 - 计算机网络
  • dubbo:dubbo+zookeeper整合nginx实现网关(四)
  • oracle liunx 常用命令
  • OpenID Connect(OIDC)认证--keycloak与springboot项目的整合
  • SpringBoot的内置缓存以及整合第三方缓存
  • 终端文档安全管理系统是什么?一文给你详解!
  • Spring Boot 3.3 【六】一文读懂 Logback 日志框架
  • SegmentFault for Android 3.0 发布
  • [译]Python中的类属性与实例属性的区别
  • Angular 响应式表单 基础例子
  • EOS是什么
  • JS基础之数据类型、对象、原型、原型链、继承
  • Lucene解析 - 基本概念
  • nginx 配置多 域名 + 多 https
  • oschina
  • PHP变量
  • ReactNative开发常用的三方模块
  • redis学习笔记(三):列表、集合、有序集合
  • Selenium实战教程系列(二)---元素定位
  • Zsh 开发指南(第十四篇 文件读写)
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 聊聊directory traversal attack
  • 树莓派用上kodexplorer也能玩成私有网盘
  • 组复制官方翻译九、Group Replication Technical Details
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (二十四)Flask之flask-session组件
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (接口自动化)Python3操作MySQL数据库
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (学习日记)2024.01.09
  • (循环依赖问题)学习spring的第九天
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)VirtualBox安装增强功能
  • (转)socket Aio demo
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .libPaths()设置包加载目录
  • .NET MVC第三章、三种传值方式
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [012-1].第12节:Mysql的配置文件的使用
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [C/C++]关于C++11中的std::move和std::forward