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