CTFHUB——字符型注入

解题步骤

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

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

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

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

selece * from news where id='1' --+ '(注释符)

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

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

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

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

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

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

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

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

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

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

总结

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

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

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值