-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathbreach.js
47 lines (38 loc) · 1.29 KB
/
breach.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
import { LogMessage } from 'utils.js'
export async function main(ns) {
ns.disableLog('ALL');
const [silent = false] = ns.args;
const servers = GetAllServers(ns);
let rooted = 0;
let newlyRooted = 0;
for (const server of servers) {
if (ns.hasRootAccess(server)) {
rooted++;
}
else if (await Breach(ns, server) == true) {
ns.tprint('SUCCESS: Rooted new server: ' + server);
newlyRooted++;
}
}
if (newlyRooted > 0) {
ns.tprint('SUCCESS: Successfully breached ' + newlyRooted + ' new servers (before: ' + rooted + ' after: ' + (rooted + newlyRooted) + ')');
LogMessage(ns, 'SUCCESS: Successfully breached ' + newlyRooted + ' new servers (before: ' + rooted + ' after: ' + (rooted + newlyRooted) + ')');
}
else if (!silent)
ns.tprint('FAIL: No new servers rooted.');
}
async function Breach(ns, server) {
try { ns.brutessh(server); } catch { }
try { ns.ftpcrack(server); } catch { }
try { ns.relaysmtp(server); } catch { }
try { ns.httpworm(server); } catch { }
try { ns.sqlinject(server); } catch { }
try { ns.nuke(server); } catch { }
return ns.hasRootAccess(server);
}
export function GetAllServers(ns, root = 'home', found = []) {
found.push(root);
for (const server of ns.scan(root))
if (!found.includes(server)) GetAllServers(ns, server, found);
return found;
}