• SQL 注入基础


    SQL注入

    SQL注入是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为。

    本质:把用户输入的数据当作代码执行。任何和数据库产生交互的地方便有可能存在注入.

    SQL注入类型

    数据传输: GET POST COOKIE

    数据类型: 整型 字符型

    注入模式: 联合查询 报错 布尔盲注 时间盲注 推查询

    SQL注入的一般步骤

    1. 判断是否有注入
      1. 可控参数的改变是否影响页面的结果。
      2. 输入的SQL语句是否能报错.---->通过数据库报错,看到数据库的语句痕迹。
      3. 输入的SQL语句能否不报错.---->语句能够成功闭合。
    2. 判断注入类型
    3. 语句是否能够被恶意修改
    4. 是否能够执行
    5. 获取我们想要的数据

    SQL注入的基础知识

    数据库结构

    数据库---->表---->字段---->值

    SQL5.0版本之后MySQL默认在数据库中存放一个“information_schema”的数据库,在该库中有三个重要的表名schemata,tables,columns

    schemata表存储该用户创建的所有数据库的库名,字段名为schema_name

    tables表存储该用户创建的所有数据库的库名和表名,数据库库名和表名字段分别为table_schema,table_name

    columns表存储所有的库名,表名,字段名,它们的字段名分别为table_schema,table_name,column_name

    查询语句

    select 要查询的字段名 from 库名.表名
    select 要查询的字段名 from 库名.表名 where 已知条件的字段名 = '已知条件的值'
    select 要查询的字段名 from 库名.表名 where 已知的条件字段名1 = '已知条件的值1' and 已知条件2的字段名 = '已知条件2的值'
    

    limit用法

    limit m,n
    

    m表示记录开始的位置,从0开始表示第一条记录;n指取n条记录。

    重要的函数

    database()		当前网站使用的数据库。
    version()		当前的MySQL版本。
    user()			当前MySQL的用户。
    @@datadir		数据库路径。
    @@version_compile_os	操作系统版本
    
    concat(str1,str2,...)					没有分隔符地连接字符串
    concat_ws(separator,str1,str2,...)		含有分隔符地连接字符串
    group_concat(str1,str2,...)				连接一个组的所有字符串,并以逗号分隔每一条数据
    

    注释符

    常见的注释表达方式为:#	--空格	/**/
    在url中表示为:	  %23	--+	
    

    Union注入攻击

    order by和union select

    通过order by 数字查询该数据表的字段,当数据库不报错时就查出了数据库的字段数量;在数据库中查询参数ID对应的内容,然后将数据库的内容输出到页面上union select 1,2,3(数字个数为数据库的字段数量),数字可以替换为字段名,通过union select 查询出数据库的内容。

  • 相关阅读:
    STL(五)list
    WinCE进程ID获取窗口句柄
    【转】.obj, .lib, .dll, .exe的关系
    《Windows核心编程》——线程
    【转】windows结束线程方式
    VS2005调试多进程
    【转】VC中常用的宏
    【转】C++标准库简介
    WinCE下用STL的奇怪问题
    STL(三)string
  • 原文地址:https://www.cnblogs.com/xgcl/p/14526212.html
Copyright © 2020-2023  润新知