最后的堡垒安全吗?——如何抵御PHP+MYSQL暴库攻击

网络安全

所属主题:SQL注入

杀伤力值:★★★★

操作难度:适中

适合读者:菜鸟黑客、中小型企事业网站管理员

据国家计算机网络应急技术处理协调中心CNCERT/CC统计,2007年7月1日至31日,我国大陆地区被窜改网站的数量为5618个,较上月增加了1549个,我国香港被窜改网站数量为49个,较上月增加了31个,我国台湾被窜改网站数量为97个,较上月增加了82个(图1)。

35-f10-1.jpg
图1

而据网络应急协调中心介绍,目前网站被黑,大多有以下几种情况,第一是网页代码漏洞(SQL注入),第二是服务器漏洞,第三是社会工程学的问题,那么针对网站容易被黑客SQL注入的情况,站长或服务器管理员该如何进行防范呢?

在前两期我们已经介绍了Access(MSSQL)以及ASP+SQL Server数据库型网站防范SQL注入的方法,由于PHP+MYSQL安全系数较高、访问速度较快、易用性较好、价格较便宜,目前越来越多的中小型企事业青睐它、采用它,这样针对Access(MSSQL)以及ASP+SQL Server注入的防范方法就会失效。所以本期小编就将如何防范针对PHP+MYSQL数据库暴库的方法呈现给大家,让各位管理员能更一步加强网站安全的防护!

揭秘PHP+MYSQL暴库攻击

1.暴出网站物理路径

首先,我们要查找并确认一个注入点,如“http://www.***.com/eshop/php/Show.php?ID=6”,在其注入点后利用“单引号法”来猜解网站物理路径,输入“http:// www.***.com/eshop/php/Show.php?ID=6'”,得到返回信息“Fatal error: Call to undefined function: numrows() in d:\localhost\virtualhost\go_dof_cn\eshop\php\show.php on line 37”,从返回的出错信息中我们得知了网站的物理路径为“d:\localhost\virtualhost\go_dof_cn\eshop\php\show.php”。

接着,我们在注入点后提交“ and 1=1”,返回页面正常显示,提交“ and 1=2”后返回错误信息“该商品暂时缺货.请原谅返回”(图2),这就说明此网站存在注入漏洞,值得我们进去转转。

35-f10-2.jpg
图2

2.获取当前数据库信息

然后,我们继续提交“http://www.***.com/eshop/php/Show.php?ID=6 and 1=2 union select 1”,返回错误提示,再提交“and 1=2 union select 1,2”,也是返回错误提示。

依次提交,当提交到“http:// www.***.com /eshop/php/Show.php?ID=6 and 1=2 union select 1,2,3,4,5,6,7,8”时,出现了没有错误提示的页面。

在这个页面中出现了Select后面的数字“2、4、5、7、8”,这些数字就是表示数据库中表字段出现的位置。从中可以推测2、7、8为字符型数据,4、5为数字型数据。

提交“union select 1,USER(),3,VERSION(),SES SION_USER(),6,DATABASE(),CURRENT_USER()”,返回结果如图3所示。

35-f10-3.jpg
图3

其中USER(),CURRENT_USER()、SESSION_USER()分别表示当前用户名、连接数据库的用户;DATABASE()表示当前数据库;VERSION()表示当前操作系统版本。从图中可知当前操作系统为“Windows NT”,当前用户为“root”,数据库为“intershop”。

3.读取PHP配置文件

第一步:针对一些没对PHP.INI进行配置的网站,我们可以直接使用“ and 1=2 union select 1,2,3,4,5,6,7,load_file(网站的物理路径)”进行提交,但此网站设置了magic_quotes_gpc=On,所以需要先将“d:\localhost\virtualhost\go_dof_cn\es hop\php\show.php”转为ASCII码。

