SQL注入基础--判断闭合形式

**

SQL注入基础–判断闭合形式

SQL语句的闭合形式大概如下几种:

SELECT * FROM `users` WHERE id= 1;#整形闭合
SELECT * FROM `users` WHERE id='1'; #单引号闭合
SELECT * FROM `users` WHERE id="1";#双引号闭合
SELECT * FROM `users` WHERE id=('1');#单引号加括号
SELECT * FROM `users` WHERE id=("1");#双引号加括号

## 1.整形闭合

SELECT * FROM `users` WHERE id= 1;#整形闭合

模拟注入:

?id=1’
?id=1”

SELECT * FROM `users` WHERE id= 1;
SELECT * FROM `users` WHERE id= 1;

错误
在这里插入图片描述
在这里插入图片描述

2.单引号闭合

SELECT * FROM `users` WHERE id='1'; #单引号闭合

模拟注入:

?id=1’
?id=1”

SELECT * FROM `users` WHERE id= '1'';

报错
在这里插入图片描述

SELECT * FROM `users` WHERE id= '1"';

可以运行
在这里插入图片描述

如果写成这样:

?id=1’–+

SELECT * FROM `users` WHERE id= '1'-- ';

**mysql 不会把后面那个单引号注释掉,并且会把整个1’–作为查询条件,可以成功查询和1是一样的!**
任何闭合方式都这样在没有遇到相对应的闭合时,都会把这个符号当做一个整体,注释符也没用!!

3.双引号闭合

SELECT * FROM `users` WHERE id="1";#双引号闭合

模拟注入:

?id=1’
?id=1”

SELECT * FROM `users` WHERE id="1'";

在这里插入图片描述

SELECT * FROM `users` WHERE id="1"";

报错
在这里插入图片描述

总结

遇到SQL注入第一步判断闭合:
首先尝试:

?id=1’
?id=1”

1如果都报错,则为整形闭合。

2如果单引号报错,双引号不报错。
然后尝试

?id=1’–+

无报错则单引号闭合。
报错则单引号加括号。

3如果单引号不报错,双引号报错。
然后尝试

?id=1"–+

无报错则双引号闭合。
报错则双引号加括号。

多层括号同理

### SQL注入 Less-1 解决方案 #### 问题描述 Less-1 是一个常见的SQL注入练习案例,通常涉及通过URL参数`id`进行简单的布尔盲注攻击。目标是在不知道数据库结构的情况下推断出表名或列名。 #### 原理分析 当应用程序未正确验证用户输入并将其直接嵌入到SQL查询中时,可能会发生SQL注入漏洞。对于Less-1而言,主要利用的是条件判断语句中的逻辑运算符来实现信息泄露[^4]。 #### 实现方式 假设存在如下形式基础查询: ```sql SELECT * FROM users WHERE id = {user_input}; ``` 如果能够控制`{user_input}`部分,则可以通过构造特定字符串使上述查询返回不同的结果集大小或者触发错误消息等方式获取敏感数据。 #### 测试方法 一种典型的测试手段是向服务器发送带有特殊字符组合的请求,比如单引号 `'` 或者闭合括号 `)` 。这有助于确认是否存在潜在的安全隐患以及进一步探索的可能性。 针对Less-1的具体操作流程如下所示: 1. 尝试访问正常页面以获得预期行为作为对照组; 2. 修改 URL 中的 ID 参数值为 `-1' OR '1'='1` 并观察响应变化;此时应该能看到所有记录而非仅限于指定编号的那一行; 3. 如果第2步成功,则证明该处确实存在着可被利用之处; 4. 接下来就可以采用二分查找算法逐步确定数据库名称长度及其具体内容了——即不断调整ASCII码范围直至命中为止[^3]。 需要注意的是,在实际环境中应当遵循合法合规的原则开展此类活动,并确保拥有足够的授权许可。 #### 防护措施建议 为了避免遭受类似的威胁侵害,开发人员务必重视输入校验环节的设计实施工作。具体来说就是对来自外部的一切变量都要经过严格的过滤清洗处理后再投入使用;同时推荐使用预编译语句代替传统的动态拼接模式编写SQL指令。 ```php // 不安全的做法 $query = "SELECT * FROM users WHERE username='" . $_GET['username'] . "'"; // 安全做法 - 使用 PDO 进行参数绑定 $stmt = $pdo->prepare('SELECT * FROM users WHERE username=:name'); $stmt->execute(['name'=>$_GET['username']]); ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值