-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsolve.js
49 lines (40 loc) · 1.44 KB
/
solve.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
const NodeRSA = require('node-rsa');
const axios = require('axios');
function restoreMessage(jsonData) {
const privateKeyData = jsonData.key;
const encryptedMessage = jsonData.task.c;
const key = new NodeRSA(privateKeyData, 'pkcs8-private');
const encryptedBuffer = Buffer.from(encryptedMessage, 'base64');
const decryptedMessage = key.decrypt(encryptedBuffer, 'utf8');
return decryptedMessage.split(" ")[2];
}
async function main() {
const url = process.argv[2];
if (!url) {
console.log("Usage: node solve.js https://example.com");
return;
}
const session = axios.create();
try {
let lastResponse = await session.get(`${url}/generate-task`);
for (let i = 0; i < 1337; i++) {
const ans = restoreMessage(JSON.parse(Buffer.from(lastResponse.headers['set-cookie'][0].split(';')[0].split('=')[1], 'base64').toString()));
const r = await session.post(`${url}/check-task`, {input: ans}, {
headers: {
'Cookie': lastResponse.headers['set-cookie'],
'Content-Type': 'application/json'
},
proxy: { host: '127.0.0.1', port: 8080 }
});
const s = r.data;
if (s.flag) {
console.log(s.flag);
return;
}
lastResponse = r;
}
} catch (error) {
console.error(error);
}
}
main();