diff options
| author | Louis Burda <quent.burda@gmail.com> | 2024-04-17 02:38:10 +0200 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2024-04-17 02:38:41 +0200 |
| commit | 67484e60f9627d69e406a533afd4bb2be9480c21 (patch) | |
| tree | 18f048aacca8902c9ba095699d34d86502727cfd /solve/server.js | |
| parent | 727aaf505985fdbcf3ceaf5148df8ce8fb427ed0 (diff) | |
| download | cscg2024-wsbx-master.tar.gz cscg2024-wsbx-master.zip | |
Diffstat (limited to 'solve/server.js')
| -rw-r--r-- | solve/server.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/solve/server.js b/solve/server.js new file mode 100644 index 0000000..03b3a8e --- /dev/null +++ b/solve/server.js @@ -0,0 +1,47 @@ +const path = require('node:path'); +const express = require('express'); +const morgan = require('morgan'); +const puppeteer = require('puppeteer'); + +const HOST = process.env.HOST ?? '127.0.0.1'; +const PORT = process.env.PORT ?? '1337'; +const FLAG = process.env.FLAG ?? 'CSCG{fake_flag}'; +const BOT_TIMEOUT = Number(process.env.BOT_TIMEOUT || 60000); +const PAGE_URL = `http://localhost:${PORT}`; + +const app = express(); +app.use(morgan('common')); +app.use(express.static(path.join(__dirname, 'static'))); + +app.get('/report', express.json(), (req, res) => { + const { code = '' } = req.query; + visit(code); + res.status(204).end(); +}); + +app.listen(PORT, HOST, () => console.log(`Listening on ${HOST}:${PORT}`)); + +async function visit(code) { + try { + const url = new URL(PAGE_URL); + + const browser = await puppeteer.launch({ + args: [ '--no-sandbox' ], + headless: false //'old', + }); + + console.log('Placing flag'); + const page = await browser.newPage(); + await page.goto(url.toString()); + await page.evaluate((flag) => localStorage.setItem('flag', flag), FLAG); + await page.close(); + + url.searchParams.set('code', code); + console.log(`Visiting ${url}`); + const playerPage = await browser.newPage(); + setTimeout(() => browser.close(), BOT_TIMEOUT * 1000); + await playerPage.goto(url.toString()); + } catch (error) { + console.error(error); + } +} |
