MySQL手工注入详解:信息收集与漏洞利用流程

需积分: 8 0 下载量 81 浏览量 更新于2024-08-04 收藏 2KB MD 举报
"SQL手工注入公开课资料(2).md" 这篇资料主要讲述了SQL手工注入的相关知识,特别是针对MySQL数据库。SQL手工注入是一种常见的安全漏洞,攻击者通过构造恶意的SQL语句来获取、修改、删除数据库中的敏感信息。以下是详细的解释: ### 1. 信息收集 在进行SQL注入攻击时,首先需要收集数据库的信息。`SHOW DATABASES;` 命令用于显示所有的数据库名称,`USE 数据库名;` 切换到指定的数据库,`SHOW TABLES;` 则用来查看当前数据库中的所有表。 ### 2. SQL语句基础 基础查询包括查询所有数据库名称、选择数据库、显示所有表以及查询表中的数据。`SELECT * FROM 表名 WHERE 条件;` 是一种常用的查询方式,`*` 代表所有字段。`IF` 和 `SELECT` 结合可以进行条件判断。`UNION` 用于合并两个或多个`SELECT`语句的结果集,但要求字段数量相同。 ### 3. MYSQL手工注入流程 1. **判断注入点**:通过输入如 `And 1=1 And 1=2` 的测试语句,观察页面返回结果的变化,确认是否存在注入点。 2. **猜解列名数量**:利用 `ORDER BY` 字段编号,比较错误和正常的响应,推测列的数量。 3. **报错猜解**:例如 `Id=-1 UNION SELECT 1,2,3,4`,尝试通过报错信息来获取列数。 4. **判断回显点**:找到注入后能反馈信息的位置。 5. **信息收集**:获取数据库版本、数据库名、数据库用户和操作系统等信息,如 `version()`, `database()`, `user()` 和 `@@version_compile_os`。 ### 4. MYSQL系统库释义 从 MySQL 5.0 版本开始,有一个名为 `information_schema` 的内置数据库,它包含了许多元数据表,如: - `information_schema.TABLES` 存储所有表名信息,`Table_name` 是表名,`Table_schema` 是数据库名。 - `information_schema.COLUMNS` 记录所有列名信息,`Column_name` 是列名。 攻击者可以通过以下语句来获取信息: - 查询指定数据库名下的所有表名: ``` SELECT 1, GROUP_CONCAT(table_name), 3, 4 FROM information_schema.tables WHERE table_schema = database(); ``` - 查询指定表名下的所有列信息: ``` SELECT 1, GROUP_CONCAT(column_name), 3, 4 FROM information_schema.columns WHERE table_name = '指定表名'; ``` 了解这些SQL手工注入技术和MySQL系统库的使用,对于数据库安全防护和渗透测试至关重要。为了防止SQL注入攻击,应当确保应用程序对用户输入进行充分的验证和转义,同时定期更新数据库系统,修补已知的安全漏洞。