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

 

 

posted @ 2022-06-26 12:32  飞_扬跋扈  阅读(175)  评论(0)    收藏  举报