前言
说出来满满都是泪呀 /(ㄒ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报错的话 就是数值型植入,看你们自己的习惯吧
第三关
输入一个‘ 发现报错了
注意报错的信息 后面多了一个)看源码
咱们输入 ‘ 后 源码就变成了
咱们刚才输入了一个’ 源码后面就变成了双引号 与最前面的双引号对照了,所以就会编译出错误的) 所以咱么就再输入一个) 让源码变成
让(‘’)构成闭合而–+注释掉后面的‘) 就不会再报错
第四关
输入一个 ‘ 发现没报错,说明没构成闭合,所以说明 ‘ 是错的,然后试试 "
发现出现报错 咱们输入的 " 与最前面的 " 构成了闭合 所以会出现后面的报错信息,还是放源码,这样咱们好理解
、发现了点啥没,同志们
咱们后面的 因为 ") 编译错误了,所以他的闭合符号必是”(“ "),
哎,写了一下午,终于写完了,笔者如果哪里写的不对或者思路有问题,欢迎各位师傅指教 🤭