这里笔者推荐大家使用“CSC注入格式转换器”进行转换,运行此软件后,在“字符”中输入文件路径,然后单击“转换”按钮,在下方的“ACS”中得到转换后的代码,点击“Copy”按钮把代码复制到剪贴板上(图4)。

35-f10-4.jpg
图4

小提示:由于一些服务器管理员做了安全配置(在后面我们将给大家进行这方面的安全配置),针对配置文件设置了“magic_quotes_gpc=On”,所以提交的变量中的“ ' ”、“\”和空格字符等都会被自动转为含有反斜线的转义字符。所以为了保证提交的语句不出错,能找到指定文件路径,所以需要进行ASCII码码化。

第二步:提交语句“ and 1=2 union select 1,2,3,4,5,6,7,load_file(刚才转化过的ASCII码)”,其中load_file()函数是用来读取显示网站系统中某个文件的。返回页面中的字符串就是“show.php”文件内容。

从返回的“show.php”文件中可以看到如下内容:“require_once('./../../include/config.inc.php'); //包含“配置文件””;这样我们从该处就可以知道配置文件的物理路径为“d:\localhost\virtualhost\include\go_dof_cn\config.inc.php”。

第三步:将路径转换为ASCII码后,我们再提交“ and 1=2 union select 1,2,3,4,5,6,7,load_file(转化后的ASCII码)”,就可以看到配置文件“config.inc.php”中的内容(图5)。从配置文件中我们可以看到数据库的相关信息,包括连接数据库的用户名和密码,SQL注入就轻松得手了。

35-f10-5.jpg
图5

小提示:如果服务器开放了远程SQL连接的话,黑客就可以用SQL连接器连接上数据库,用得到的用户名和密码登录了,然后进一步使用insert 语句将一个PHP木马代码写入表中,再用into outfile语句导出到Web目录下,就可对服务器进行远程控制了。

PHP+MYSQL拒绝暴库

虽然可以通过上面的方法进行暴库,但是只要我们从以下两个方面做好安全防范,那么就可完全预防PHP+MYSQL的SQL注入入侵攻击。

1.服务器设置

服务器管理员应该在IIS中为每个网站设置好执行权限,一般情况下只开放“纯脚本”权限,通过网站后台管理中心上传文件存放的目录,执行权限也设置为“无”,这样黑客就无法上传木马,就算通过其他方式上传木马了,木马也没办法运行!

再者要设置数据库用户的权限配置,首先进入MYSQL提示符下,然后使用GRANT命令“ GRANT 权限 ON ?数据库? TO 用户名@'主机名' ?IDENTIFIED? BY ?'密码'”,笔者推荐大家使用图形界面的“MYSQL?CONTROL CENTER”。

2.代码设置

用编辑工具打开PHP的默认配置文件php.ini,php.ini,其中有一个设置“magic_quotes_gpc = Off”,默认为关闭状态,将它设置为打开状态“magic_quotes_gpc = On”,这对防止SQL注入有重大作用。

一般PHP在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含PHP脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是非常不安全的,所以在这里笔者建议设置“display_errors = Off”,意思是禁止错误提示。

攻防博弈

攻 黑客: Web网站入侵的技术很多,除了SQL注入外,还可以利用数据库漏洞、文件上传漏洞进行攻击,再者利用Cookie欺骗、跨站攻击等手法来攻下服务器。不过对于SQL注入的攻击手法来说,由于数据库类型以及运用程序的不同,所以其进行SQL注入的手段也不同,要达到100%的安全是不可能的。

防 编辑:不管Web网站入侵的手段有多少,对于个人网站、小型企事业网站以及一般的电子商务网站、大中型企事业网站和大中型商业网站来说,除了网站本身程序代码需要网站程序员进行安全设置及漏洞检查修复外,负责整台服务器的网管(安全工程师)也需要对服务器进行安全设置,在有条件的情况下,可以请专业的信息安全公司制定安全方案并购买安全产品来保障服务器中网站的安全。