Merhaba arkadaşlar bugün Linux x64de kullanılan Socket sistem çağrılarına bakıcaz.
Bundan sonra Linuxda kendi reverse_tcp kodunuzu tasarlıyabiliceksiniz.
Önceki Konum:
Bu konuyu okuyunca kendinizin yazabiliceği kod(konum):
Eğer bu konuyu Assembly dersi okumadan geldiyseniz bir göz atın.
Socket Syscall Linux x64
number = N : Sistem çağrısının numarası
abi: Kullanılan ABI türü (common, 64, x32 gibi)
name = NM: Sistem çağrısının adı
entry point = EP: İlgili sistem çağrısının girdi noktası (entry point)
"execve" (execute ve veri çevirme anlamına gelir) sistem çağrısı, UNIX benzeri işletim sistemlerinde yeni bir programı çalıştırmak için kullanılan bir sistem çağrısıdır.
N ABI NM EP
0 common read sys_read
1 common write sys_write
2 common open sys_open
3 common close sys_close
4 common stat sys_newstat
5 common fstat sys_newfstat
6 common lstat sys_newlstat
7 common poll sys_poll
8 common lseek sys_lseek
9 common mmap sys_mmap
10 common mprotect sys_mprotect
11 common munmap sys_munmap
12 common brk sys_brk
13 64 rt_sigaction sys_rt_sigaction
14 common rt_sigprocmask sys_rt_sigprocmask
15 64 rt_sigreturn sys_rt_sigreturn
16 64 ioctl sys_ioctl
17 common pread64 sys_pread64
18 common pwrite64 sys_pwrite64
19 64 readv sys_readv
20 64 writev sys_writev
21 common access sys_access
22 common pipe sys_pipe
23 common select sys_select
24 common sched_yield sys_sched_yield
25 common mremap sys_mremap
26 common msync sys_msync
27 common mincore sys_mincore
28 common madvise sys_madvise
29 common shmget sys_shmget
30 common shmat sys_shmat
31 common shmctl sys_shmctl
32 common dup sys_dup
33 common dup2 sys_dup2
34 common pause sys_pause
35 common nanosleep sys_nanosleep
36 common getitimer sys_getitimer
37 common alarm sys_alarm
38 common setitimer sys_setitimer
39 common getpid sys_getpid
40 common sendfile sys_sendfile64
41 common socket sys_socket
42 common connect sys_connect
43 common accept sys_accept
44 common sendto sys_sendto
45 64 recvfrom sys_recvfrom
46 64 sendmsg sys_sendmsg
47 64 recvmsg sys_recvmsg
48 common shutdown sys_shutdown
49 common bind sys_bind
50 common listen sys_listen
Bu listeyi okuduktan sonra reverse tcp konuma gidebilirsiniz ama önemli syscall numaralarını ve adlarını bir ere kaydetmeyi unutmayın!
Basit bir kod yazcıcağım. Socket açma ve bağlanma.
Kod:
Birde kod bitiminde kullanılan asm kodu:
Şimdi yapıcağımız socket çağrıları yani demek istediğim; mov rax, 41 ile rax registerına 41 değerini verdik ve sonrasında sistem çağrısını yaptık. Sonra sistem çağrıların içindeki protokoller önemlidir. İPv4 protokolü ile bağlantı yapıcaksak 0 olmalı register, tcp bağlantısı yapılacaksa 1 olmalı register. Sonrasında protokol seçimi için yine ama farklı bir registera 0 veriyoruz ip protokolünü seçiyor.
Evet konum bu kadardı aklımda bir kaç konu daha var. Kernal, shell code ve exploit gibi.
Kısa bir güncelleme ekliyim: buradali rax, rdi, rsi, rdx 64 bit registerlarıdır ama bu kodda eax, cx, ebx gibi registerlarda kullanabiliriz. Ama unutmamamız gerekn birşey var eax, ebx, ecx gibi registerlar genelde 32 bitde kullanılıyor. Registerlarara dikkat edelim.
Bu github sayfasına bakarak syscallara daha detaylı bakabilirsiniz:
İyi oldu böyle konu açtığım, not defteri niyetine kullanıyorum
Konumu okuduğunuz için teşekkür ederim.
Bundan sonra Linuxda kendi reverse_tcp kodunuzu tasarlıyabiliceksiniz.
Önceki Konum:
Temel Assembly Dersi
Merhaba arkadaşlar, bugün sizlere temel assembly öğreticeğim. Öğrenirken tutmmuş olduğum notları göstericeğim. Herhangi bir mühendislik eğitimi almadığımı belirtiyim. İnternetten öğrendiğim kadarıyla sizlerede yardımcı olmayı umud edeiyorum. Umarım işinize yarar. Memory Segmentation İşletim...
www.turkhackteam.org
Bu konuyu okuyunca kendinizin yazabiliceği kod(konum):
Reverse Tcp kodu
Merhaba arkadaşlar Bugün kodladığım basit bir assembly kodunu sizler ile paylaşıcağım. Bu kod Linux işletim sistemi içindir. section .data host db "10.0.0.1" port dw 4444 section .text global _start _start: xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx mov al, 2...
www.turkhackteam.org
Eğer bu konuyu Assembly dersi okumadan geldiyseniz bir göz atın.
Socket Syscall Linux x64
number = N : Sistem çağrısının numarası
abi: Kullanılan ABI türü (common, 64, x32 gibi)
name = NM: Sistem çağrısının adı
entry point = EP: İlgili sistem çağrısının girdi noktası (entry point)
"execve" (execute ve veri çevirme anlamına gelir) sistem çağrısı, UNIX benzeri işletim sistemlerinde yeni bir programı çalıştırmak için kullanılan bir sistem çağrısıdır.
N ABI NM EP
0 common read sys_read
1 common write sys_write
2 common open sys_open
3 common close sys_close
4 common stat sys_newstat
5 common fstat sys_newfstat
6 common lstat sys_newlstat
7 common poll sys_poll
8 common lseek sys_lseek
9 common mmap sys_mmap
10 common mprotect sys_mprotect
11 common munmap sys_munmap
12 common brk sys_brk
13 64 rt_sigaction sys_rt_sigaction
14 common rt_sigprocmask sys_rt_sigprocmask
15 64 rt_sigreturn sys_rt_sigreturn
16 64 ioctl sys_ioctl
17 common pread64 sys_pread64
18 common pwrite64 sys_pwrite64
19 64 readv sys_readv
20 64 writev sys_writev
21 common access sys_access
22 common pipe sys_pipe
23 common select sys_select
24 common sched_yield sys_sched_yield
25 common mremap sys_mremap
26 common msync sys_msync
27 common mincore sys_mincore
28 common madvise sys_madvise
29 common shmget sys_shmget
30 common shmat sys_shmat
31 common shmctl sys_shmctl
32 common dup sys_dup
33 common dup2 sys_dup2
34 common pause sys_pause
35 common nanosleep sys_nanosleep
36 common getitimer sys_getitimer
37 common alarm sys_alarm
38 common setitimer sys_setitimer
39 common getpid sys_getpid
40 common sendfile sys_sendfile64
41 common socket sys_socket
42 common connect sys_connect
43 common accept sys_accept
44 common sendto sys_sendto
45 64 recvfrom sys_recvfrom
46 64 sendmsg sys_sendmsg
47 64 recvmsg sys_recvmsg
48 common shutdown sys_shutdown
49 common bind sys_bind
50 common listen sys_listen
Bu listeyi okuduktan sonra reverse tcp konuma gidebilirsiniz ama önemli syscall numaralarını ve adlarını bir ere kaydetmeyi unutmayın!
Basit bir kod yazcıcağım. Socket açma ve bağlanma.
Kod:
Kod:
section .data
host db "127.0.0.1" ; Bağlanılacak ip(local ip)
port db "80" ; Port
section .text
global _start; kodun başlaması için
_start:
; Socket için sistem çağrısı numarası: 41 (sys_socket)
mov rax, 41 ; sys_socket'içağırdık. Bundan sonra sistem çağrısı bitti.
;Socketin kendi kodları ile ilerliyiceğiz.
xor rdi, rdi ; IPv4(bağlantı türü)
mov rsi, 1 ; TCP(bağlanılıcak tip)
mov rdx, 0 ;ip protocol seçilir. Socket oluşturulur.
syscall ; Socket sistem çağrısını yap
; Soketin dosya tanımlayıcısını rax'ten alıyoruz.'
mov rdi, rax
; Bağlantı için sistem çağrısı numarası: 42 (sys_connect)
mov rax, 42 ; sys_connect'ide çağırdık.
mov rsi, host ; sockaddr_in struct'ının adresi
mov rdx, port ; Port numarası
syscall ; Connect çağrıldı. Normalde kodun bitiminde kodun bittiğine dair kod yazıyoruz ama sadece socketi anlatıyorum.
Birde kod bitiminde kullanılan asm kodu:
Kod:
;
xor rax, rax; sistem çağrı numarası 0. Xor registerı sıfırlamak için kullanılır ve değer 0 olur burda.
inc rax; tanımlanmamış değişkene 1 ekliyoruz yani 1 oluyor.Rax = register. İnc 1 arttırma görevindedir.
syscall; sistem çağrıları yapıldı ve kod sonlandı.
Şimdi yapıcağımız socket çağrıları yani demek istediğim; mov rax, 41 ile rax registerına 41 değerini verdik ve sonrasında sistem çağrısını yaptık. Sonra sistem çağrıların içindeki protokoller önemlidir. İPv4 protokolü ile bağlantı yapıcaksak 0 olmalı register, tcp bağlantısı yapılacaksa 1 olmalı register. Sonrasında protokol seçimi için yine ama farklı bir registera 0 veriyoruz ip protokolünü seçiyor.
Evet konum bu kadardı aklımda bir kaç konu daha var. Kernal, shell code ve exploit gibi.
Kısa bir güncelleme ekliyim: buradali rax, rdi, rsi, rdx 64 bit registerlarıdır ama bu kodda eax, cx, ebx gibi registerlarda kullanabiliriz. Ama unutmamamız gerekn birşey var eax, ebx, ecx gibi registerlar genelde 32 bitde kullanılıyor. Registerlarara dikkat edelim.
Bu github sayfasına bakarak syscallara daha detaylı bakabilirsiniz:
linux/arch/x86/entry/syscalls/syscall_64.tbl at master · torvalds/linux
Linux kernel source tree. Contribute to torvalds/linux development by creating an account on GitHub.
github.com
İyi oldu böyle konu açtığım, not defteri niyetine kullanıyorum
Konumu okuduğunuz için teşekkür ederim.
Son düzenleme: