MySQL练习:注入语句详解与宽字节注入

需积分: 12 1 下载量 78 浏览量 更新于2024-08-05 收藏 3.32MB DOCX 举报
"Mysql练习注入语句" MySQL是一个广泛使用的开源关系型数据库管理系统,它的安全性对于任何使用它的系统都至关重要。本练习主要关注SQL注入,这是一种常见的安全漏洞,允许攻击者通过输入恶意的SQL语句来操控或获取数据库中的敏感信息。 1. **布尔盲注(Boolean-Based Blind Injection)** 布尔盲注是利用数据库返回的不同响应(如查询成功或失败)来判断数据的正确性。例如: - 求数据库长度:`?id=1’and length(database())=8%23`,如果数据库名长度为8,则请求会返回正常页面。 - 求数据库名的ASCII值:`?id=1’and ascii(substr(database(), 1, 1))=115%23`,当数据库名的第一个字符的ASCII值为115(对应字母's')时,请求也会成功。 2. **时间盲注(Time-Based Blind Injection)** 时间盲注是通过查询执行时间的差异来获取信息。例如: - 测试是否能进行时间盲注,可以尝试执行一个延时查询,如`sleep(5)`。 - 构造函数,如`?id=1’and (select sleep(5) from dual where column_name like ‘%value%’) limit 1%23`,如果`column_name`包含'value',查询会延迟5秒。 - 爆表名和列名以及内容的查询与布尔盲注类似,但会根据查询时间长短来判断条件是否满足。 3. **宽字节注入(Wide Byte Injection)** 宽字节注入通常发生在服务器使用多字节字符集(如GBK)时。攻击者通过插入特殊字符来改变SQL语句的解释。例如,可以使用%df来处理转义字符',使其失效,如`' or 'a'='a%df'`。 - 条件:目标程序使用双/多字节字符集解析,且字符集中包含低字节位。 - 原理:通过插入%df,与\结合形成新的字符,避免闭合回路导致的错误。 4. **白名单与黑名单安全策略比较** - **黑名单**:仅阻止已知的恶意行为,例如阻止已知的SQL注入语句。这种方法的优点是易于实施,但缺点是无法防御未知的威胁。 - **白名单**:只允许预定义的“安全”行为,如特定的SQL操作或输入数据。白名单更安全,因为它默认阻止所有未明确允许的行为,但管理起来更复杂,需要维护一个完整的安全实体列表。 在实际应用中,结合使用黑名单和白名单策略通常更为理想,以兼顾防范已知威胁和未知风险。同时,应确保对输入数据进行充分验证和转义处理,以提高系统的整体安全性。