Advertisement
smeacham

HTB - HTTP Response Splitting

Dec 17th, 2013
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.17 KB | None | 0 0
  1.    
  2.  
  3. // ==========================================================================
  4. // Copyright (c) 1996 Mort Bay Consulting Pty. Ltd. All rights reserved.
  5. // $Id: Dump.java,v 1.23.2.1 2003/10/31 12:17:11 gregwilkins Exp $
  6. // ---------------------------------------------------------------------------
  7.  
  8. package org.mortbay.servlet;
  9.  
  10. import java.io.IOException;
  11. import java.io.OutputStream;
  12. import java.io.PrintWriter;
  13. import java.lang.reflect.Field;
  14. import java.util.Enumeration;
  15. import java.util.Locale;
  16. import javax.servlet.ServletConfig;
  17. import javax.servlet.ServletException;
  18. import javax.servlet.UnavailableException;
  19. import javax.servlet.http.Cookie;
  20. import javax.servlet.http.HttpServlet;
  21. import javax.servlet.http.HttpServletRequest;
  22. import javax.servlet.http.HttpServletResponse;
  23. import org.mortbay.html.Break;
  24. import org.mortbay.html.Font;
  25. import org.mortbay.html.Heading;
  26. import org.mortbay.html.Page;
  27. import org.mortbay.html.Select;
  28. import org.mortbay.html.Table;
  29. import org.mortbay.html.TableForm;
  30. import org.mortbay.http.HttpException;
  31. import org.mortbay.util.Code;
  32. import org.mortbay.util.Loader;
  33.  
  34. /* ------------------------------------------------------------ */
  35. /** Dump Servlet Request.
  36.  *
  37.  */
  38. public class Dump extends HttpServlet
  39. {
  40.     /* ------------------------------------------------------------ */
  41.     String pageType;
  42.  
  43.     /* ------------------------------------------------------------ */
  44.     public void init(ServletConfig config)
  45.          throws ServletException
  46.     {
  47.         super.init(config);
  48.     }
  49.  
  50.     /* ------------------------------------------------------------ */
  51.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  52.         throws ServletException, IOException
  53.     {
  54.         doGet(request,response);
  55.     }
  56.  
  57.     /* ------------------------------------------------------------ */
  58.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  59.  
  60.        throws ServletException, IOException
  61.     {
  62.         String info=request.getPathInfo();
  63.         if (info!=null && info.endsWith("Exception"))
  64.         {
  65.             try
  66.             {
  67.                 throw (Throwable)(Loader.loadClass(this.getClass(),
  68.                                                    info.substring(1)).newInstance());
  69.             }
  70.             catch(Throwable th)
  71.             {
  72.                 throw new ServletException(th);
  73.             }
  74.         }
  75.  
  76.         String redirect=request.getParameter("redirect");
  77.         if (redirect!=null && redirect.length()>0)
  78.         {
  79.             response.sendRedirect(redirect);
  80.             return;
  81.         }
  82.  
  83.         String buffer=request.getParameter("buffer");
  84.         if (buffer!=null && buffer.length()>0)
  85.             response.setBufferSize(Integer.parseInt(buffer));
  86.  
  87.         request.setCharacterEncoding("UTF-8");
  88.         response.setContentType("text/html");
  89.  
  90.         if (info!=null && info.indexOf("Locale/")>=0)
  91.         {
  92.             try
  93.             {
  94.                 String locale_name=info.substring(info.indexOf("Locale/")+7);
  95.                 Field f=java.util.Locale.class.getField(locale_name);
  96.                 response.setLocale((Locale)f.get(null));
  97.             }
  98.             catch(Exception e)
  99.             {
  100.                 Code.ignore(e);
  101.                 response.setLocale(Locale.getDefault());
  102.             }
  103.         }
  104.  
  105.         if (info!=null && info.indexOf("Cookie")>=0)
  106.         {
  107.             Cookie cookie = new Cookie("Cookie",info);
  108.             cookie.setMaxAge(300);
  109.             cookie.setPath("/");
  110.             cookie.setComment("Cookie from dump servlet");
  111.             if (info.indexOf("Cookie0")>=0)
  112.                 cookie.setVersion(0);
  113.             else if (info.indexOf("Cookie1")>=0)
  114.                 cookie.setVersion(1);
  115.             else if (info.indexOf("Cookie2")>=0)
  116.                 cookie.setVersion(2);
  117.             response.addCookie(cookie);
  118.         }
  119.  
  120.         String pi=request.getPathInfo();
  121.         if (pi!=null && pi.startsWith("/ex"))
  122.         {
  123.             OutputStream out = response.getOutputStream();
  124.             out.write("</H1>This text should be reset</H1>".getBytes());
  125.             if ("/ex0".equals(pi))
  126.                 throw new ServletException("test ex0",new Throwable());
  127.             if ("/ex1".equals(pi))
  128.                 throw new IOException("test ex1");
  129.             if ("/ex2".equals(pi))
  130.                 throw new UnavailableException("test ex2");
  131.             if ("/ex3".equals(pi))
  132.                 throw new HttpException(501);
  133.         }
  134.  
  135.  
  136.         PrintWriter pout = response.getWriter();
  137.         Page page=null;
  138.  
  139.         try{
  140.             page = new Page();
  141.             page.title("Dump Servlet");
  142.  
  143.             page.add(new Heading(1,"Dump Servlet"));
  144.             Table table = new Table(0).cellPadding(0).cellSpacing(0);
  145.             page.add(table);
  146.             table.newRow();
  147.             table.addHeading("getMethod:&nbsp;").cell().right();
  148.             table.addCell(""+request.getMethod());
  149.             table.newRow();
  150.             table.addHeading("getContentLength:&nbsp;").cell().right();
  151.             table.addCell(Integer.toString(request.getContentLength()));
  152.             table.newRow();
  153.             table.addHeading("getContentType:&nbsp;").cell().right();
  154.             table.addCell(""+request.getContentType());
  155.             table.newRow();
  156.             table.addHeading("getRequestURI:&nbsp;").cell().right();
  157.             table.addCell(""+request.getRequestURI());
  158.             table.newRow();
  159.             table.addHeading("getRequestURL:&nbsp;").cell().right();
  160.             table.addCell(""+request.getRequestURL());
  161.             table.newRow();
  162.             table.addHeading("getContextPath:&nbsp;").cell().right();
  163.             table.addCell(""+request.getContextPath());
  164.             table.newRow();
  165.             table.addHeading("getServletPath:&nbsp;").cell().right();
  166.             table.addCell(""+request.getServletPath());
  167.             table.newRow();
  168.             table.addHeading("getPathInfo:&nbsp;").cell().right();
  169.             table.addCell(""+request.getPathInfo());
  170.             table.newRow();
  171.             table.addHeading("getPathTranslated:&nbsp;").cell().right();
  172.             table.addCell(""+request.getPathTranslated());
  173.             table.newRow();
  174.             table.addHeading("getQueryString:&nbsp;").cell().right();
  175.             table.addCell(""+request.getQueryString());
  176.  
  177.  
  178.  
  179.             table.newRow();
  180.             table.addHeading("getProtocol:&nbsp;").cell().right();
  181.             table.addCell(""+request.getProtocol());
  182.             table.newRow();
  183.             table.addHeading("getScheme:&nbsp;").cell().right();
  184.             table.addCell(""+request.getScheme());
  185.             table.newRow();
  186.             table.addHeading("getServerName:&nbsp;").cell().right();
  187.             table.addCell(""+request.getServerName());
  188.             table.newRow();
  189.             table.addHeading("getServerPort:&nbsp;").cell().right();
  190.             table.addCell(""+Integer.toString(request.getServerPort()));
  191.             table.newRow();
  192.             table.addHeading("getRemoteUser:&nbsp;").cell().right();
  193.             table.addCell(""+request.getRemoteUser());
  194.             table.newRow();
  195.             table.addHeading("getRemoteAddr:&nbsp;").cell().right();
  196.             table.addCell(""+request.getRemoteAddr());
  197.             table.newRow();
  198.             table.addHeading("getRemoteHost:&nbsp;").cell().right();
  199.             table.addCell(""+request.getRemoteHost());
  200.             table.newRow();
  201.             table.addHeading("getRequestedSessionId:&nbsp;").cell().right();
  202.             table.addCell(""+request.getRequestedSessionId());
  203.             table.newRow();
  204.             table.addHeading("isSecure():&nbsp;").cell().right();
  205.             table.addCell(""+request.isSecure());
  206.  
  207.             table.newRow();
  208.             table.addHeading("isUserInRole(dumpRole):&nbsp;").cell().right();
  209.             table.addCell(""+request.isUserInRole("dumpRole"));
  210.  
  211.             table.newRow();
  212.             table.addHeading("getLocale:&nbsp;").cell().right();
  213.             table.addCell(""+request.getLocale());
  214.  
  215.             Enumeration locales = request.getLocales();
  216.             while(locales.hasMoreElements())
  217.             {
  218.                 table.newRow();
  219.                 table.addHeading("getLocales:&nbsp;").cell().right();
  220.                 table.addCell(locales.nextElement());
  221.             }
  222.  
  223.             table.newRow();
  224.             table.newHeading()
  225.                 .cell().nest(new Font(2,true))
  226.                 .add("<BR>Other HTTP Headers")
  227.                 .attribute("COLSPAN","2")
  228.                 .left();
  229.             Enumeration h = request.getHeaderNames();
  230.             String name;
  231.  
  232.            while (h.hasMoreElements())
  233.             {
  234.                 name=(String)h.nextElement();
  235.  
  236.                 Enumeration h2=request.getHeaders(name);
  237.                 while (h2.hasMoreElements())
  238.                 {
  239.                     String hv=(String)h2.nextElement();
  240.                     table.newRow();
  241.  
  242.                    table.addHeading(name+":&nbsp;").cell().right();
  243.                     table.addCell(hv);
  244.                 }
  245.             }
  246.  
  247.             table.newRow();
  248.             table.newHeading()
  249.                 .cell().nest(new Font(2,true))
  250.                 .add("<BR>Request Parameters")
  251.                 .attribute("COLSPAN","2")
  252.                 .left();
  253.             h = request.getParameterNames();
  254.             while (h.hasMoreElements())
  255.             {
  256.                 name=(String)h.nextElement();
  257.                 table.newRow();
  258.                 table.addHeading(name+":&nbsp;").cell().right();
  259.                 table.addCell(request.getParameter(name));
  260.                 String[] values = request.getParameterValues(name);
  261.                 if (values==null)
  262.                 {
  263.                     table.newRow();
  264.                     table.addHeading(name+" Values:&nbsp;")
  265.                         .cell().right();
  266.                     table.addCell("NULL!!!!!!!!!");
  267.                 }
  268.                 else
  269.                 if (values.length>1)
  270.                 {
  271.                     for (int i=0;i<values.length;i++)
  272.                     {
  273.                         table.newRow();
  274.                         table.addHeading(name+"["+i+"]:&nbsp;")
  275.                             .cell().right();
  276.                         table.addCell(values[i]);
  277.                     }
  278.                 }
  279.             }
  280.  
  281.         /* ------------------------------------------------------------ */
  282.             table.newRow();
  283.             table.newHeading()
  284.                 .cell().nest(new Font(2,true))
  285.                 .add("<BR>Request Attributes")
  286.                 .attribute("COLSPAN","2")
  287.                 .left();
  288.             Enumeration a = request.getAttributeNames();
  289.             while (a.hasMoreElements())
  290.             {
  291.                 name=(String)a.nextElement();
  292.                 table.newRow();
  293.                 table.addHeading(name+":&nbsp;")
  294.             .cell().attribute("VALIGN","TOP").right();
  295.         table.addCell("<pre>" +
  296.                   toString(request.getAttribute(name))
  297.                   + "</pre>");
  298.             }
  299.  
  300.             table.newRow();
  301.             table.newHeading()
  302.                 .cell().nest(new Font(2,true))
  303.                 .add("<BR>Servlet InitParameters")
  304.                 .attribute("COLSPAN","2")
  305.                 .left();
  306.             a = getInitParameterNames();
  307.             while (a.hasMoreElements())
  308.             {
  309.                 name=(String)a.nextElement();
  310.                 table.newRow();
  311.                 table.addHeading(name+":&nbsp;")
  312.             .cell().attribute("VALIGN","TOP").right();
  313.                 table.addCell("<pre>" +
  314.                   toString(getInitParameter(name))
  315.                   + "</pre>");
  316.             }
  317.  
  318.             table.newRow();
  319.             table.newHeading()
  320.                 .cell().nest(new Font(2,true))
  321.                .add("<BR>Context InitParameters")
  322.                 .attribute("COLSPAN","2")
  323.                 .left();
  324.             a = getServletContext().getInitParameterNames();
  325.             while (a.hasMoreElements())
  326.             {
  327.                 name=(String)a.nextElement();
  328.                 table.newRow();
  329.                 table.addHeading(name+":&nbsp;")
  330.             .cell().attribute("VALIGN","TOP").right();
  331.                 table.addCell("<pre>" +
  332.                   toString(getServletContext()
  333.                        .getInitParameter(name))
  334.                   + "</pre>");
  335.             }
  336.  
  337.             table.newRow();
  338.             table.newHeading()
  339.                 .cell().nest(new Font(2,true))
  340.                 .add("<BR>Context Attributes")
  341.                 .attribute("COLSPAN","2")
  342.                 .left();
  343.             a = getServletContext().getAttributeNames();
  344.             while (a.hasMoreElements())
  345.             {
  346.                 name=(String)a.nextElement();
  347.                 table.newRow();
  348.                 table.addHeading(name+":&nbsp;")
  349.             .cell().attribute("VALIGN","TOP").right();
  350.                 table.addCell("<pre>" +
  351.                   toString(getServletContext()
  352.                        .getAttribute(name))
  353.                   + "</pre>");
  354.             }
  355.  
  356.             if (request.getContentType()!=null &&
  357.                 request.getContentType().startsWith("multipart/form-data") &&
  358.                 request.getContentLength()<1000000)
  359.             {
  360.                 MultiPartRequest multi = new MultiPartRequest(request);
  361.                 String[] parts = multi.getPartNames();
  362.  
  363.                 table.newRow();
  364.                 table.newHeading()
  365.                     .cell().nest(new Font(2,true))
  366.                     .add("<BR>Multi-part content")
  367.                     .attribute("COLSPAN","2")
  368.                     .left();
  369.                 for (int p=0;p<parts.length;p++)
  370.                 {
  371.                     name=parts[p];
  372.                     table.newRow();
  373.                     table.addHeading(name+":&nbsp;")
  374.                         .cell().attribute("VALIGN","TOP").right();
  375.                     table.addCell("<pre>" +
  376.                                   multi.getString(parts[p]) +
  377.                                   "</pre>");
  378.                 }
  379.             }
  380.  
  381.             String res=request.getParameter("resource");
  382.             if (res!=null && res.length()>0)
  383.             {
  384.                 table.newRow();
  385.                 table.newHeading()
  386.                     .cell().nest(new Font(2,true))
  387.                     .add("<BR>Get Resource: "+res)
  388.                     .attribute("COLSPAN","2")
  389.                     .left();
  390.  
  391.                 table.newRow();
  392.                 table.addHeading("this.getClass():&nbsp;").cell().right();
  393.                 table.addCell(""+this.getClass().getResource(res));
  394.  
  395.                 table.newRow();
  396.                 table.addHeading("this.getClass().getClassLoader():&nbsp;").cell().right();
  397.                 table.addCell(""+this.getClass().getClassLoader().getResource(res));
  398.  
  399.                 table.newRow();
  400.                 table.addHeading("Thread.currentThread().getContextClassLoader():&nbsp;").cell().right();
  401.                 table.addCell(""+Thread.currentThread().getContextClassLoader().getResource(res));
  402.  
  403.                 table.newRow();
  404.                 table.addHeading("getServletContext():&nbsp;").cell().right();
  405.                 table.addCell(""+getServletContext().getResource(res));
  406.             }
  407.  
  408.  
  409.             page.add(Break.para);
  410.  
  411.             page.add(new Heading(1,"Form to generate Dump content"));
  412.             TableForm tf = new TableForm(response.encodeURL(request.getRequestURI()));
  413.             tf.method("POST");
  414.             tf.addTextField("TextField","TextField",20,"value");
  415.             Select select = tf.addSelect("Select","Select",true,3);
  416.             select.add("ValueA");
  417.             select.add("ValueB1,ValueB2");
  418.             select.add("ValueC");
  419.             tf.addButton("Action","Submit");
  420.             page.add(tf);
  421.  
  422.             page.add(new Heading(1,"Form to upload content"));
  423.             tf = new TableForm(response.encodeURL(request.getRequestURI()));
  424.             tf.method("POST");
  425.             tf.attribute("enctype","multipart/form-data");
  426.             tf.addFileField("file","file");
  427.             tf.addButton("Upload","Upload");
  428.             page.add(tf);
  429.  
  430.             page.add(new Heading(1,"Form to get Resource"));
  431.             tf = new TableForm(response.encodeURL(request.getRequestURI()));
  432.             tf.method("POST");
  433.             tf.addTextField("resource","resource",20,"");
  434.             tf.addButton("Action","getResource");
  435.             page.add(tf);
  436.  
  437.         }
  438.         catch (Exception e)
  439.         {
  440.             Code.warning(e);
  441.         }
  442.  
  443.         page.write(pout);
  444.  
  445.         String data=request.getParameter("data");
  446.         if (data!=null && data.length()>0)
  447.         {
  448.             int d = Integer.parseInt(data);
  449.             while (d>0)
  450.             {
  451.                 pout.println("1234567890123456789012345678901234567890123456789\n");
  452.                 d=d-50;
  453.  
  454.             }
  455.         }
  456.  
  457.         pout.close();
  458.  
  459.         if (pi!=null)
  460.         {
  461.             if ("/ex4".equals(pi))
  462.                 throw new ServletException("test ex4",new Throwable());
  463.             if ("/ex5".equals(pi))
  464.                 throw new IOException("test ex5");
  465.             if ("/ex6".equals(pi))
  466.                 throw new UnavailableException("test ex6");
  467.             if ("/ex7".equals(pi))
  468.                 throw new HttpException(501);
  469.         }
  470.  
  471.     }
  472.  
  473.     /* ------------------------------------------------------------ */
  474.     public String getServletInfo()
  475.     {
  476.         return "Dump Servlet";
  477.     }
  478.  
  479.     /* ------------------------------------------------------------ */
  480.     public synchronized void destroy()
  481.     {
  482.         Code.debug("Destroyed");
  483.     }
  484.  
  485.     /* ------------------------------------------------------------ */
  486.     private static String toString(Object o)
  487.     {
  488.     if (o == null)
  489.         return null;
  490.  
  491.     if (o.getClass().isArray())
  492.     {
  493.         StringBuffer sb = new StringBuffer();
  494.         Object[] array = (Object[]) o;
  495.         for (int i=0; i<array.length; i++)
  496.         {
  497.         if (i > 0)
  498.             sb.append("\n");
  499.         sb.append(array.getClass().getComponentType().getName());
  500.         sb.append("[");
  501.         sb.append(i);
  502.         sb.append("]=");
  503.         sb.append(toString(array[i]));
  504.         }
  505.         return sb.toString();
  506.     }
  507.     else
  508.         return o.toString();
  509.     }
  510.  
  511. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement