summaryrefslogtreecommitdiffstats
path: root/solve/server.js
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2024-04-17 02:38:10 +0200
committerLouis Burda <quent.burda@gmail.com>2024-04-17 02:38:41 +0200
commit67484e60f9627d69e406a533afd4bb2be9480c21 (patch)
tree18f048aacca8902c9ba095699d34d86502727cfd /solve/server.js
parent727aaf505985fdbcf3ceaf5148df8ce8fb427ed0 (diff)
downloadcscg2024-wsbx-master.tar.gz
cscg2024-wsbx-master.zip
Add solutionHEADmaster
Diffstat (limited to 'solve/server.js')
-rw-r--r--solve/server.js47
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);
+ }
+}