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

sqli-labs复现

sqli-labs第一关复现

  • 环境搭建
    • 下载phpstudy
    • 下载sqli-labs
    • 浏览器加载
  • 第一关复现

环境搭建

下载phpstudy

phpstudy是一个可以快速帮助我们搭建web服务器环境的软件

官网:https://www.xp.cn/

这里我选择的是windows 64bit 客户端版本,安装路径为C:\phpstudy

安装完后打开软件
在这里插入图片描述
选择上面的WNMP,进行启动。然后点击网站进行一些修改
在这里插入图片描述
目录的内容看下面

下载sqli-labs

sqli-labs:https://github.com/Audi-1/sqli-labs

进入github下载源码,进入c:/phpstudy/www目录,也就是我们localhost配置的网站目录

删除里面的文件,并将下载好的压缩包解压到www目录下,如下
在这里插入图片描述
对sqli-labs初始化文件进行配置
在这里插入图片描述

浏览器加载

然后打开浏览器
在这里插入图片描述
这里需要点击第二行的Setup/reset Database for labs 配置数据库,成功如下
在这里插入图片描述
这里大家可能会出现这样的错误
在这里插入图片描述
出现这个问题很简单,去到phpstudy的网站里面去修改你的php版本,版本过高是无法实现的。
然后
在这里插入图片描述
就OK了。

第一关复现

首先,我们需要了解注入是怎么产生的
注入的产生,是因为程序过滤不严谨,没有将用户的输入进行过滤,没有过滤那么如果输入恶意代码,注入数据库就将产生问题,出现数据库的异常查询。

一般注入的重点也就是分析源码。

那么我们来看一下第一关
看一下源码。
源码就是在我们下载的文件中就存在
在这里插入图片描述
分析源码我们得知:
首先是,数据库的连接,然后通过GET传参给id,然后再打开一个文件,再通过写入文件的句柄,id写入,然后关闭。之后再进行查询,查询出一个数组之后,比对,存在,就从数组取值,并且输出到前端,还使用样式包装,没有则报错,输出到前端。没有传参,就提醒用户输入。

源码分析可能不容易理解,那我们到前端看一些是什么情况。
在这里插入图片描述
传个参数。
在这里插入图片描述
好像没啥作用,就输出了id为1的数据。
通过对源码的分析,name和passwd应该出数据的地方,也就是用户名和密码,但是我们目前没有显示出来分明显,我们没有实现注入。

那我们再去查看源码

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

这里是查找数据的,我们传入了1,那么这里就查1。
但如果我们改变一下。
在这里插入图片描述
但是这里又出现了报错,语法问题。我们也可以理解,毕竟我们多出来了一个单引号,无法闭合,出错正常。那么我们是不是可以通过单引号逃逸出来。

既然可以逃逸,那么之后我们要干什么呢,为了数据啊,那么我们就需要为了管理员的数据去研究。

首先我们了解查询方式。
第一种:联合查询 union select
第二种:and

那么联合查询可以做什么呢

select * from users union select * from emails;

这句代码的意思就是,将表users和emails放在一起查询数据。
但联合查询存在一个前提:两张表的列需要保持一致。不一致将查询不出来。
我们目前不知道表的列数怎么办呢

select * from users union select 1,2,3;

模糊测试,我们假设存在3列,然后查询,如果出现错误,那就增加或减少,这样一个一个测试,我能就可以实现列的查找。

and的方法

select * from users and 1=1

这种也是查询的一种。

既然我们想要入侵管理员,那我们需要获得管理员的用户名和密码。
想得到呢,就需要知道数据的数据库名,库名,表名,列名。

一般是查询,mysql版本号,查询权限,登录用户,当前所在数据库。

针对列数,我们也可以使用 order by 函数,来确定列,order by主要是排序。因为排序可以使用1,来代表第一列,2,来代替第二列,多出的列数将会报错,那么我们也就知道列数了。

除此之外,我们还需要知道,注释符。
单行注释 – #
多行注释/**/

目前我们闭合,多出的去注释,去逃逸尝试一下。
在这里插入图片描述
这里后面还有一个引号,出现报错,我们通过注释符注释掉
在这里插入图片描述
再url里面注释,从–空格变为了–+。
出来了内容了,那我们就开判断一下列数。
在这里插入图片描述
在这里插入图片描述
我们这只存在3列。
我们来联合查询
在这里插入图片描述
这里的联合查询好像和我们输入为1没啥区别。
注意:联合查询需要前面的条件为假。为假,那么我们就输入符数,一般无符号整型,-1不满足
在这里插入图片描述
输出2,3这里表示的是前端可以展示出来的列数,也就是2和3字段出数据,也就是可以在前端显示。

那么我们就可以看看其他的内容
在这里插入图片描述
用户和版本就输出了。
在这里插入图片描述
库名也可以出来了。

http://localhost:9005/Less-1/?id=-1%27%20union%20select%201,concat(table_name),3%20from%20mysql.innodb_table_stats%20where%20database_name=%27security%27%20--+

利用这个可以得表名。
通过添加limit 1,1依次获得其他表明,最后找到users

列名如何查到
在这里插入图片描述
获得了id
在这里插入图片描述
获得username
在这里插入图片描述
最后password
在这里插入图片描述
最后也就查出来了。

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

相关文章:

  • k8s入门到实战--跨服务调用
  • 小程序中使用分包
  • python官方标准库
  • Python Opencv实践 - 霍夫圆检测(Hough Circles)
  • 异步请求库的实际应用案例:爬取豆瓣经典电影
  • 数据结构学习系列之两个单向链表的合并
  • java网络编程,套接字socket
  • 一日一技:Python如何同时调用多个GPT的API?
  • 【云原生】Docker环境安装
  • 56、springboot ------ RESTful服务及RESTful接口设计
  • sysmonitor如何使用
  • 视频监控/视频汇聚/安防视频监控平台EasyCVR如何将默认快照的raw格式改为jpg/base64格式?
  • QRCode.js生成的二维码水平居中的解决方案
  • 在Cisco设备上配置接口速度和双工
  • 增益带宽积GBW
  • 二分搜索树节点的查找(Java 实例代码)
  • 2.9 PE结构:重建导入表结构
  • MybatisPlus插件功能详细介绍 自动分页 通用分页实体
  • ES kibana 创建索引快速脚本
  • 2023年09月编程语言流行度排名
  • linux对一个文件夹中的所有文件重命名
  • Greenplum执行SQL卡住的问题
  • Discourse 的系统日志
  • 【7z密码】如何给7z压缩包加密、解密?
  • InnoDB为什么使用B+Tree
  • 【Spring Bean的生命周期实现方式】
  • 腾讯云PK阿里云2核2G云服务器租用价格表
  • 【美团3.18校招真题2】
  • 一文带你快速入门『YOLOv8』
  • # 将PCL点云转换为Eigen向量进行运算