sql-labs(1~4)

本文详细记录了作者在靶场搭建过程中遇到的问题及解决方法,并分享了SQL注入实战经验,包括闭合符号判断、联合查询注入等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

说出来满满都是泪呀 /(ㄒoㄒ)/~~
我的靶场一直搭建不好,tmd,PHP study下载好了,并且在db-creds.inc里的用户地址也改为了本地127.0.0.1(localhost) 但是在打开靶场,发现打不开题(知道有多难受么)知道最近才问学长,同学,才发现是自己的PHP study版本太高了,这里就又出现一个问题,哎,我下载了好几个版本,但是他还是一直用的是原先呢个高版本,我裂开,这一个问题又愁了好几天,服了,直到有一天,偶然翻PHPstudy时找到了一个神奇的地方
在这里插入图片描述
然后神奇的靶场就能打开了

第一关

首先先判断闭合符号 闭合符号有四种 ‘ “ ’) ”)(就是这闭合符号的判断是最要人命的,为啥有的时候就报错,有的时候就不报错,然后辛辛苦苦查资料,看视频,一直处于模棱两可的状态,知道今天终于让我明白了,哈哈,真的,真正掌握之后,你会很轻松,并且开心的一匹) 咱们从原码跟做题一块分析,这样让咱们好理解
在这里插入图片描述
这一句话就是他的原码,注意,这里补充一下,最好用火狐浏览器,里面有hackbar插件,老版火狐最好,因为新版火狐的hackbar插件他不编译+,编译出来就是%27 (懂得都懂)
先输入一个引号,发现报错,报错就对了,要的就是报错!

在这里插入图片描述
然后输入–+(注释符号),发现就又成功了
在这里插入图片描述
这得通过源码来解释
在这里插入图片描述
你输入的一个 ‘ 正好是id 后面的引号,源码就变成了 ’$id’ ’ 因为多了一个 ‘ 所以就会报错,但是当你在后面再输入–+时 源码就变成了 在这里插入图片描述
你输入的引号与前面的引号闭合,而–+ 注释掉了后面的 ‘ 就不会再报错
而 LIMIT 0,1 这里面的0 就是你前面需要的id里的第一位,如果是LIMIT 1,1 就是id里的第二位 而LIMIT 0,1 后面的1就是显示1个id,如果是LIMIT 0,2
呢么就是id里的第一个开始排序,排出前两位输出(这里就不展示了,想试试的下去可是试试)
然后就要判断他的列数 order by (order by 4 将列表里的第四列从上到下按二十六个字母顺序排序,如果没有第四列,就会报错,这就是order by 能判断列数的原因)

在这里插入图片描述
看! 这里就出现报错了 说明他没有第四列
在这里插入图片描述
这里就说明这个字段有三列
然后就开始联合查询注入
先爆出他所有的数据库
因为他有三列
所以后面的1,2,3 两个逗号分开了三个数字,三个数字就表示有三列(如果是四列的话 就要三个逗号分开四个数字了,逗号里的数字可以随便写)
查询它所有的数据库(如果联合查询语句不理解的话,去看看我上面的博客,这里直接开始操作)(用union select语句之前要让id等于一个不存在的值,不然他就只执行id的命令,所以当你的id报错时,后面的联合查询才有效)
group_cancat函数是激将所有的内容列出来
在这里插入图片描述
查询库 (select group_concat(schema_name) from information_schema.schemata
接下来就是查询security库里面的所有的表

在这里插入图片描述
Select group_concat(table_name) from information_schema.tables where table_schema=’security’ (这里的单引号可能出现编译错误的问题,所以这里可以使用十六进制 变成0xsecurity的十六进制形式)我还没遇到过这种情况,到时候遇见再说
接下来就是查询users的列

在这里插入图片描述
Select group_concat(column_name) from information schema.columns where table_name=’users’
我么最终是要爆出他的username和password
在这里插入图片描述
在这里插入图片描述
Select group_concat(usersname) from security.users
Selecy group concat(password) from security.users

**后面我就只就讲如何查询字符了,因为后面几关就只有判断字符,数值不一样,剩下的都一样

第二关

先看源代码
在这里插入图片描述
发现没有 这里的$id 左右没有任何字符,说明他就是另一种注入方式了,数值型注入
做题的话咋判断他是字符型注入还是数值型注入呢 看
在这里插入图片描述
在这里插入图片描述

注意LIMIT前面的符号,这里我第一个输入的id=1" 第二个我输入的是 id=1’ 有没有发现啥,我自己输入的东西报错了
说明就是数值型注入
还有一种方法就是 输入 id=1 and 1=1 没报错 输入 id=1 and 1=2报错的话 就是数值型植入,看你们自己的习惯吧
在这里插入图片描述
在这里插入图片描述

第三关在这里插入图片描述

输入一个‘ 发现报错了
在这里插入图片描述注意报错的信息 后面多了一个)看源码
在这里插入图片描述
咱们输入 ‘ 后 源码就变成了
在这里插入图片描述
咱们刚才输入了一个’ 源码后面就变成了双引号 与最前面的双引号对照了,所以就会编译出错误的) 所以咱么就再输入一个) 让源码变成
在这里插入图片描述
让(‘’)构成闭合而–+注释掉后面的‘) 就不会再报错

第四关

在这里插入图片描述
输入一个 ‘ 发现没报错,说明没构成闭合,所以说明 ‘ 是错的,然后试试 "
在这里插入图片描述
发现出现报错 咱们输入的 " 与最前面的 " 构成了闭合 所以会出现后面的报错信息,还是放源码,这样咱们好理解
在这里插入图片描述、发现了点啥没,同志们
咱们后面的 因为 ") 编译错误了,所以他的闭合符号必是”(“ "),
哎,写了一下午,终于写完了,笔者如果哪里写的不对或者思路有问题,欢迎各位师傅指教 🤭

### 使用Docker安装SQL-Labs 为了使用Docker来部署SQL-Labs环境,需先确认服务器已成功配置好Docker服务[^1]。接着通过拉取官方镜像的方式快速启动容器。 #### 准备工作 确保本地具备可用的Docker版本并正常运行。可以通过命令`docker --version`验证当前环境中Docker的状态以及其具体版本号。 #### 获取SQL-Labs镜像 访问[Docker Hub](https://hub.docker.com/)寻找合适的SQL-Labs镜像标签,通常推荐采用最新稳定版以获得更好的兼容性和安全性支持。执行如下指令下载目标镜像: ```bash docker pull sql-labs/sql-labs:latest ``` 此操作会依据网络状况自动同步所需文件至本地缓存中等待后续调用。 #### 启动SQL-Labs容器实例 创建一个新的容器用于承载应用程序及其依赖项,指定端口映射参数使得外部能够访问内部服务。下面的例子将主机上的3306端口转发给容器内的MySQL数据库默认监听地址;当然也可以根据实际情况调整其他必要的选项如卷挂载路径等: ```bash docker run -d \ --name=sql-labs-instance \ -p 8080:80 \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ sql-labs/sql-labs:latest ``` 上述脚本定义了一个名为`sql-labs-instance`的新进程,并开放Web界面供用户浏览学习资源。同时设置了root用户的初始密码以便初次登录时完成身份认证流程。 #### 访问应用 一旦容器顺利启动后即可尝试连接到http://localhost:8080查看在线文档和实验指导页面。如果是在远程机器上操作,则应替换为实际IP地址或域名形式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值