BUUCTF [强网杯 2019]随便注 1
这几天也是闲的没事干, 挖洞又挖不到, 找两个CTF平台, 又啥也不会. 网上看大佬的解题过程, 还是能学到不少网上培训视频里头不常讲的东西.
这题大概的解题过程: 判断SQL注入->存在->过滤了select等关键方法->堆叠注入->select无法使用->修改表名
题目大概就长这样, 当前查询了当前表2个字段

随便代一下联合查询.

让我自己找的话, 我估计是找不到堆叠注入这个东西, 还是经验太少.
这里是有两张表, 分别是words和1919810931114514.

在通过desc 1919810931114514发现是没有返回表结构的, 大佬们写的是因为系统原因什么的, 表名是被`表名`包裹的,
我自己去试了一下, 这里涉及到的是一个命名规范的问题, 数字打头在哪都不行

1919810931114514这张表里面是只有一个flag字段的, flag里面保存的肯定就是答案了.

desc words, 可以发现这里是没有加反引号的, 这张表里面有两个字段.

分析一下现在的情况:
xx库 下有两张表: words, 1919810931114514
words: id int(10), data varchar(20)
1919810931114514: flag varchar(10)
那么在程序里和数据库里交互的SQL: select * from words where id = $_GET['inject']
解题思路: id是用来做比对的, 当数据库id字段不存在会报错, 但是flag改成id字段后, 我可不管能不能查到数据, 直接一个or全找到.
1. 修改words表名为任意表名
2. 修改1919810931114514 flag字段改为id字段, 并且将表名修改为words
1';alter table words rename aaa;alter table `1919810931114514` change flag id varchar(64);alter table `1919810931114514` rename words;#
成功获取到flag

浙公网安备 33010602011771号