你真的会SQL注入攻击吗?(上)

发表于:2017-8-23 14:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:黑客生活    来源:51Testing软件测试网采编

  作者在网络上看过无数的关于手工注入的讲解
  却没有一个真正完整把原理说清楚的文章,直接就是附上爆库、爆表的语句,甚至也没有详细说过任何一个Mysql函数的概念。
  sqlmap语句滚瓜烂熟。这也间接的导致了现在许多人只会学不会造,永远都在求绕过姿势
  为了让每一个学习注入的人完整地了解SQL注入,此处以Mysql Union Query(联合查询)注入类型来讲解。了解Mysql注入前我们还必须先了解“information_schema”这个数据库。为了更直观地展示,以图形化界面PHPMyadmin来说明这个数据库。
  information_schema数据数据库是MySQL自带的数据库,简单来说它存储着整个Mysql数据库的数据信息,其中就包含Mysql里面的所有库、表、字段的关系结构。
  在PHPMysql中打开information_schema数据库中的SCHEMATA表。看最关键第二个字段“SCHEMA_NAME”,你是否会觉得很熟悉?
  没错,它就是显示Mysql数据库中所有的库名。不信你可以在Mysql命令行使用Show databases;查看你数据库中的所有库子。如下图:
  那么说来我们要获取一个Mysql数据库中的所有库名则可以使用SQL语句“select SCHEMA_NAME from information_schema. SCHEMATA”。(注意这里的:information_schema. SCHEMATA是什么意思呢?点号的前面是数据库名,点号后面则是表名,例如a.bc表示a数据库下的bc表)。
  OK,那么我们来想想如何获取一个数据库中的所有表呢?没错,也是在information_schema数据库中。只不过我们不是看“SCHEMA_NAME”这个表了,而是看“TABLES”表了,这个表是存储着所有的每个数据库每个表的结构。如下图(不完整的截图):
  注意看,第二个字段是数据库的名字,第三个字段“TABLE_NAME”则是表名,上图是说Mysql数据库下 有“time_zone_name 、time_zone_transition 、time_zone_transition_type 、user、”等几个表。那么获取一个数据库中的所有表的SQL语句则为“select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA =你要获取表的数据库名”,例如我要获取“Mysql”这个数据中的所有表,如下图:
  下一步我们要了解如何获取字段了,字段的信息存储在information_schema数据的COLUMNS表中。如下图中(截图不完整),第二个字段“TABLE_SCHEMA”是数据库名称,第三个字段“TABLE_NAME”是当前数据库中的表名。第四个字段“COLUMN_NAME”是当前表下的字段。
  以上图第一行举例说明:mysql数据库下的user表中的Reload_priv字段。这样我们要获取一个表中的所有字段则可以使用这样的SQL语句“select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=获取字段的表”,如下图获取Mysql数据库下的user表的所有字段名称。
  很完美,我们已经学会了使用information_schema查询一个数据库中的所有库名、表名、字段等信息,这对我们学习SQL注入非常有用处,是不是觉得很绕,对,刚开始学习这些就是非常地绕,大家可以动动手练习一下就会熟能生巧了。
  练习完之后我们将进入下章节的注入学习。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号