PHP+MySQL手工注入攻击详解与防范

0 下载量 28 浏览量 更新于2024-08-31 收藏 62KB PDF 举报
"这篇资源是关于PHP与MySQL结合下的SQL手工注入攻击的教程,涵盖了多种常用的注入语句,包括暴露字段长度、位置,利用内置函数获取数据库信息,以及猜解数据库、表和字段的方法,甚至涉及到高级用法和直接写入Webshell的条件。" 在Web开发中,SQL注入是一种常见的安全漏洞,攻击者通过构造恶意的SQL语句来获取、篡改或删除数据库中的敏感信息。在PHP与MySQL的环境中,攻击者可能会利用不安全的用户输入来执行这些注入攻击。以下是一些关键的知识点: 1. **暴露字段长度**:通过`Order by num/*`,攻击者可以测试数据库返回结果的列数,了解系统可能的字段数量。 2. **匹配字段**:`and 1=1 union select 1,2,3,4,5…….n/*` 可以用来验证注入点并尝试获取字段内容,这里的数字n代表预期的字段数量。 3. **暴字段位置**:`and 1=2 union select 1,2,3,4,5…..n/*` 用于确定每个字段的位置,通过改变数字顺序,攻击者可以逐步揭示不同列的数据。 4. **内置函数**:`version()`, `database()`, 和 `user()` 是MySQL的内置函数,攻击者可以通过它们获取数据库版本、当前数据库名以及当前登录用户的权限信息。 5. **操作系统信息**:通过`and 1=2 union all select @@global.version_compile_os from mysql.user/*`,攻击者可能能获取到运行MySQL服务器的操作系统信息。 6. **数据库权限检查**:如`and ord(mid(user(),1,1))=114/*`,若返回正常,可能表示当前用户为root,具有较高权限。 7. **暴库(MySQL 5.0以上)**:`information_schema`是一个内置库,攻击者可以通过`and 1=2 union select 1,2,3,SCHEMA_NAME,5,6,7,8,9,10 from information_schema.SCHEMATA limit 0,1` 获取数据库名。 8. **猜表和字段**:攻击者可以利用`information_schema.TABLES`和`information_schema.COLUMNS`获取表名和字段名,通过十六进制编码进行精确匹配。 9. **暴密码**:一旦获得表名和字段名,攻击者可能尝试提取特定用户的用户名和密码段。 10. **高级用法**:如`Union select 1,2,3,用户名段,0x3c,密码段,5,6,7,8,9 from 表名 limit 0,1`,将两个数据内容合并展示,这在只有一个可利用字段的情况下非常有用。 11. **直接写马**:如果攻击者拥有Root权限并且知道站点物理路径,他们可能尝试直接在服务器上写入Webshell,即后门程序,从而实现远程控制。 为了防止SQL注入,开发者应遵循最佳实践,如使用参数化查询(预编译语句)、限制用户输入、对输入数据进行过滤和转义,以及定期进行安全性审计。理解这些注入技术可以帮助开发者更好地设计和实现安全的Web应用。