Advertisement
Guest User

Untitled

a guest
May 14th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 8.40 KB | None | 0 0
  1. /*
  2.  * Created on 19 mrt 2010
  3.  */
  4.  
  5. package craterstudio.indiespot.http;
  6.  
  7. import java.io.ByteArrayOutputStream;
  8. import java.io.PrintStream;
  9. import java.sql.Connection;
  10. import java.sql.DriverManager;
  11. import java.sql.ResultSet;
  12. import java.sql.ResultSetMetaData;
  13. import java.sql.SQLException;
  14. import java.sql.Statement;
  15. import java.sql.Types;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.Map;
  19. import java.util.Map.Entry;
  20.  
  21. import craterstudio.sql.basic.DataStoreException;
  22. import craterstudio.text.TextValues;
  23. import craterstudio.util.ArrayMap;
  24. import jawnae.net.http.core.HttpRequest;
  25. import jawnae.net.http.core.HttpResponse;
  26. import jawnae.net.http.core.HttpService;
  27. import jawnae.net.http.core.StatusCode;
  28.  
  29. public class SqlInjectionService extends HttpService
  30. {
  31.    @Override
  32.    public void serveGET(HttpRequest request, HttpResponse response) throws Exception
  33.    {
  34.       this.servePOST(request, response);
  35.    }
  36.  
  37.    @Override
  38.    public void servePOST(HttpRequest request, HttpResponse response) throws Exception
  39.    {
  40.       try
  41.       {
  42.          ByteArrayOutputStream baos = new ByteArrayOutputStream();
  43.          PrintStream out = new PrintStream(baos);
  44.          this.serve(request, out);
  45.          byte[] data = baos.toByteArray();
  46.  
  47.          response.setStatusCode(StatusCode.OK);
  48.          response.setKeepAlive(true);
  49.          response.setContentEncodingGzip(false);
  50.          response.setContentType("text/html");
  51.          response.setTransferEncodingChunked(false);
  52.          response.setContent(data);
  53.       }
  54.       catch (Exception exc)
  55.       {
  56.          exc.printStackTrace();
  57.  
  58.          response.setStatusCode(StatusCode.INTERNAL_SERVER_ERROR);
  59.          response.setKeepAlive(true);
  60.          response.setContentEncodingGzip(false);
  61.          response.setContentType("text/plain");
  62.          response.setTransferEncodingChunked(true);
  63.  
  64.          PrintStream out = response.createPrintStream();
  65.          exc.printStackTrace(out);
  66.          out.close();
  67.       }
  68.    }
  69.  
  70.    private void serve(HttpRequest request, PrintStream out) throws Exception
  71.    {
  72.       out.println("<html>\r\n");
  73.       out.println("   <head>\r\n");
  74.       out.println("      <title>Boooo!</title>\r\n");
  75.       out.println("   </head>\r\n");
  76.       out.println("   <body>\r\n");
  77.       out.println("      <h1>Boo</h1>\r\n");
  78.  
  79.       //      final String memberid = request.getPost("memberid");
  80.  
  81.       final List<Map<String, Object>> records;
  82.  
  83.       String minid;
  84.       String maxid;
  85.  
  86.       Connection sql = null;
  87.       try
  88.       {
  89.          System.out.println("opening sql connection");
  90.          sql = createMySQLConnection();
  91.  
  92.          Map<String, Object> row = this.querySelectOneRow(sql, "SELECT MIN(memberid) AS 'minid', MAX(memberid) AS 'maxid' FROM member");
  93.          minid = String.valueOf(row.get("minid"));
  94.          maxid = String.valueOf(row.get("maxid"));
  95.  
  96.          if (request.isRegularPost())
  97.          {
  98.             if (request.getPost("minid") != null)
  99.                minid = request.getPost("minid");
  100.             if (request.getPost("maxid") != null)
  101.                maxid = request.getPost("maxid");
  102.          }
  103.  
  104.          records = this.querySelect(sql, "SELECT memberid,username,emailaddress FROM member WHERE memberid BETWEEN " + minid + " AND " + maxid + " AND is_hidden = 0");
  105.  
  106.          sql.close();
  107.       }
  108.       catch (SQLException exc)
  109.       {
  110.          throw new IllegalStateException(exc);
  111.       }
  112.       finally
  113.       {
  114.          System.out.println("closing sql connection");
  115.  
  116.          if (sql != null)
  117.          {
  118.             try
  119.             {
  120.                sql.close();
  121.             }
  122.             catch (SQLException exc)
  123.             {
  124.                throw new IllegalStateException(exc);
  125.             }
  126.          }
  127.       }
  128.  
  129.       out.println("      <h2>Filter</h2>\r\n");
  130.       out.println("      <form method='post' action='/app/sql-injection'>\r\n");
  131.       out.println("         <fieldset>\r\n");
  132.       out.println("            <legend>Specify your ID range:</legend>\r\n");
  133.       out.println("            Lowest member ID: <input type='text' name='minid'/ value='" + minid + "'><br>\r\n");
  134.       out.println("            Highest member ID: <input type='text' name='maxid' value='" + maxid + "'/><br>\r\n");
  135.       out.println("            <input type='submit' name='ok' value='filter on range'><br>\r\n");
  136.       out.println("         </fieldset>\r\n");
  137.       out.println("      </form>\r\n");
  138.  
  139.       out.println("      <h2>Results</h2>\r\n");
  140.       out.println("      <table border=1>");
  141.       for (Map<String, Object> record : records)
  142.       {
  143.          out.println("         <tr>");
  144.          for (Entry<String, Object> entry : record.entrySet())
  145.             out.println("            <td>" + entry.getValue() + "</td>");
  146.          out.println("         </tr>");
  147.       }
  148.       out.println("      </table>");
  149.  
  150.       out.println("   </body>\r\n");
  151.       out.println("</html>\r\n");
  152.    }
  153.  
  154.    private final Connection createMySQLConnection() throws SQLException
  155.    {
  156.       try
  157.       {
  158.          Class.forName("com.mysql.jdbc.Driver");
  159.       }
  160.       catch (Exception exc)
  161.       {
  162.          throw new DataStoreException("MySQL driver not found");
  163.       }
  164.  
  165.       String host = "localhost";
  166.       int port = 3306;
  167.       String user = "indiespot_shivan";
  168.       String pass = "navihs";
  169.       String dbname = "indiespot_shivan";
  170.  
  171.       String url = "jdbc:mysql://" + host + ":" + (port == 0 ? 3306 : port) + "/";
  172.       Connection con = DriverManager.getConnection(url, user, pass);
  173.  
  174.       Statement stmt = con.createStatement();
  175.       stmt.execute("USE " + dbname);
  176.       stmt.close();
  177.  
  178.       return con;
  179.    }
  180.  
  181.    private final Map<String, Object> querySelectOneRow(Connection sql, String query) throws SQLException
  182.    {
  183.       List<Map<String, Object>> records = querySelect(sql, query);
  184.       if (records.isEmpty())
  185.          return null;
  186.       if (records.size() > 1)
  187.          throw new IllegalStateException("too many rows: " + records.size());
  188.       return records.get(0);
  189.    }
  190.  
  191.    private final List<Map<String, Object>> querySelect(Connection sql, String query) throws SQLException
  192.    {
  193.       System.out.println("executing query: " + query);
  194.       Statement stmt = sql.createStatement();
  195.       ResultSet resultset = stmt.executeQuery(query);
  196.       List<Map<String, Object>> records = this.grabResultSet(resultset);
  197.       stmt.close();
  198.       return records;
  199.    }
  200.  
  201.    private final List<Map<String, Object>> grabResultSet(ResultSet resultset) throws SQLException
  202.    {
  203.       final ResultSetMetaData meta = resultset.getMetaData();
  204.       final int columnCount = meta.getColumnCount();
  205.  
  206.       final String[] columnNames = new String[columnCount];
  207.       final int[] columnTypes = new int[columnCount];
  208.  
  209.       for (int i = 0; i < columnCount; i++)
  210.       {
  211.          columnNames[i] = meta.getColumnName(i + 1);
  212.          columnTypes[i] = meta.getColumnType(i + 1);
  213.  
  214.          System.out.println("columnNames[" + i + "] => " + columnNames[i]);
  215.       }
  216.  
  217.       final List<Map<String, Object>> records = new ArrayList<Map<String, Object>>();
  218.  
  219.       while (resultset.next())
  220.       {
  221.          final Map<String, Object> record = new ArrayMap<String, Object>();
  222.  
  223.          for (int i = 0; i < columnCount; i++)
  224.          {
  225.             final Object value;
  226.  
  227.             switch (columnTypes[i])
  228.             {
  229.                case Types.TINYINT:
  230.                case Types.SMALLINT:
  231.                case Types.INTEGER:
  232.                case Types.BIGINT:
  233.                   value = Integer.valueOf(resultset.getInt(i + 1));
  234.                   break;
  235.  
  236.                case Types.CHAR:
  237.                case Types.VARCHAR:
  238.                case Types.LONGVARCHAR:
  239.                   value = resultset.getString(i + 1);
  240.                   break;
  241.  
  242.                case Types.TIMESTAMP:
  243.                   value = Long.valueOf(resultset.getLong(i + 1));
  244.                   break;
  245.  
  246.                case Types.BINARY:
  247.                case Types.VARBINARY:
  248.                case Types.LONGVARBINARY:
  249.                   byte[] bytes = resultset.getBytes(i + 1);
  250.                   value = "0x" + TextValues.hexRawEncode(bytes);
  251.                   break;
  252.  
  253.                default:
  254.                   throw new UnsupportedOperationException("type: " + columnTypes[i]);
  255.             }
  256.  
  257.             record.put(columnNames[i], value);
  258.          }
  259.  
  260.          records.add(record);
  261.       }
  262.  
  263.       return records;
  264.    }
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement