1+ import javax .servlet .ServletException ;
2+ import javax .servlet .http .HttpServlet ;
3+ import javax .servlet .http .HttpServletRequest ;
4+ import javax .servlet .http .HttpServletResponse ;
5+ import java .io .IOException ;
6+ import java .net .URI ;
7+ import java .net .URL ;
8+ import java .net .URLClassLoader ;
9+ import java .net .URLStreamHandlerFactory ;
10+
11+ public class URLClassLoaderSSRF extends HttpServlet {
12+
13+ protected void doGet (HttpServletRequest request , HttpServletResponse response )
14+ throws ServletException , IOException {
15+ try {
16+ String url = request .getParameter ("uri" );
17+ URI uri = new URI (url );
18+ URLClassLoader urlClassLoader = new URLClassLoader (new URL []{uri .toURL ()}); // $ SSRF
19+ Class <?> test = urlClassLoader .loadClass ("test" );
20+ } catch (Exception e ) {
21+ // Ignore
22+ }
23+ }
24+
25+ protected void doPost (HttpServletRequest request , HttpServletResponse response )
26+ throws ServletException , IOException {
27+ try {
28+ String url = request .getParameter ("uri" );
29+ URI uri = new URI (url );
30+ URLClassLoader urlClassLoader = new URLClassLoader (new URL []{uri .toURL ()}, URLClassLoaderSSRF .class .getClassLoader ()); // $ SSRF
31+ Class <?> test = urlClassLoader .loadClass ("test" );
32+ } catch (Exception e ) {
33+ // Ignore
34+ }
35+ }
36+
37+ protected void doPut (HttpServletRequest request , HttpServletResponse response )
38+ throws ServletException , IOException {
39+ try {
40+ String url = request .getParameter ("uri" );
41+ URI uri = new URI (url );
42+
43+ URLStreamHandlerFactory urlStreamHandlerFactory = null ;
44+ URLClassLoader urlClassLoader = new URLClassLoader (new URL []{uri .toURL ()}, URLClassLoaderSSRF .class .getClassLoader (), urlStreamHandlerFactory ); // $ SSRF
45+ urlClassLoader .findResource ("test" );
46+ } catch (Exception e ) {
47+ // Ignore
48+ }
49+ }
50+
51+ protected void doDelete (HttpServletRequest request , HttpServletResponse response )
52+ throws ServletException , IOException {
53+ try {
54+ String url = request .getParameter ("uri" );
55+ URI uri = new URI (url );
56+ URLClassLoader urlClassLoader = URLClassLoader .newInstance (new URL []{uri .toURL ()}); // $ SSRF
57+ urlClassLoader .getResourceAsStream ("test" );
58+ } catch (Exception e ) {
59+ // Ignore
60+ }
61+ }
62+
63+ protected void doOptions (HttpServletRequest request , HttpServletResponse response )
64+ throws ServletException , IOException {
65+ try {
66+ String url = request .getParameter ("uri" );
67+ URI uri = new URI (url );
68+ URLClassLoader urlClassLoader =
69+ new URLClassLoader ("testClassLoader" ,
70+ new URL []{uri .toURL ()}, // $ SSRF
71+ URLClassLoaderSSRF .class .getClassLoader ()
72+ );
73+
74+ Class <?> rceTest = urlClassLoader .loadClass ("RCETest" );
75+ } catch (Exception e ) {
76+ // Ignore
77+ }
78+ }
79+
80+ protected void doTrace (HttpServletRequest request , HttpServletResponse response )
81+ throws ServletException , IOException {
82+ try {
83+ String url = request .getParameter ("uri" );
84+ URI uri = new URI (url );
85+ URLStreamHandlerFactory urlStreamHandlerFactory = null ;
86+
87+ URLClassLoader urlClassLoader =
88+ new URLClassLoader ("testClassLoader" ,
89+ new URL []{uri .toURL ()}, // $ SSRF
90+ URLClassLoaderSSRF .class .getClassLoader (),
91+ urlStreamHandlerFactory
92+ );
93+
94+ Class <?> rceTest = urlClassLoader .loadClass ("RCETest" );
95+ } catch (Exception e ) {
96+ // Ignore
97+ }
98+ }
99+ }
0 commit comments