- A+
杀戮 (有事请 at 大号园长) | 2014-11-26 12:19
你可能已经听说,(我觉得没有) AT&T 有一个无线电视机顶盒会提供U-verse上网业务和视频服务,现在我的电视需要连上互联网了,我感觉好不安,OK,前文的扯淡没了。
一开始我进行了一些端口扫描,发现了一个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/
$("img").load(function(){ if($(this).attr("width")>640) $(this).attr("width",640); });