DVWA实验--SQL手工注入(Low)

什么是SQL注入?

SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。

Sql 注入带来的威胁主要有如下几点

  • 猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
  • 绕过认证,列如绕过验证登录网站后台。
  • 注入可以借助数据库的存储过程进行提权等操作

自动化的注入神器sqlmap固然好用,但还是要掌握一些手工注入的思路,下面简要介绍手工注入(非盲注)的步骤。

1.判断是否存在注入,注入是字符型还是数字型

2.猜解SQL查询语句中的字段数

3.确定显示的字段顺序

4.获取当前数据库

5.获取数据库中的表

6.获取表中的字段名

7.下载数据

我们使用有现成漏洞的dvwa实验环境来进行注入,选择安全级别为LOW

image

查看SQL注入测试页面的源码:

image

image

通过源码我们发现它对参数没有任何的过滤  直接带入数据库进行查询  我们猜测肯定给存在字符型sql注入

开始工作:

1. 判断是否存在注入,注入是字符型还是数字型

输入1,

image

查询成功。

输入1’and ‘1’ =’2,查询失败,返回结果为空:

image


输入1’or ‘1234 ’=’1234,查询成功:

image

说明存在字符型注入

接下来我们猜解sql查询语句中的字段数 (逐渐增加order by后面的数字的大小进行猜测)

image

image

image

当输入3#时就出现了错误,说明只有两列的数据   查询的表的字段数是2

union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询。需要注意在使用 union 查询的时候需要和主查询的列数相同,而我们之前已经知道了主查询列数为 2,接下来就好办了。
输入1' union select database(),user()#进行查询 :

  • database()将会返回当前网站所使用的数据库名字.
  • user()将会返回执行当前查询的用户名.

image

同理我们再输入 1' union select version(),@@version_compile_os#进行查询:

version() 获取当前数据库版本.

@@version_compile_os 获取当前操作系统

image

进行回显:

image

接下来我们尝试获取 dvwa 数据库中的表名。
information_schema 是 mysql 自带的一张表,这张数据表保存了 Mysql 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。

我们输入1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#进行查询:

image

通过上图返回信息,我们再获取到:dvwa 数据库有两个数据表,分别是 guestbook 和 users .

接下来我们获取表中的字段名     1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'# 

image

其中,user和password正是我们想要的

下面我们获得字段中的数据         1' union select user,password from users#

image
爆出来的一长串16进制字符就是md5加密的密码

通过md5解密即可得到密码

image

image

image

posted @ 2020-01-14 14:26  Adosa(无嗔)  阅读(2108)  评论(0编辑  收藏  举报
levels of contents