zoukankan      html  css  js  c++  java
  • sql盲注

      在使用sql语句作为数据库操作方式的系统中,因为程序员处理传入参数不善而导致sql语句功能改变,从而利用这些改变对数据库甚至系统造成信息泄漏、系统破坏的问题成为sql注入。

      sql盲注是sql注入的一种,它通过传入特殊参数,配合系统接口的正常、异常状态返回,达到对系统以及数据库信息进行猜测的目的。

      举个栗子:

        (1)探测到某个接口,内容如下:

          http://www.abc.com?a=1&b=2

          返回值为

          {"state":"1","msg":"Success"}

        (2)后台的在执行功能的时候有如下代码

          String sql = "select * from tb_test where a = '"+a+"' ";

          Statement createStatement = conn.createStatement();
          createStatement.executeQuery(sql);

        (3)那么攻击者就可以通过传入这样的参数对系统进行试探:

          a=1%27;select%20*%20from%20user

          也就是a=1';select * from user

        (4)这时候后台sql会变成

          select * from tb_test where a = '1';select * from user

          如果系统中存在user表,返回值为{"state":"1","msg":"Success"}

          如果系统中不存在user表,返回值为{"state":"0","msg":"Error"}  

        攻击者就很容易通过这样的手段对系统进行猜测和破坏(假如没有限制执行的是查询,那么参数弄成delete或者update,就可以为所欲为了……)。

      解决方法:

        (1)使用PreparedStatement进行sql预编译,用参数化查询的方式处理sql;

        (2)限定sql操作范围,比如使用注解@ReadOnly修饰查询服务等;

        (3)对输入参数进行严格的格式校验,剔除所有可能的异常值;

        (4)使用一些能够处理此类问题的开源框架;

        (5)其他可行方法;

    扩展学习

      盲注手法:

        https://www.cnblogs.com/fengh/p/6183928.html

        https://www.cnblogs.com/lcamry/p/5763129.html

      盲注常用方法:

        http://blog.sina.com.cn/s/blog_15e7bc4bb0102wclz.html

      

      逃过appscan盲注的最简单方法:

        http://blog.csdn.net/arthurzil/article/details/6863213

      appscan误报盲注解决方案:

        http://blog.csdn.net/huqingpeng321/article/details/53521616

  • 相关阅读:
    Docker 介绍
    Docker 教程
    Python 删除文件与文件夹
    Python 读文件
    Python 打开文件(File Open)
    Python 异常处理(Try...Except)
    什么是拜占庭将军问题
    智能合约语言 Solidity 教程系列7
    给代币添加高级功能-代币管理、增发、兑换、冻结等
    一步步教你创建自己的数字货币(代币)进行ICO
  • 原文地址:https://www.cnblogs.com/chendeming/p/8474525.html
Copyright © 2011-2022 走看看