sql-labs 1~4

109 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

说出来满满都是泪呀 /(ㄒ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报错的话 就是数值型植入,看你们自己的习惯吧 在这里插入图片描述 在这里插入图片描述

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

输入一个‘ 发现报错了 在这里插入图片描述

注意报错的信息 后面多了一个)看源码 在这里插入图片描述

咱们输入 ‘ 后 源码就变成了 在这里插入图片描述

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

第四关

在这里插入图片描述 输入一个 ‘ 发现没报错,说明没构成闭合,所以说明 ‘ 是错的,然后试试 "

在这里插入图片描述

发现出现报错 咱们输入的 " 与最前面的 " 构成了闭合 所以会出现后面的报错信息,还是放源码,这样咱们好理解

在这里插入图片描述

发现了点啥没,同志们 咱们后面的 因为 ") 编译错误了,所以他的闭合符号必是”(“ "),