SQL注入技巧:绕过逗号过滤方法总结
需积分: 0 139 浏览量
更新于2024-08-05
收藏 1.3MB PDF 举报
"这篇文档主要介绍了SQL注入中的过滤逗号注入问题及其解决方案,通过各种方法绕过逗号的过滤限制,包括使用fromto、join、like以及limit的offset技巧。同时,文中还提到了一些CTF比赛中的实际题目作为示例,帮助理解这些技术的应用。"
SQL注入是一种常见的网络安全漏洞,攻击者通过在输入字段中插入恶意的SQL代码,以获取未经授权的数据访问或操纵数据库。在过滤逗号注入的情况下,系统为了防止SQL注入,会阻止包含逗号的输入。然而,这并不意味着攻击者无法找到其他方式来实现注入。
1. **使用fromto替换逗号**:
- `substr()` 和 `mid()` 函数通常用于提取字符串的一部分,它们的语法通常包含逗号。但可以通过使用 `from` 和 `to` 参数来避免逗号,如:
```
select substr(database() from 1 for 1);
select mid(database() from 1 for 1);
```
2. **使用JOIN替代逗号**:
- 可以通过将多个子查询连接在一起,用JOIN来代替逗号,例如:
```
union select 1, 2 # 等价于
union select * from (select 1) a join (select 2) b
```
3. **使用LIKE操作符**:
- 当需要比较字符串时,可以使用LIKE操作符,如:
```
select ascii(mid(user(), 1, 1)) = 80 # 等价于
select user() like 'r%'
```
4. **利用OFFSET绕过LIMIT中的逗号**:
- `LIMIT` 子句在SQL中用于限制返回的行数,但可以使用 `OFFSET` 来代替逗号分隔的参数,例如:
```
select * from news limit 0, 1
# 等价于
select * from news limit 1 offset 0
```
5. **嵌套的JOIN和UNION SELECT**:
- 示例中的长SQL语句展示了如何通过嵌套多个JOIN和UNION SELECT来构造无逗号的查询。
6. **CASE WHEN语句**:
- 在某些情况下,可以使用 `CASE WHEN` 结合 `SLEEP()` 函数来进行延迟注入,如:
```
select case when substring((select password from mysql.user where user='root') from 1 for 1)='e' then sleep(5) else 0 end
```
在CTF比赛中,这些问题常被用来设计挑战题目,测试选手对SQL注入的防御和绕过策略的理解。通过学习和实践这些技术,不仅可以提高安全防护能力,也可以提升在竞赛中的表现。了解和掌握这些方法,对于防止和应对SQL注入攻击至关重要。
1055 浏览量
989 浏览量
156 浏览量
587 浏览量
314 浏览量
2021-10-17 上传
551 浏览量
哈哥撩编程
- 粉丝: 11w+
- 资源: 77
最新资源
- 微机接口技术及其应用课后习题答案
- Windows网络基本测试手段
- struts_2_design_and_programming_a_tutorial_2nd.7142682776
- vc++算法示例10个饿
- IBM Portal
- 《C++Builder6.0界面开发实例》
- Domino故障分析及处理方法
- JSP详细开发环境的配置
- Advanced UNIX Programming .pdf
- MyEclipse 6 Java EE 开发中文手册
- 基于MC56F8013的无刷直流电机调速控制器设计
- c++builder 实例精讲
- WCDMA核心网技术
- dos入门教程,基础篇
- 华南理工2007研究生入学考试试卷
- pl/sql学习文档