网络攻防实战研究:MySQL数据库安全
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 MySQL注入基础

2.2.1 MySQL系统函数

MySQL有很多系统函数。通过查询这些函数,攻击者可以获取系统参数、数据库安装路径等敏感信息,在root权限下还可以读取所有数据库用户的密码。一般使用“select 函数名称;”进行查询。

· system_user():查询系统用户名,执行结果如图2-2所示。每个查询语句都要以分号结束,否则执行将会失败。

图2-2 查询系统用户名

· user():查询当前用户名。以root用户登录,执行结果是一致的。

· current_user():查询当前使用的用户名。

· session_user():查询连接数据库的用户名。

· database():查询使用的数据库名。如果没有使用usedatabasename,则显示为空。

· version():查询MySQL数据库版本。例如,“5.0.90-community-nt”与“select@@GLOBAL.VERSION;select@@version;”的查询效果相同。

· load_file():读取本地文件。

· @@datadir:读取数据库路径。

· @@basedir:获取MySQL的安装路径。

· @@version_compile_os:获取操作系统版本。

完整的命令格式如下。

2.2.2 收集Windows和Linux文件列表

Windows 和 Linux 操作系统常常将某些敏感信息存储在特定的文件中。如果攻击者发现网站中存在 SQL 注入漏洞,且能够利用 2.2.1 节提到的 load_file()函数读取文件,就能够通过提前收集的Windows和Linux敏感文件的默认路径获取想要的信息。下面列举部分文件名及默认路径。

1.Windows文件

· c:\boot.ini:Windows Server 2008以下版本使用。

· c:\windows\php.ini:其中存储了PHP配置信息。

· c:\windows\my.ini:MySQL配置文件,记录管理员使用过的MySQL用户名和密码。

· c:\winnt\php.ini.

· c:\winnt\my.ini.

· c:\MySQL\data\MySQL\user.MYD:其中存储了MySQL.user表中的数据库连接密码。

· c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini:其中存储了虚拟主机网站的路径和密码。

· c:\Program Files\Serv-U\ServUDaemon.ini.

· c:\windows\system32\inetsrv\MetaBase.xml:IIS配置文件。

· c:\windows\repair\sam:其中存储了初次安装Windows操作系统时使用的密码。

· c:\Program Files\Serv-U\ServUAdmin.exe:其中存储了Serv-U 6.0以前版本的管理员密码。

· c:\Program Files\RhinoSoft.com\ServUDaemon.exe.

· c:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif:其中存储了pcAnywhere的登录密码。

· c:\Program Files\Apache Group\Apache\conf\httpd.conf或C:\apache\conf\httpd.conf:Windows操作系统的Apache文件。

· c:\Resin-3.0.14/conf/resin.conf:使用JSP开发的网站的Resin文件。

· c:\Resin\conf\resin.conf.

· d:\APACHE\Apache2\conf\httpd.conf.

· c:\Program Files\MySQL\my.ini.

· c:\windows\system32\inetsrv\MetaBase.xml:IIS的虚拟主机配置文件。

· c:\MySQL\data\MySQL\user.MYD:其中存储了MySQL的用户密码。

2.Linux/UNIX文件

· /usr/local/app/apache2/conf/httpd.conf:Apache2默认配置文件。

· /usr/local/apache2/conf/httpd.conf.

· /usr/local/app/apache2/conf/extra/httpd-vhosts.conf:其中存储了虚拟网站设置。

· /usr/local/app/php5/lib/php.ini:其中存储了PHP相关设置。

· /etc/sysconfig/iptables:其中存储了防火墙规则策略。

· /etc/httpd/conf/httpd.conf:Apache配置文件。

· /etc/rsyncd.conf:同步程序配置文件。

· /etc/my.cnf:MySQL配置文件。

· /etc/redhat-release:其中存储了系统版本信息。

· /etc/issue.

· /etc/issue.net.

· /usr/local/app/php5/lib/php.ini:其中存储了PHP的相关设置。

· /etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf:Linux Apache虚拟主机配置文件。

· /usr/local/resin-3.0.22/conf/resin.conf:Resin 3.0.22配置文件。

· /usr/local/resin-pro-3.0.22/conf/resin.conf:同上。

· /etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf:Linux Apache虚拟主机配置文件。

2.2.3 常见的MySQL注入攻击方法

1.手工注入

在MySQL手工注入中,攻击者主要利用MySQL自带的information_schema数据库获取和利用相关信息。information_schema数据库保存了MySQL服务器上所有数据库的相关信息,例如数据库名、数据库中的表、表列的数据类型与访问权限等。简单地说,在一台 MySQL 服务器上,到底有哪些数据库、各个数据库中有哪些表、每张表的字段类型是什么、各个数据库要有什么权限才能访问等信息,都保存在information_schema数据库里面。

在进行手工注入时,攻击者会通过构造SQL查询语句获取想要的信息,进行查询、写入文件、读取文件、执行命令等操作。

2.工具注入

工具注入是指将手工注入自动化,通过编程实现数据库信息获取、数据表内容获取等。攻击者利用工具注入可以大幅提高效率,快速获取需要的信息。

防止工具注入在网站安全维护工作中是非常重要的。