一、前言
本次测试环境:DVWA漏洞练习平台、kali、Firefox浏览器。
常用函数解析:
数据库系统函数 | 所具有的作用 | 一般使用方法 |
---|---|---|
version() | 通过该函数可以直接的查看数据库系统的版本号 | select version() |
database() | 该函数可以只管的查看当前操作的数据库名 | select database() |
user() | 查看当前数据库的用户权限以及用户名 | select user() |
@@datadir | 查询数据库路径 | … |
system_user() | 查看当前系统用户名 | … |
Information_schema解析:
在mysql中,自带的information_schema这个表里面存放了大量的重要信息。具体如下:
如果存在注入点的话,可以直接尝试对该数据库进行访问,从而获取更多的信息。
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns
from schemaname.tablename的结果取之此表。
二、Low级别的测
正常输入id,显示正常。非正常输入一个单引号后,发现程序报错,根据报错内容显示可猜测这是一个字符型的注入点。
输入一个简单的payload(1' or 1=1 #'
),尝试拉取当前表信息,结果如下:
说明当前程序对输入的内容并没有做有效的过滤与防护。
根据order by来查询当前SQL语句的字段数,当猜测的字段数为2 时,数据库正确执行了该SQL,说明SQL语句中的字段数为2
通过union联合查询和database()来查看当前的数据库。
通过information_schema来查看数据库中存在的表。语法结构为:
1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#'
发现存在两个表,其中一个时Users表,猜测可能为用户信息表。
查询users表专用的字段名,语法如下:
1' union select 1,column_name from information_schema.columns where table_name='users'#'
发现其中存在几个字段,包括了id,password,username等。
查询相关字段信息,结果如下:用cmd5解密相关的密码信息,发现admin用户的密码是:password
三、Medium级别的测试
进入页面,发现用户ID只能通过复选框进行选择,并且数据提交方式是POST方式,只好打开burp suite进行抓包测试。按照low级别的方式进行测试,发现不能使用单引号等,会被转义为\'
.
在此情况下,直接使用union联合查询,获取相关信息。发现使用的数据库依然是dvwa .
继续获取表信息与字段信息。使用的语法与low级别基本相同,但由于特殊字符做了转义,有细微的差别。语法分别如下:
获取表名: 1 union select 1,table_name from information_schema.tables where table_schema=(select database())# 获取表名
获取字段名:id=1 union select 1,column_name from information_schema.columns where table_name=0x7573657273# //由于单引号被转义,而表名又必须使用引号包裹,所以使用十六进制进行绕过
获取到字段名后,继续获取相关账号信息。