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.工具注入
工具注入是指将手工注入自动化,通过编程实现数据库信息获取、数据表内容获取等。攻击者利用工具注入可以大幅提高效率,快速获取需要的信息。
防止工具注入在网站安全维护工作中是非常重要的。