sqli-labs靶场搭建
1、安装phpstudy
直接在官网下载就可以,地址:【https://www.xp.cn/download.html】
安装好phpstudy后,启动apache,mysql环境。
2、然后去下载一个5.X版本的php,因为php7版本以上抛弃了mysql_系列函数,转用mysqli系列函数,所以用php7版本以上安装的时候就会报错
3、在【https://codeload.github.com/Audi-1/sqli-labs/zip/master】下载 sqli-labs 源码。
下载完成后,将源码解压至如下的目录
这里我是把文件 sqli-labs-master 改名成了 sqlilabs
4、查看phpstudy里的php数据库的用户密码
5、去如下目录中找到db-creds.inc,然后修改密码,这里的密码要与上条中数据库的密码一样。
6、创建sqli-labs网站
7、以上步骤完成后输入127.0.0.1进入靶场,点击下方所指示的,初始化数据库
然后即可开始练习
sqli-labs关卡复现
Less-1
看题,提示你输入数字值的ID作为参数,我们输入?id=1
输入的数值不同,回显内容也不同,所以输入的内容是带入到数据库里面查询了
接下来,判断 Sql 注入漏洞的类型:
1.数字型
2.字符型
其实所有的类型都是根据数据库本身表的类型所产生的,在我们创建表的时候会发现其后总有个数据类型的限制,而不同的数据库又有不同的数据类型,但是无论怎么分常用的查询数据类型总是以数字与字符来区分的,所以就会产生注入点为何种类型。
数字型判断:
用 and 1=1 和 and 1=2 来判断:
1.Url 地址中输入 ?id= x and 1=1 页面依旧运行正常,继续进行下一步。
2.Url 地址中继续输入 id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。因为逻辑判断错误。1并不等于2。
当我们进行上述所说的判断时,会发现此时页面显示正常,说明不是数字型注入漏洞
字符型判断:
概述:当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号或其它特殊符号来闭合,而字符串一般需要通过特殊符号,如单引号来闭合的。
如果一条后台语句为:$sql=“SELECT * FROM users WHERE id='1 ’ LIMIT 0,1”,这里的“1”被加上了单引号,使我们无法查询
我们可以通过在URL地址栏输入?id=1’ 来判断是否是字符型注入,
输入?id=1’,这时候1后面的单引号把原本语句的一对单引号隔开了,变成了?id=‘1’',多出了一个单引号,正常来说,包裹着id变量的单引号是成对,这样的语句结构没有问题的,多出了一个单引号就报错了破坏了原本的sql语句结构,并且这条语句被带进数据库进行查询,数据库由于无法处理这条 ‘非正常’ 的语句,所以也就报错了,由于数据库和前端页面是交互的,所以前端页面也会出现异常或者报错,会报错说明这条语句成功被带进数据库查询,存在字符型注入
输入?id=1’ --+ //(–+为注释符),会发现正常回显
用order by语句来查看有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。
如:?id=1’order by 3 --+
当输入?id=1’order by 4 --+后就报错,说明数据有3列
接下来我们使用 union select联合查询继续获取信息。
获取显示位
?id=-1'union select 1,2,3--+
说明页面有2个显示位, 这个显示位指的是网页中能够显示数据的位置
然后获取当前数据名和版本号
?id=-1'union select 1,database(),version()--+
查询列名,我们可以使用 group_concat函数,该函数返回一个字符串结果,该结果由分组中的值连接组合而成。
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
账号和密码在这个表中
接下来我们就要得到该字段对应的内容
?id=-1' union select 1,2,group_concat(username ,id , password) from users--+