麻烦的来了诶,装作不知道是布尔注入,依然按照题目意思输入1看看
从这里可以知道我们不需要打引号
哦对了,我们先应该判断是否有注入点,利用真假语句来判断id的值是否可以改变sql语句的变化
通过恒真语句and 1=1和恒假语句and 1=2得知id的值可以改变sql语句的走向,说明这里存在注入点,然后便上网查询一下布尔注入应该要用到哪些函数语句
length()返回长度
这里弊端就是因为都是ctfhub上面的题,只是注入方式改变,数据库名啥的没变,所以只是为了让我们动手用这种方法试验一下,如果去真正的比赛的话可就没有那么容易好找了
1 and length(database())=4
可以知道数据库名是四个字符的,然后利用substr(x,1,1)分割函数来一个个试是什么字符,利用ascii的值来判断
substr()PHP substr() 函数
可以得知数据库第一个字符的ascii值是大于110的,利用二分法来做比较快,因为我们知道数据库名肯定就是sqli了,便直接试试是不是等于115来验证我们的想法
可以确定第一个字符的ascii值就是115也就是s,后面的就不用去猜了,肯定就是sqli了
接下来我们利用count函数来判断sqli数据库里有几个表
1 and (select count(table_name) from information_schema.tables where table_schema='sqli' )<3
可以知道少于3张表,我们就可以联想到news和flag了,方法随便用,可以用concat和floor这种方法来判断,但是都离不开ascii和count来判断
count()PHP count() 函数 | 菜鸟教程
1 and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>109
得知第一个表的第一个字符ascii值大于109,做到这里我就不想做了,如果一直这样猜的话,那如果我们真的ctf比赛的时候,做这一个题不知道要消耗我们多少时间,这里我们了解一下手动注入就行了,后面我用的是sqlmap工具
sqlmap常见命令sqlmap命令详解 - tooltime - 博客园
利用sqlmap来得知数据库有哪些(会有点慢,耐心等一下)
sqlmap.py -u 登录的地址 -dbs
虽然有点时间,但是还是比我们手动注入的快的
然后利用sqlmap.py -u 输入地址 -D sqli --tables来获取数据库里面的表(这种参数多做就知道了)
发现两张表flag和news,我们可以直接去看字段以及数值了
sqlmap.py -u 地址 -D sqli -T flag --columns --dump
flag就出来了,比手动注入容易多了,不过像我这种在学习的还是需要手动注入,少用工具,积累知识,以后厉害了再利用工具来方便点
还有一种方法就是python写一个脚本去跑,可惜太菜写不出来,还在琢磨别人的代码哈哈