靶场科普 | 字符型注入类型4

靶场科普 | 字符型注入类型4
最新回答
燕如兮

2023-04-09 19:01:30

字符型注入类型4是针对Web应用程序中字符型输入参数的SQL注入攻击形式,攻击者通过构造特殊输入破坏SQL语句原有结构,进而实现非授权数据访问或操作。 以下从原理、实验操作、防御措施三个维度展开说明:

一、字符型注入类型4的原理
  1. SQL注入基础SQL注入的核心是攻击者利用Web应用对用户输入过滤不严的漏洞,在预设SQL语句中插入恶意代码。例如,若应用直接拼接用户输入到查询语句中,攻击者可通过输入' OR '1'='1篡改原语句逻辑。

  2. 字符型注入特征字符型注入需闭合原有SQL语句中的引号。例如,若原查询为SELECT * FROM users WHERE username = '[用户输入]',攻击者输入admin' --可闭合引号并注释后续语句,使查询变为SELECT * FROM users WHERE username = 'admin' --',从而绕过密码验证。

  3. 类型4的特殊性类型4通常指攻击者通过观察引号闭合后的错误信息(如数据库报错)判断注入点,并利用information_schema数据库中的元数据表(如tables、columns)逐级获取数据库结构信息。例如,通过输入admin' AND 1=2 UNION SELECT table_name FROM information_schema.tables WHERE table_schema=database()--可枚举当前数据库的所有表名。

图:字符型注入通过闭合引号篡改SQL逻辑二、实验操作流程(以“东塔攻防世界”靶场为例)
  1. 实验目标

    理解SQL注入的攻击链(注入点探测→语句构造→信息提取)。

    掌握字符型注入中引号闭合、注释符使用(如--、#)等技巧。

    通过information_schema数据库获取目标数据库的表名、字段名等敏感信息。

  2. 关键步骤

    注入点探测:在输入框中输入单引号('),若页面返回数据库错误(如You have an error in your SQL syntax),则证明存在字符型注入漏洞。

    数据库名获取:构造输入' UNION SELECT database()--,通过页面回显或报错信息获取当前数据库名称。

    表名枚举:利用information_schema.tables表查询表名,输入示例:

    ' UNION SELECT table_name FROM information_schema.tables WHERE table_schema='目标数据库名'--

    字段名与数据提取:进一步查询information_schema.columns表获取字段名,再通过联合查询(UNION SELECT)提取具体数据,例如:

    ' UNION SELECT column_name FROM information_schema.columns WHERE table_name='目标表名'--' UNION SELECT 字段1,字段2 FROM 目标表名--
  3. 注意事项

    需根据数据库类型调整语法(如MySQL使用--注释,Oracle使用--或/* */)。

    若页面无直接回显,需通过盲注技术(如布尔盲注、时间盲注)逐步推断数据。

三、防御措施
  1. 输入校验与过滤

    使用正则表达式限制输入格式(如仅允许数字、字母)。

    对特殊字符(如'、"、--)进行转义或替换为空。

    限制输入长度,减少攻击者构造复杂语句的空间。

  2. 关键字过滤与编码

    过滤SQL关键字(如SELECT、UNION、INFORMATION_SCHEMA),但需注意绕过风险(如大小写混合、双写关键字)。

    对输出到页面的数据进行HTML实体编码,防止XSS与SQL注入复合攻击。

  3. 预编译与参数化查询

    使用预编译语句(如JDBC的PreparedStatement、PHP的PDO),将用户输入作为参数传递,避免SQL语句拼接。

    示例(Java):

    String query = "SELECT * FROM users WHERE username = ?";PreparedStatement stmt = connection.prepareStatement(query);stmt.setString(1, userInput); // 用户输入自动转义
  4. 最小权限原则与函数禁用

    数据库用户仅授予必要权限(如禁止DROP、FILE等高危操作)。

    禁用危险函数(如MySQL的LOAD_FILE()、INTO OUTFILE)。

总结:字符型注入类型4通过闭合引号与注释符篡改SQL逻辑,攻击者需结合数据库元数据表逐步提取信息。防御需从输入校验、预编译、权限控制等多层入手,构建纵深防御体系。