1 package org.eclipse.jetty.nested;
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import java.io.BufferedInputStream;
16 import java.io.BufferedReader;
17 import java.io.ByteArrayOutputStream;
18 import java.io.File;
19 import java.io.IOException;
20 import java.io.InputStreamReader;
21 import java.io.PrintStream;
22 import java.net.InetSocketAddress;
23 import java.net.ServerSocket;
24 import java.net.Socket;
25 import java.net.SocketAddress;
26 import java.util.concurrent.CountDownLatch;
27
28 import javax.servlet.ServletException;
29 import javax.servlet.ServletOutputStream;
30 import javax.servlet.http.HttpServlet;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33
34 import org.eclipse.jetty.util.IO;
35 import org.eclipse.jetty.util.TypeUtil;
36
37 public class TestServlet extends HttpServlet
38 {
39
40
41
42
43 @Override
44 protected void doGet(final HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
45 {
46 resp.setContentType("text/plain");
47 final PrintStream out = new PrintStream(resp.getOutputStream());
48
49 out.println("Try out evil things.");
50
51 try
52 {
53 out.println("\nList home dir...");
54 for (File f : new File("/home").listFiles())
55 out.println(f);
56 }
57 catch(Throwable e)
58 {
59 e.printStackTrace(out);
60 }
61 try
62 {
63 out.println("\nList tmp dir...");
64 for (File f : new File("/var/tmp").listFiles())
65 out.println(f);
66 }
67 catch(Throwable e)
68 {
69 e.printStackTrace(out);
70 }
71
72 try
73 {
74 out.println("\nCreate a /var/tmp file...");
75 File file = new File("/var/tmp/eviltest");
76
77 out.println(file+" exists="+file.exists());
78 file.createNewFile();
79 file.deleteOnExit();
80 out.println(file+" exists="+file.exists());
81 file.delete();
82 }
83 catch(Throwable e)
84 {
85 e.printStackTrace(out);
86 }
87
88
89 try
90 {
91 out.println("\nOpen a localhost server socket ...");
92
93 ServerSocket socket = new ServerSocket();
94 socket.bind(new InetSocketAddress("localhost",0));
95 out.println("local port = "+socket.getLocalPort());
96 }
97 catch(Throwable e)
98 {
99 e.printStackTrace(out);
100 }
101
102 try
103 {
104 out.println("\nOpen a any server socket ...");
105
106 ServerSocket socket = new ServerSocket();
107 socket.bind(new InetSocketAddress(0));
108 out.println("local port = "+socket.getLocalPort());
109 }
110 catch(Throwable e)
111 {
112 e.printStackTrace(out);
113 }
114 try
115 {
116 out.println("\nTalk to any server socket ...");
117
118 final ServerSocket server = new ServerSocket();
119 server.bind(new InetSocketAddress(0));
120 out.println("local port = "+server.getLocalPort());
121 final int port = server.getLocalPort();
122
123 final CountDownLatch latch = new CountDownLatch(1);
124
125 new Thread()
126 {
127 public void run()
128 {
129 try
130 {
131 Socket inbound = server.accept();
132 out.println("accepted "+inbound);
133 BufferedReader in = new BufferedReader(new InputStreamReader(inbound.getInputStream()));
134 String data= in.readLine();
135 out.println("read "+data);
136 }
137 catch(Throwable e)
138 {
139 e.printStackTrace(out);
140 }
141 finally
142 {
143 latch.countDown();
144 }
145 }
146 }.start();
147
148
149 Socket socket = new Socket("localhost",port);
150 socket.getOutputStream().write("Hello World\n".getBytes());
151
152 latch.await();
153 socket.close();
154 }
155 catch(Throwable e)
156 {
157 e.printStackTrace(out);
158 }
159
160 try
161 {
162 out.println("\nRead to own content ...");
163 out.println("Real path / = "+getServletContext().getRealPath("/"));
164
165 for (File f : new File(getServletContext().getRealPath("/")).listFiles())
166 out.println(f);
167
168 }
169 catch(Throwable e)
170 {
171 e.printStackTrace(out);
172 }
173
174
175 try
176 {
177 out.println("\nWrite own content ...");
178
179 File wibble = new File(getServletContext().getRealPath("/wibble.txt"));
180 if (!wibble.exists())
181 wibble.createNewFile();
182
183 for (File f : new File(getServletContext().getRealPath("/")).listFiles())
184 out.println(f);
185
186 }
187 catch(Throwable e)
188 {
189 e.printStackTrace(out);
190 }
191
192 out.flush();
193 out.close();
194 }
195
196
197 }