Bonjour,
J'ai actuellement un shellcode whoami. Ma problématique est d'executer ce shellcode selon l'OS sur laquelle il se lance.

J'ai donc actuellement un script avec une confition if elif qui vérifie si je suis sur linux ou windows.

Pour que vous compreniez mieux la suite, voici mon script python :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import ctypes
import platform
 
print(platform.platform())
 
if ( "Linux" in platform.platform() or "linux" in platform.platform()):
        print("Tu es sur linux")
 
        shellcode_data = ( "\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x73\x68\x00\x53"
"\x48\x89\xe7\x68\x2d\x63\x00\x00\x48\x89\xe6\x52\xe8\x10\x00"
"\x00\x00\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x77\x68\x6f\x61"
"\x6d\x69\x00\x56\x57\x48\x89\xe6\x0f\x05");
        shellcode = ctypes.create_string_buffer(shellcode_data)
        function = ctypes.cast(shellcode, ctypes.CFUNCTYPE(None))
        addr = ctypes.cast(function, ctypes.c_void_p).value
        libc = ctypes.CDLL('libc.so.6')
        pagesize = libc.getpagesize()
        addr_page = (addr // pagesize) * pagesize
        for page_start in range(addr_page, addr + len(shellcode_data), pagesize):
                assert libc.mprotect(page_start, pagesize, 0x4) == 0
        function()
 
elif ( "Windows" in platform.platform() or "windows" in platform.platform()):
        print("Tu es sur windows")
 
        ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),
        ctypes.c_int(len(shellcode)),
        ctypes.c_int(0x3000),
        ctypes.c_int(0x40))
 
        buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
 
        ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr),
        buf,
        ctypes.c_int(len(shellcode)))
 
        ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),
        ctypes.c_int(0),
        ctypes.c_int(ptr),
        ctypes.c_int(0),
        ctypes.c_int(0),
        ctypes.pointer(ctypes.c_int(0)))
 
        ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),ctypes.c_int(-1))
Mon problème est le suivant :

J'aimerais plutot que d'avoir à remplacer à chaque fois le contenu de la variable shellcode_data lire un fichier txt contenant le shellcode afin de pouvoir l'executer et rendre mon script utilisable par plusieurs shellcode en modifiant juste le chemin du txt

Supposons que mon fichier txt s'appelle shellcode.txt, comment puis-je faire cela ?

Merci d'avance