史上最详细的sql-labs通关秘籍less1-4

本文详细介绍了SQL注入的基础知识,通过四个不同类型的注入实例(字符型、数字型、单引号闭合、双引号闭合)进行实战演练,包括判断注入类型、字段数、可显字段、数据库名、表名、列名的获取。通过实战加深理解,帮助读者掌握SQL注入的基本技巧。

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

tips:可以打开每一关的源码,在该位置添加一句代码方便做题时分析,echo "sql里面执行的是".$sql."<br>";
在这里插入图片描述

less-1 基于字符型的注入

一、判断注入类型

题目提示输入id作为参数并伴随着赋一个数值给id,那我们就根据提示在地址栏url末尾加上
?id=10 返回的是一对用户名和密码
在这里插入图片描述

id=10' 返回的是一个报错,大意是sql语句中有一个错误在数值10附近
在这里插入图片描述

id=10' --+ 返回的仍然是一对用户名和密码
在这里插入图片描述

服务器中完整的sql语句是select * from users where id=' ',这个id值由用户输入,输入后直接被放在了sql语句中执行,所以当我们多加一个单引号时,执行的sql语句是select * from users where id='10 '',这就产生错误了,正确的sql语句是将id数值包裹在一对无需用户输入的单引号中,由于用户输入了一个单引号,就导致有一个多余的双引号(sql中原有的那对单引号中后面那一个单引号),这个错误呢就可以巧妙利用注释符来告诉数据库“执行到这就好了,后面的你别管了”,小弟一听乖巧地执行了,没有理会后面多余的单引号,把它作为了注释忽略掉了。
在这里我们就满足了两个注入条件,客户端输入的内容直接拼接在sql执行语句中,且客户端可以终止sql执行的字符串到哪为止(这也是我们常说的闭合单引号)

数字型注入的判断:(这种方法只能判断数字型注入,不符合的话就是别的类型注入了)
?id' and 1=1 可正确返回用户名和密码
?id' and 1=1 不能返回用户名和密码
字符型注入的判断:
加单引号’、双引号"、单括号)、双括号))等看看是否报错

接下来就是如何利用的问题了!!!!!!

二、判断字段数

用order by猜解字段,即判断这张表一共有几个字段
?id=10' order by 4 --+ 回显报错
?id=10' order by 3 --+ 回显正常
查询验证一下,users表中确实只有三个字段:
在这里插入图片描述

三、判断可显字段

用union联合select查询在页面中回显的是第几个字段,即判断可显字段
?id=-10' union select 1,2,3 --+ 这里注意id要等于一个错误的值,不然回显的就是数据库中有的用户名和密码;让前面出错,就会回显union后面的内容,最好的方法是用逻辑运算符and使union前面为错,比如?id=1 and 1=2
在这里插入图片描述

可以看到可显字段是第2个和第3个字段,所以我们可以利用一些函数回显出我们想要的信息。

四、获取数据库名

比如用database()函数获得当前数据库名,version()函数获得当前数据库版本
在这里插入图片描述

五、获取表名

?id=-1' union select 1,group_concat(table_name),version() from information_schema.tables where table_schema='security'--+

在这里插入图片描述

六、获取列名/字段名

?id=-1' union select 1,group_concat(column_name),version() from information_schema.columns where table_schema='security' and table_name=&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值