zoukankan      html  css  js  c++  java
  • SQL注入基础入门

    一般的WEB架构

    SQL注入成因:

      用户开启浏览器并连接http://www.xxx.com。位于逻辑层的Web服务器从文件系统中加载脚本将其传递给脚本引擎,脚本引擎负责解析并执行脚本。

    脚本使用数据库连接程序打开存储层连接并对数据库执行SQL语句。数据库将数据返回给数据库连接程序,后者将其传递给逻辑层的脚本引擎。逻辑层再将WEB页面以HTML格式返回给表示层的用户的浏览器之前,先执行相关的应用或业务逻辑规则。用户的WEB浏览器呈现HTML并借助代码的图形化表示展现

    给用户。整个过程数秒内完成,并且对用户是透明的。

      简单来说,WEB浏览器(表示层)向中间层(逻辑层)发送请求,中间层通过查询更新数据库(存储层)响应请求。

      从用户请求到在数据库中执行SQL语句,服务器未经过任何过滤校验,就把用户的请求直接在数据库中执行,导致数据库内的数据发生泄漏、更改等。

    SQL注入在哪里:

      · get

      · post

      · 数据包头部注入

      · cookie注入

      · 搜索注入

      · ......等

      1.任何客户端可控,传递到服务器的变量;

      2.必须带有参数传递,参数值带入到数据库查询;

      3.服务器没有进行过滤或过滤的不严格。

    SQL注入的分类:

      根据注入语法分类:

        · Error-based SQL injection (报错型注入)

        · Boolean-based blind SQL injection (布尔型注入)

        · UNION query SQL injection (可联合查询注入)

        · Stacked queries SQL injection (可多语句查询注入)sql server中使用

        · Time-based blind SQL injection (基于时间注入)

      根据SQL数据类型分类:

        · 整形注入

        · 字符串类型注入

        · 搜索类型注入

    判断是否存在注入:

      and 1=1 / and 1=2 根据回显页面不同(整型)

      单引号判断 ' 显示数据库错误信息(整型,字符串类型)

       是否报错

      随机输入判断

      -1 / +1 回显上个页面(整型)

      and sleep(5) 返回时间是否变化

    判断注入类型:

      布尔类型:

        当一个页面,存在注入,但是没有显示位,而且没有数据库出错信息,只能通过页面返回正常/不正常进行判断,即为布尔型注入

        优点:不需要显示位,不需要代码输出mysql_error()信息

        缺点:速度慢

      报错注入:

        因为传递参数不正常引起数据库执行语句发生错误,脚本输出错误信息,即为报错注入

      联合查询注入:

        页面根据参数值改变而改变,即有显示位的条件下,没有过滤单引号、双引号等特殊字符,及SQL命令;可以对SQL语句截断,使用UNION 添加

    查询语句来进行注入。UNION两边列的数量相同,可使用order by 猜测获取列的数量

      基于时间的注入:

        当一个页面,存在注入,但是没有显示位,而且没有数据库出错信息,页面的返回信息不会改变,可以在布尔语句上使用sleep(),猜解获取信息

    构造注入语句: 

      • exists()

      • ascii()

      • substr()

      函数的使用

      • select exists(select user());
      • select substr((select user()), 1, 1);
      • select substr((select user()), 2, 1);
      • select ascii(“a”);
      • select ascii(“abc");
      • select ascii(substr((select user()), 3, 1));
      • select ascii(substr((select user()), 3, 1)) > 100;
      • select ascii(substr((select user()), 3, 1)) > 120;

      在mysql5.0版本之后,就存在一个information_schema数据库,可以在该库的tables表和columns表中获取脚本连接数据库的账号-可以控制的数据

    库的结构

    举例: 

    • ?id=1' and exists(select * from information_schema.tables) --+

    • ?id=1' and (select length(version()))=6 --+ #判断 version()返回字符串长度

    • ?id=1' and (select count(distinct+table_schema) from information_schema.tables) > 10 --+ #判断有多少个数据库

    • ?id=1' and (select ascii(substr((select distinct table_schema from information_schema.tables limit 0,1), 1 ,1))) > 100 --+ 

    #判断第一个库的第一个字符

  • 相关阅读:
    boost库的使用介绍
    《架构实战软件架构设计的过程》
    常用开发命令
    《项目管理最佳实践案例剖析》
    From Live Writer
    希望实现的程序
    正在进行调试的Web服务器进程已由Internet信息服务(IIS)终止。可以通过在IIS中配置应用程序池Ping设置来避免这一问题。有关更多详细信息,请参见“帮助”
    请确保此代码文件中定义的类与“inherits”属性匹配
    更改IE默认源代码编辑器
    MS的.net源码地址
  • 原文地址:https://www.cnblogs.com/Fluorescence-tjy/p/5777450.html
Copyright © 2011-2022 走看看