翻译:AT&T U-Verse VAP2500电视盒子漏洞挖掘 (WOO

  • A+
所属分类:WooYun-Zone

杀戮 (有事请 at 大号园长) 翻译:AT&T U-Verse VAP2500电视盒子漏洞挖掘  (WOO | 2014-11-26 12:19

你可能已经听说,(我觉得没有) AT&T 有一个无线电视机顶盒会提供U-verse上网业务和视频服务,现在我的电视需要连上互联网了,我感觉好不安,OK,前文的扯淡没了。

翻译:AT&T U-Verse VAP2500电视盒子漏洞挖掘  (WOO

一开始我进行了一些端口扫描,发现了一个Web服务和SOAP服务,现在让我们先专注于Web端,我访问了一下Web端,显示出了上面那个登陆界面,看起来似乎很麻烦的样子,因为我们没有证书,所以接下来所有企图访问的页面都会跳会到这,除非你成功的用密码登陆了。 (不是我废话多……...里面就这么写的)

接下来我进行了大量的检查,然后发现了第一个漏洞,Web目录的根目录下面有一个叫admin.conf的纯文本文件,里面有密码一样的东西。(…………..)

ATTadmin,1b12957d189cde9cda68e1587c6cfbdd,0
super,71a5ea180dcd392aabe93f11237ba8a9,0

接下来我们看看漏洞是怎么出现的。

<?php
if (isset($_POST['user']) && isset($_POST['pwd']))
{
  $user=$_POST['user'];
  $pwd=md5(trim($_POST['pwd']));
  $flag=0;
  $file_path = trim(shell_exec("call_qcsapi get_file_path security"));
  $file_path = $file_path."admin.conf";
  $fp = fopen($file_path, 'r');
  while(!feof($fp))
  {      
    $buffer = stream_get_line($fp, 100, "\n");
    $arraylist=split(',',$buffer);
    if($arraylist[0]==$user && $arraylist[1]==$pwd)
    {
      $flag=1;
      break;
    }
  }
  fclose($fp);
  if ($flag==1)
  {
    echo "<script language='javascript'>createCookie(\"p\", \"".md5($user)."\", 2);</script>";
    echo "<script language='javascript'>location.href='status_device.php'</script>";
  }
  else
    {echo "<script language='javascript'>alert(\"Login Failed\")</script>";}
}
?>

就是会根据提交的用户名密码 和 admin.conf匹配,匹配后,会设置cookie值然后进行内部重定向,我的黑客直觉告诉我他代码写的这么难看肯定有漏洞。

事实证明了我直觉,他把用户名的md5作为cookie值 P,事实上密码压根就没啥用,而且用户还改不了用户名,用户名是被写死在代码里的。 (…………....就是这么一回事吧)

if (isset($_COOKIE['p']))
{  
  // Start Moto Customized Passwd
  if($_COOKIE['p']==md5("ATTadmin"))
  {$priority=0;}
  else
  if($_COOKIE['p']==md5("super"))
  {$priority=0;}
  // End Moto Customized Passwd
  else
  {
    echo "<script language='javascript'>location.href='login.php'</script>";
    return;
  }
}
else
{
  echo "<script language='javascript'>location.href='login.php'</script>";
  return;
}

接下来我的直觉引领我走向第三个漏洞,他有一个叫tools_command.php的页面,被设计来执行命令的。有两个POST参数, cmb_header,txt_command,你可以构造这样的参数 cmb_header=&txt_command=whoami ,然后命令会被传递给shell_exec() ,然后系统会兴高采烈的告诉你它是个root。

作者提供了个ruby的POC http://goto.fail/projects/vap2500_root.rb

原文: http://goto.fail/blog/2014/11/25/at-and-t-u-verse-vap2500-the-passwords-they-do-nothing/

分享到: