SQL注入【一】——SQL介绍与基础

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


0x01 原理介绍

当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

所以sql注入漏洞的本质将用户输入的数据当做代码来执行

sql注入的两个关键条件

2.1,用户能够控制输入的内容

2.2,wed应用吧用户输入的内容带到数据库中执行

sql注入的危害

脱库/getshell

0x02 SQL注入常用

常用参数

system_user():   系统用户名

user():   用户名

current_user():  当前用户名

session_user():   链接数据库的用户名

database():  数据库名

version():   MYsql数据库版本

load_file():   转成16进制或者10进制 MYSQL读取本地文件的函数

@@datadir:  读取数据库路径

@@basedir:  mysql安装路径

@@version_sompile_os: 操作系统

常用函数

group_concat():将括号中的所有参数拼接成一个字符串

substr(str,start,length):截取str字符串中从start开始,长度为length的子串

常用语句

获取某个数据库中的所有表名:

SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA = '数据库名'

获取某个数据库表中的所有字段名

mysql注入必记的一库三表

一库

Information_schema(数据库)(MySQL中默认的数据库)

三表

SCHEMATA(表):存储了MySQL下每一个数据库的相关信息

                       schema_name(字段):数据库名

TABLES(表):存储了MySQL下每一个表的相关信息

                    TABLE_NAME(字段):数据表名称

                    TABLE_SCHEMA(字段):该数据表属于哪一个数据库

COLUMNS(库):存储了MySQL下每一个数据表中的所有列名(字段名)

                  COLUMN_NAME(字段):字段名称

                  TABLE_NAME(字段):该字段属于哪一个数据表

                   TALBE_SCHEMA(字段):当前字段所属数据表所在的数据库名称

注意:这三张表在information_schema数据库下面,在SQL注入过程中不能直接指定表名,要使用“数据库名.数据表名”的形式,例如:information_schema.tables


一个热爱技术的白帽子