PHP手工注入实战:揭示数据库信息与漏洞利用

0 下载量 169 浏览量 更新于2024-06-28 收藏 583KB DOC 举报
"这篇文档详细介绍了PHP手工注入的实践过程,通过一个真实的示例网站——日本福岛大学的一个页面,展示了如何发现SQL注入漏洞并利用它来获取系统信息。" 在PHP开发中,SQL注入是一种常见的安全漏洞,攻击者可以通过构造特定的输入,使应用程序执行非预期的SQL查询,从而获取敏感数据或对数据库进行非法操作。在这个例子中,作者首先通过在URL参数末尾添加单引号 `'` 来测试是否存在SQL注入,发现系统返回了错误,证明存在注入漏洞。 接下来,作者尝试通过 `UNION SELECT` 语句来确定数据库表的字段数量。通过不断调整选择的字段数,发现该表有47个字段。然后,他利用这个信息在页面上显示了这些字段,以了解可能的数据结构。 进一步,作者使用了几个常用的SQL注入函数来获取更多信息,如 `version()` 获取MySQL服务器的版本,`database()` 得到当前数据库的名称,以及 `user()` 查询当前数据库连接的用户名。结果显示,数据库版本为5.0.51a-community,数据库名为`kenkyu`,而数据库用户为`kenky846`。 由于不是使用`root`权限,作者转向了`information_schema`数据库,这是一个在MySQL 5.0及以上版本中内置的虚拟库,用于存储所有数据库的元数据。利用这个库,攻击者可以尝试获取表名和列名,以进一步深入探索数据库。在这个例子中,作者构造了一个新的URL,使用 `table_name` 来尝试列举该数据库中的表格。 总结来说,这个PHP手工注入的过程展示了以下关键知识点: 1. SQL注入的基本测试方法:通过在URL参数中添加特殊字符如单引号 `'`。 2. `UNION SELECT` 语句的应用:用于合并两个或多个SELECT语句的结果集。 3. 利用SQL注入获取数据库信息:如`version()`, `database()`, 和 `user()` 函数。 4. `information_schema` 数据库的用途:在MySQL中用于获取数据库的元数据。 5. 暴露表名的技巧:通过在注入语句中使用 `table_name`。 这些知识点对于理解SQL注入原理、防御SQL注入以及进行安全测试至关重要。开发者应始终确保对用户输入进行适当的验证和过滤,以防止此类攻击。同时,安全编码和使用预编译的SQL语句(如PHP的PDO或MySQLi的预处理语句)也是避免SQL注入的有效策略。