Autor |
Wiadomość |
WhoAmI
Admin
Dołączył: 13 Lip 2008
Posty: 68
Przeczytał: 0 tematów
Ostrzeżeń: 0/6 Skąd: Się biorą dzieci? Płeć:
|
|
[bugs] najczestsze bledy i troche o nich |
|
[czemu w security a nie w programowanie ? wkoncu security sie w znacznym stopniu opiera na szukaniu bledow/bugow w programach]
Topic ten sluzyl bedzie glownie do dyskusji oraz zrobienia "bazy" najczestszych bledow ktore popelniaja programisci, oraz metod ich wykozystania. Proponuje wrzucac w ten topic blad wraz z nazwa, przykladem, oraz krotkim opisem (np czym grozi popelnienie tego bledu). Bede sie staral te ktore nie wystapily jeszcze przeklejac do tego posta. Stworzy sie w ten sposob baza bugow, z ktorej poczatkujacy i nie tylko beda mogli pozniej kozystac (ofc w celu nauczenia sie jak ich nie robic i poprawienia stylu programowania ;ppppp)
oczywiscie nie chodzi tutaj tylko o bledy popelniane w C, ale o wszystkie ;>
Bug base
1. buffer overflow (przepelnienie bufora)
podal Gynvael Coldwind
kod z bledem:
| | int main(void)
{
char buffer[256];
gets(buffer); /* blad! */
return 0;
} |
Blad polega na zapisaniu do buffora "buffer" wiecej niz 256 bajtow danych, co spowoduje nadpisanie (w tym wypadku) stosu i umozliwi wykonanie nieporzadanego kodu pochodzacego z zewnatrz. Zamiast gets powinno sie uzywac fgets(buffer, 256, stdin);. Bled rowniez moze wystapic przy niepoprawnym uzyciu funkcji sprintf, strcpy, strcat (powinno sie uzywac snprintf, strncpy, strncat)
Post został pochwalony 0 razy
|
|
Czw 5:51, 17 Lip 2008 |
|
|
|
|
Papryk
Dołączył: 13 Lip 2008
Posty: 4
Przeczytał: 0 tematów
Ostrzeżeń: 0/6
Płeć:
|
|
|
|
Ciągi formatujące są dosyć częstym błędem popełnianym przez programistów. Szczególnie polega on na lenistwie i jak najszybszym napisaniu programu, czego potem skutkami są bugi, jednym z nich są właśnie ciągi formatujące. Błąd który tu opiszę polega na złym zastosowaniu funkcji "printf" w języku C. Jak wiele z was pewnie wie (albo i nie wie Razz ), funkcję printf stosujemy do wyświetleniu jakiegoś ciągu (string) z podanym parametrem np. znaków, dziesiętny, szestnastkowy itd. Każdemu takiemu ciągu odpowiada parametr i są to np.
%s - dla ciągu znaków
%d - dla ciągu dziesiętnego
%x - dla szesnastkowych
No dobra, ale to chyba wie każdy kto choć trochę zna język C (a mało jest takich co nie zna Razz ), więc teraz czas na to jak taki ciąg nadużyć. Wielu programistów może z przemęczenia, albo z lenistwa popełnia katastrofalny błąd i zamiast pisać:
| | printf("%s", kerth) |
pisze:
| | printf(kerth) |
Na pierwszy rzut oka nie widać żadnych większych strat z takiego zapisy, bo gdy np. char kerth="hello world", wtedy po kompilacji program bez żadnych problemów wyświetly "hello world", ale co się stanie gdy pod zmienną kerth podstawimy, jakiś parametr np. %x, czyli teraz kerth wygląda np. tak: char kerth="world%x" i efekty są takie:
| | worldbffff2a1 |
natomiast przy poprawnym sposobie wygląda tak:
| | world%x |
Analizując pierwszy przykład program nie ma określonej zmiennej na której ma wykonać parametr "%x", dlatego bierze pierwsze co leży na stosie i pokazuje nam to w postaci szesnastkowej (bo do tego służy ten parametr). Tym samym sposobem teraz możemy podejrzeć cały stos, ale to nie o to nam chodzi. Głównym daniem dla intruza jest jednak parametr %n, który odwrotnie do parametru %s dzięki któremu możemy odczytawać z pamięci, to ten posłuży nam do zapisywania. No i właśnie dzięki temu możemy dowolny adres, nadpisać swoim, który w czasie wykonywania programu wykona wszystko czego zapragniemy Wesoly . Oczywiście wymaga to wiele pracy i trudu z nadpisaniem odpowiedniego adresu (np. zmiennej środowiskowej z shellcodem Razz ), no ale to ma być tylko bug base, a nie FAQ jak pisać exploity. Chyba jasne jest, że aby uniknąć tego bugu wystarczy dokładnie określać parametry, a nie iśc na łatwiznę.
Post został pochwalony 0 razy
|
|
Czw 9:25, 17 Lip 2008 |
|
|
Pastinho37
Dołączył: 18 Mar 2014
Posty: 4
Przeczytał: 0 tematów
Ostrzeżeń: 0/6 Skąd: Dobiegniew
|
|
|
|
o dzieki!
Post został pochwalony 0 razy
|
|
Wto 22:29, 18 Mar 2014 |
|
|
Elosator_59
Dołączył: 25 Mar 2014
Posty: 5
Przeczytał: 0 tematów
Ostrzeżeń: 0/6 Skąd: Słomniki
|
|
|
|
Post został pochwalony 0 razy
|
|
Wto 23:21, 25 Mar 2014 |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
|
|