网络安全系列之十八 MySQL基本操作(PHP注入基础)

在之前的博文中曾介绍过如何对ASP网站进行手工注入,ASP网站大都是采用ACCESS或MSSQL数据库,因而所谓针对ASP的SQL注入其实也就是根据ACCESS或MSSQL数据库的特点来构造查询语句。除此之外,对于PHP网站则大都是采用MySQL数据库,这里要进行手工注入时所使用的查询语句与之前就不相同了,而且相对比较复杂。为了更好地理解,在进行针对PHP网站的注入之前,有必要先了解一些MySQL的基本特点和常用操作语句。

首先需要搭建一个MySQL的实验环境,这里推荐在Linux系统中安装MySQL服务。

挂载光盘并设置yum源之后,安装运行mysql服务。

# yum install mysql        安装mysql

# service mysqld start    运行mysql

MySQL的默认管理员账号是root,没有设置密码,所以可以执行“mysql –u root”命令,以root用户身份登录MySQL。不过建议最好先用mysqladmin命令工具为root用户设置一个密码,然后用密码登录MySQL。

登录MySQL之后,可以在带有提示符“mysql>”的交互式命令环境中进行操作。在该操作环境中,输入的每一条数据库管理命令必须以分号“;”表示结束,可以不区分大小写。

(1) 查看基本信息

执行“select version();”命令查看MySQL版本,可以看到当前版本为5.0.77。

mysql> select version();

+-----------+

| version() |

+-----------+

| 5.0.77 |

+-----------+

1 row in set (0.00 sec)

执行“select @@version_compile_os;”命令查看操作系统版本,可以看到当前系统为redhat linux。

mysql> select @@version_compile_os;

+----------------------+

| @@version_compile_os |

+----------------------+

| redhat-linux-gnu |

+----------------------+

1 row in set (0.00 sec)

执行“select user();”命令查看当前用户,可以看到当前用户为root。

mysql> select user();

+----------------+

| user() |

+----------------+

| [email protected] |

+----------------+

1 row in set (0.07 sec)

执行“select database();”命令查看当前打开的数据库,可以看到当前没有打开任何数据库(NULL)。

mysql> select database();

+------------+

| database() |

+------------+

| NULL |

+------------+

1 row in set (0.01 sec)

(2) 查看数据库列表

执行“show databases;”命令可以查看MySQL中共包含了哪些数据库,默认情况下MySQL中内置了3个数据库:information_schema、mysql、test。

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| test |

+--------------------+

3 rows in set (0.00 sec)

(3)切换数据库

执行“use information_schema;”命令,可以打开information_schema数据库。

mysql> use information_schema;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

information_schema是MySQL5以后的版本中默认自带的一个数据库,它里面存放了由用户在MySQL中创建的所有其它数据库的信息。因而在进行PHP注入时,主要也就是针对这个数据库进行操作。

(4)显示数据库中的表

打开数据库之后,执行“show tables;”命令可以显示数据库中所包含的表。在information_schema中共包含了17个表。

mysql> show tables;

+---------------------------------------+

| Tables_in_information_schema |

+---------------------------------------+

| CHARACTER_SETS |

| COLLATIONS |

| COLLATION_CHARACTER_SET_APPLICABILITY |

| COLUMNS |

| COLUMN_PRIVILEGES |

| KEY_COLUMN_USAGE |

| PROFILING |

| ROUTINES |

| SCHEMATA |

| SCHEMA_PRIVILEGES |

| STATISTICS |

| TABLES |

| TABLE_CONSTRAINTS |

| TABLE_PRIVILEGES |

| TRIGGERS |

| USER_PRIVILEGES |

| VIEWS |

+---------------------------------------+

17 rows in set (0.00 sec)

在这些表中比较重要的有:

  • schemata:用于存放其它所有数据库的名字。
  • tables:用于存放MySQL中所有数据库的表的名字。
  • columns:用于存放MySQL中所有数据库的所有表中的所有字段的名字。

(5)显示表中的内容

执行“select * from schemata;”命令可以显示schemata表中的所有内容:

从命令显示的结果中可以看到,当前系统中共包含了3个数据库,这与之前查看到的结果一致。

(6)利用information_schema数据库查看其他所有数据库的内容

在了解了上述基础知识之后,我们就可以通过information_schema数据库来查看到其他所有数据库中我们所关心的内容。

为了更好的演示,我们先执行“exit”命令退出MySQL环境,然后再重新登入。

登入之后,我们先不打开任何数据库。

假如我们想知道mysql数据库中都包含了哪些表,可以执行命令:

由于当前我们并没有打开任何数据库,因而“information_schema.tables”就表示information_shema数据库中的tables表,前面介绍过,这个表中存放了其他所有数据库的表的名字。

