MySQL提权条件,如何用SQL语句查目录有没有写权限?
1 个回答
无论什么关系,我看不到我想要的态度。我就不会给你想要的细节。莫千绝在 MySQL 提权的场景里,如果想通过数据库写文件(比如写 WebShell、写计划任务)来实现提权,需要满足几个关键条件: ## 1. MySQL 提权的主要条件 1. **当前用户具备 FILE 权限** ```sql SHOW GRANTS FOR CURRENT_USER; ``` 需要包含: ``` GRANT FILE ON *.* TO 'xxx'@'host' ``` 2. **`secure_file_priv` 允许写入目标目录** ```sql SHOW VARIABLES LIKE 'secure_file_priv'; ``` * 如果为空(`''`),则允许在任意目录写文件; * 如果是一个目录路径,只能在这个目录下读写文件; * 如果是 `NULL`,则完全禁止 `LOAD DATA INFILE` / `SELECT ... INTO OUTFILE`。 3. **MySQL 进程的系统权限足够**(比如运行 MySQL 的用户 `mysql` 对目标目录有写权限)。 ## 2. 用 SQL 语句判断目录是否有写权限 在没有直接 shell 的情况下,可以用 **`SELECT ... INTO OUTFILE`** 测试: ```sql -- 尝试写入测试文件 SELECT 'test' INTO OUTFILE '/tmp/mysql_test.txt'; -- 再尝试读取,确认是否写入成功 SELECT LOAD_FILE('/tmp/mysql_test.txt'); ``` 如果写成功并能读取到 `test` 说明对该目录有写权限; 如果报错 `"Access denied"` 或 `"The MySQL server is running with the --secure-file-priv option"`,说明没有权限或被限制。 ## 3. 扩展:列出可写目录 如果 `secure_file_priv` 为空,可以尝试 MySQL 常见的可写目录: * `/tmp/` * `/var/tmp/` * `/dev/shm/` * 网站根目录(如 `/var/www/html/`,需验证权限)发布于 2025-08-13 09:03 •IP属地 广东举报评论收藏
公众号进入网站体验更佳

