CTFHUB——字符型注入

解题步骤

CTFHUB——字符型注入_第1张图片

拿到题目输入1后发现id=‘1’可以得出题目类型为字符型注入,直接通过order by 进行判断数据一共有几列,但是因为第一次做字符型注入的题目所以用了错误的注入方式

原因(自己理解的):在字符型注入中传的值是用‘’单引号括起来的,其中的数据如果不为数值类型就会出错,为了让后注入的语句正常回显,就需要在1之后添加单引号使其与前面的单引号发生闭合,不影响我们的注入语句

原语句:select *from news where id='1'
改变后:selece * from news where id='1''

但是因为注入了单引号就会使语句多了一个单引号,造成报错,无法正常回显,还需在之后添加一个注释符将多的引号给注释掉

selece * from news where id='1' --+ '(注释符)
CTFHUB——字符型注入_第2张图片

正常回显,知道order by 3之后无回显,说明一共包含两个字段,利用union联合查询

CTFHUB——字符型注入_第3张图片

利用联合查询语句 select * from news where id='1' union select 1,2 将2代替为database()查询所在数据库名称

CTFHUB——字符型注入_第4张图片

这里页面没有变化是因为只显示了联合查询的第一行内容,我们需要更改id的传值使第二行内容显示在页面上,可以更改为id='-1'或者id='1' and 1=2 都行,只要让联合查询union左边的数据判断为假就可以使第二行的数据代替第一行显示出来 。得知数据库名称为sqli

CTFHUB——字符型注入_第5张图片

现在开始利用数据库名称查询,其中包含的所有表名称

再来复习一下,information_schema数据库是mysql自带的数据库,里面包含了很多信息,其中的schemata、tables、cloumns表中储存量了所有数据库、表和字段信息,可以通过这些将我们想要的信息显示出来。

group_concat(table_name) from informtion_schema.tables where table_schema='sqli'
翻译过来就是
在information_schema数据库的tables 表中查询sqli数据库包含的所有表有哪些,并将表名称组合成一行,表名之间用逗号隔开。
CTFHUB——字符型注入_第6张图片

找出两个表,之后查询flag表中的所有字段名称在information_schema数据库的columns表中查询flag表所包含的字段名称

CTFHUB——字符型注入_第7张图片

查找到flag表中一共包含了一个字段,字段名为 flag,继续查询flag字段里面的所有数据

知道了数据库名称和表名称就可以直接查询利用 数据库名称.表名称 结构获取到flag。

CTFHUB——字符型注入_第8张图片

注意:复制flag时注意不要多复制空格,多个空格会造成flag错误,提交失败。

总结

  1. 与前面整数型的题目差距不大,只是需要注意引号闭合的问题

  1. 有了先前的经验,做起来相对轻松,很快就完成了靶场练习

  1. 虽然很快就完成了,但也让我理解到这只是SQL注入中的初级入门题目,还需加强学习

你可能感兴趣的:(SQL,安全,sql)