“table_name”是tables中用于存放表名的字段,“tables_schema”是tables中用于存放数据库名的字段。

再如我们想知道mysql数据库的user表中包含哪些字段,可以执行命令:

掌握了这些知识之后,接下来我们就可以进行手工PHP注入了。

时间: 2024-10-28 20:24:12

网络安全系列之十八 MySQL基本操作(PHP注入基础)的相关文章

网络安全系列之四十八 在IIS6中配置日志

如果网站启用了日志记录,管理员就可以通过查看日志跟踪网站被访问的情况,如哪些用户访问了本站点.访问者查看了什么内容,以及最后一次查看该信息的时间等,可以使用日志来评估内容受欢迎程度或识别信息瓶颈,有时还可以通过日志查出非授权用户访问网站以便采取应对措施. 启用网站日志记录的方法是在"网站"选项卡中勾选"启用日志记录",单击旁边的"属性"按钮,打开属性设置界面,如图所示,可以看到日志文件产生的时间间隔和存放的位置.默认设置是每天产生一个日志文件.

Cocos2d-x 3.x 图形学渲染系列二十八

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 昨天,刚从丈母娘家回来,继续博客的更新,接着Cocos2d-x 3.x图形学渲染系列二十七继续系列二十八的编写. 接下来读取FBX模型文件信息,首先要做的是把读取的模型信息进行归类并

C++语言笔记系列之十八——虚函数(1)

1.C++中的多态 (1)多态性:同一个函数的调用可以进行不同的操作,函数重载是实现多态的一种手段. (2)联编:在编译阶段进行联接,即是在编译阶段将一个函数的调用点和函数的定义点联接起来. A.静态联编:在编译阶段就完成的函数联编--函数重载. B.动态联编:在程序的运行阶段由系统自动选择具体的函数--虚函数. 注:C++的多态主要指的就是动态联编. 2.虚函数 (1)虚函数是在函数的定义时将其声明为虚函数即可. (2)说明:virtual 数据类型 函数名(参数表) {函数体} A.目的:当

ComicEnhancerPro 系列教程十八:JPG文件长度与质量

作者:马健邮箱:[email protected] 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度与质量 众所周知,JPG是一种"有损"压缩格式,与PNG等无损压缩格式相比,最大的问题是:如果反复压缩,会造成图像质量逐渐退化.所以在对JPG文件进行处理,并且输出仍然选择JPG格式的情况下,很多人都会问同样的一个问题:如何才能在尽情享受有损压缩带来的较小文件长度的便利前提下,尽量避免图像质量退化? 为了解

[算法系列之十八]海量数据处理之BitMap

一:简介 所谓的BitMap就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了bit为单位来存储数据,因此在存储空间方面,可以大大节省. 二:基本思想 我们用一个具体的例子来讲解,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复).那么我们就可以采用BitMap的方法来达到排序的目的.要表示8个数,我们就只需要8个bit(1Bytes). (1)首先我们开辟1字节(8bit)的空间,将这些空间的所有bit位都置为0,如下图: (2

燕十八mysql笔记

mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop 二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用户名 -p 密码 -h host主机 2:库级知识 2.1 显示数据库: show databases; 2.2 选择数据库: use dbname; 2.3 创建数据库: create database dbname charset utf8; 2.3 删除数据库: drop database d

单片机小白学步系列(十八) 单片机/计算机系统概述:通信接口与协议

前面说了信息与数据的概念,这里要说的是与之关系密切的问题--通信. 通信 何为通信?在英文中,通信用Communication表示,这个词也有交流的意思.实际上,通信和交流确实是一样的意思.不过在汉语中,交流常用来表示人与人之间的交流:而通信一般用于比较专业正式的场合,也就是所谓的术语. 人与人之间的交流,是信息交换的过程:微机系统或模块之间的通信,就是数据传输的过程了. 接口 人在用语言交谈时,需要用嘴说话,用耳朵听,通过空气来传播.信息的传递依赖嘴巴和耳朵来进行发送和接收. 微机系统的通信,

Linux命令:MySQL系列之十四--MySQL备份与还原(xtrabackup工具重要章节)

一.percona-xtrabckup安装环境:redhat 6.0数据库:mysql 5.5.28  (编译安装) 1,官网下载并安装(下载地址文章尾部) [[email protected] ~]# rpm -ivh percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm warning: percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID

《windows核心编程系列》十八谈谈windows钩子

windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功能.所谓的指定窗体并不局限于当前进程的窗体,也能够是其它进程的窗体.当监视的某一消息到达指定的窗体时,在指定的窗体处理消息之前,钩子函数将截获此消息,钩子函数既能够加工处理该消息,也能够不作不论什么处理继续传递该消息.使用钩子是实现dll注入的方法之中的一个.其它经常使用的方法有:注冊表注入,远程线