Assembly Socket(Syscall)

Çokgen

Katılımcı Üye
4 Eyl 2023
412
196
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:
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:

İ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:

DeathWarrior01

Uzman üye
14 Ocak 2021
1,734
1,082
Evren
Devamını daha detaylı şekilde bekleriz.Bu konular ne yazık ki tr de pek paylaşılmiyor.İlerleyen zamanlarda kernel exploit geliştirme konuların olursa beni konuya etiketleyebilirsin.Meraklı bir şekilde okurum.Ellerine sağlık.
 

Çokgen

Katılımcı Üye
4 Eyl 2023
412
196
Devamını daha detaylı şekilde bekleriz.Bu konular ne yazık ki tr de pek paylaşılmiyor.İlerleyen zamanlarda kernel exploit geliştirme konuların olursa beni konuya etiketleyebilirsin.Meraklı bir şekilde okurum.Ellerine sağlık.
Çok teşekkür ederim bu tür konular açıyım diye kendimide geliştiriyorum gayet güzel oluyor. Tekrardan teşekkür ederim :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.