XV Podstawowych Skrótów w Windows 10

1. Ctrl + A: Ctrl + A, podświetla lub zaznacza wszystko, co masz w środowisku, w którym pracujesz. Jeśli myślisz sobie: "Wow, zawartość tego dokumentu jest obszerna i nie ma czasu, aby ją wybrać, a poza tym wywrze presję na moim komputerze?" Używanie myszy do tego jest przestarzałą metodą obsługi zadania, takiego jak wybieranie wszystkich, Ctrl + A zajmie się tym w zaledwie kilka sekund.

2. Ctrl + C: Ctrl + C kopiuje dowolny podświetlony lub wybrany element w środowisku pracy. Oszczędza czas i stres, który zostałby użyty do kliknięcia prawym przyciskiem myszy i ponownego kliknięcia tylko w celu skopiowania. Użyj Ctrl + C.

3. Ctrl + N: Ctrl + N otwiera nowe okno lub plik. Zamiast klikać Plik, Nowy, pusty / szablon i kolejne kliknięcie, po prostu naciśnij Ctrl + N, a nowe okno lub plik pojawi się natychmiast.

4. Ctrl + O: Ctrl + O otwiera istniejący plik. Użyj Ctrl + O, gdy chcesz zlokalizować / otworzyć plik lub program.

5. Ctrl + P: Ctrl + P drukuje aktywny dokument. Zawsze używaj tego do zlokalizowania okna dialogowego drukarki i drukowania.

6. Ctrl + S: Ctrl + S zapisuje nowy dokument lub plik i zmiany wykonane przez użytkownika. Dotykasz teraz myszy? Proszę przestań! Nie używaj myszy. Po prostu naciśnij Ctrl + S, a wszystko zostanie zapisane.

7. Ctrl + V: Ctrl + V wkleja skopiowane elementy do aktywnego obszaru używanego programu. Użycie ctrl + V w takim przypadku Oszczędza czas i stres związany z kliknięciem prawym przyciskiem myszy i ponownym kliknięciem tylko po to, aby wkleić.

8. Ctrl + W: Ctrl + W służy do zamykania strony, na której pracujesz, gdy chcesz opuścić środowisko pracy. "Jest sposób, w jaki Peace robi to bez użycia myszy. O mój Boże, dlaczego się tego nie nauczyłem? " Nie martw się, mam odpowiedź: Peace naciska Ctrl + W, aby zamknąć aktywne okna.

9. Ctrl + X: Ctrl + X tnie elementy (sprawiając, że elementy znikają z ich pierwotnego miejsca). Różnica między wycinaniem a usuwaniem elementów polega na tym, że w wycinaniu wycinane elementy nie giną na stałe, ale przygotowuje się do wklejenia w innym miejscu wybranym przez użytkownika. Użyj Ctrl + X, gdy myślisz "To nie powinno być tutaj i nie mogę znieść stresu związanego z przepisywaniem lub przeprojektowywaniem tego we właściwym miejscu".

10. Ctrl + Y: Ctrl + Y ponawia cofniętą czynność. Ctrl + Z przywróciło to, czego nie potrzebujesz? Naciśnij Ctrl + Y, aby ponownie go usunąć.

11. Ctrl + Z: Ctrl + Z cofa akcje. Nie możesz znaleźć tego, co wpisałeś teraz lub wstawionego obrazu, nagle zniknął lub omyłkowo go usunąłeś? Naciśnij Ctrl + Z, aby go przywrócić.

12. Alt + F4: Alt + F4 zamyka aktywne okna lub elementy. Nie musisz poruszać myszą, aby zamknąć aktywne okno, po prostu naciśnij Alt + F4, jeśli skończysz lub nie chcesz, aby ktoś, kto przychodził, zobaczył, co robisz.

13. Ctrl + F6: Control plus F6 Nawigacja między otwartymi oknami, umożliwiając użytkownikowi zobaczenie, co dzieje się w aktywnych oknach. Pracujesz w programie Microsoft Word i chcesz się dowiedzieć, czy inne aktywne okno, w którym Twoja przeglądarka ładuje stronę, nadal się rozwija? Użyj Ctrl + F6.

14. F1: Wyświetla okno pomocy. Czy Twój komputer działa nieprawidłowo? Użyj F1, aby znaleźć pomoc, gdy nie wiesz, co dalej zrobić.

15. F12: Umożliwia użytkownikowi wprowadzanie zmian w już zapisanym dokumencie. F12 to skrót do użycia, gdy chcesz zmienić format, w którym zapisałeś istniejący dokument, wpisać hasło, zmienić jego nazwę, zmienić lokalizację pliku lub miejsce docelowe lub wprowadzić inną zmianę












Numer 12 (60) / 2021

Odwiedzin: 44018
Dzisiaj: 14
On-line: 1
Strona istnieje: 1836 dni
Ładowanie: 0.685 sek


[ 3867 ]











Abecadło Shellcodera (XL)



• Zanim zaczniesz …

• Stack Overflows

• Kod Powłoki

• Wprowadzenie do błędów w ciągach formatujących

• Wprowadzenie do przepełnień sterty

• Inne platformy - Windows, Solaris, OS/X i Cisco

• Kod powłoki systemu Windows


Jak działa sterta

Ważną kwestią, na którą należy zwrócić uwagę, jest to, że podczas gdy stos rośnie w kierunku adresu 0x00000000, sterta działa odwrotnie. Oznacza to, że dwa wywołania HeapAllocate utworzą pierwszy blok pod niższym adresem wirtualnym niż drugi. W konsekwencji wszelkie przelewanie się pierwszego bloku przeleje się do drugiego bloku. Każda sterta, czy to domyślna sterta procesu, czy sterta dynamiczna, zaczyna się strukturą, która zawiera między innymi tablicę 128 struktur LIST_ENTRY który śledzi wolne bloki - nazwiemy tę tablicę FreeLists. Każde LIST_ENTRY zawiera dwa wskaźniki (jak opisano w Winnt.h), a początek tej tablicy można znaleźć z przesunięciem 0x178 bajtów w strukturze sterty. Kiedy sterta jest tworzona po raz pierwszy, dwa wskaźniki, które wskazują na pierwszy blok pamięci dostępny do alokacji, są ustawiane w FreeLists[0]. Pod adresem, na który wskazują te wskaźniki - początek pierwszego dostępnego bloku - są dwa wskaźniki, które wskazują FreeLists[0]. Zakładając więc, że tworzymy stertę z adresem bazowym 0x00350000, a pierwszy dostępny blok ma adres 0x00350688, to:

•  pod adresem 0x00350178 (FreeList[0].Flink) jest wskaźnikiem o wartości 0x00350688 (pierwszy wolny blok).
•  pod adresem 0x0035017C (FreeList[0].Blink) to wskaźnik o wartości 0x00350688 (pierwszy wolny blok).
•  pod adresem 0x00350688 (pierwszy wolny blok) jest wskaźnikiem o wartości 0x00350178 (FreeList[0]).
•  pod adresem 0x0035068C (pierwszy wolny blok + 4) jest wskaźnikiem z wartością 0x00350178 (FreeList[0]).

W przypadku alokacji (na przykład przez wywołanie RtlAllocateHeap z prośbą o 260 bajtów pamięci) wskaźniki FreeList[0].Flink i FreeList[0].Blink są aktualizowane, aby wskazywały na następny wolny blok, który zostanie przydzielony . Co więcej, dwa wskaźniki, które wskazują z powrotem do tablicy FreeList, są przenoszone na koniec nowo przydzielonego bloku. Przy każdym alokacji lub zwolnieniu te wskaźniki są aktualizowane iw ten sposób przydzielone bloki są śledzone na podwójnie połączonej liście. Kiedy bufor oparty na stercie jest przepełniony do danych sterujących sterty, aktualizacja tych wskaźników umożliwia nadpisanie dowolnego słowa DW; atakujący ma możliwość zmodyfikowania danych sterujących programem, takich jak wskaźniki funkcji, a tym samym przejęcia kontroli nad ścieżką wykonania procesu. Atakujący nadpisze dane kontrolne programu, które najprawdopodobniej pozwolą mu przejąć kontrolę nad aplikacją. Na przykład, jeśli atakujący nadpisze wskaźnik funkcji wskaźnikiem do swojego bufora, ale przed uzyskaniem dostępu do wskaźnika funkcji, nastąpi naruszenie zasad dostępu i prawdopodobnie atakujący nie przejmie kontroli. W takim przypadku lepiej byłoby, gdyby atakujący nadpisał wskaźnik do procedury obsługi wyjątków - w ten sposób, gdy nastąpi naruszenie zasad dostępu, zamiast tego wykonywany jest kod atakującego. Zanim przejdziemy do szczegółów wykorzystywania przepełnień opartych na stercie w celu uruchomienia dowolnego kodu, przyjrzyjmy się dokładniej, na czym polega problem.Poniższy kod jest podatny na przepełnienie sterty:

#include < stdio.h >
#include < windows.h >
DWORD MyExceptionHandler(void);
int foo(char *buf);
int main(int argc, char *argv[])
{
HMODULE l;
l = LoadLibrary("msvcrt.dll");
l = LoadLibrary("netapi32.dll");
printf("\n\nHeapoverflow program.\n");
if(argc != 2)
return printf("ARGS!");
foo(argv[1]);
return 0;
}
DWORD MyExceptionHandler(void)
{
printf("In exception handler....");
ExitProcess(1);
return 0;
}
int foo(char *buf)
{
HLOCAL h1 = 0, h2 = 0;
HANDLE hp;
__try{
hp = HeapCreate(0,0x1000,0x10000);
if(!hp)
return printf("Failed to create heap.\n");
h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,260);
printf("HEAP: %.8X %.8X\n",h1,&h1);
// Heap Overflow occurs here:
strcpy(h1,buf);
// This second call to HeapAlloc() is when we gain control
h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,260);
printf("hello");
}
__except(MyExceptionHandler())
{
printf("oops…");
}
return 0;
}

Luką w tym kodzie jest wywołanie strcpy() w funkcji foo(). Jeśli ciąg buf jest dłuższy niż 260 bajtów (rozmiar bufora docelowego), struktura kontroli sterty jest zastępowana. Ta struktura kontrolna ma dwa wskaźniki, które wskazują na tablicę FreeLists, w której możemy znaleźć parę wskaźników do następnego wolnego bloku. Podczas zwalniania lub alokowania menedżer sterty przełącza je, przesuwając jeden wskaźnik na drugi, a następnie drugi wskaźnik do pierwszego. Przekazując nadmiernie długi argument (na przykład 300 bajtów) do tego programu (który jest następnie przekazywany do funkcji foo, w której występuje przepełnienie), dostęp do kodu narusza przy drugim wywołaniu funkcji HeapAlloc():

77F6256F 89 01 mov dword ptr [ecx],eax
77F62571 89 48 04 mov dword ptr [eax+4],ecx

Chociaż uruchamiamy to za pomocą drugiego wywołania HeapAlloc, wywołanie HeapFree lub HeapRealloc wywoła ten sam efekt. Jeśli spojrzymy na rejestry ECX i EAX, zobaczymy, że oba zawierają dane z łańcucha, który przekazaliśmy jako argument do programu. Nadpisaliśmy wskaźniki w strukturze zarządzania stertą, więc gdy zostanie ona zaktualizowana, aby odzwierciedlić zmianę w stercie po wykonaniu drugiego wywołania HeapAlloc(), kończymy całkowicie posiadanie obu rejestrów. Teraz spójrz, co robi kod:

mov dword ptr [ecx],eax

Oznacza to, że wartość w EAX należy przenieść pod adres wskazany przez ECX. W związku z tym możemy nadpisać pełne 32 bity w dowolnym miejscu w wirtualnej przestrzeni adresowej procesu (oznaczonej jako zapisywalna) dowolną 32-bitową wartością, jaką chcemy. Możemy to wykorzystać, nadpisując dane sterujące programu. Jest jednak zastrzeżenie. Spójrz na następny wiersz kodu:

mov dword ptr [eax+4],ecx

Odwróciliśmy teraz instrukcje. Jakakolwiek wartość znajduje się w rejestrze EAX (używanym do nadpisania wartości wskazywanej przez ECX w pierwszym wierszu) musi również wskazywać na pamięć zapisywalną, ponieważ cokolwiek jest w ECX, jest teraz zapisywane pod adresem wskazywanym przez EAX+4. Jeśli EAX nie wskazuje na pamięć zapisywalną, nastąpi naruszenie zasad dostępu. W rzeczywistości nie jest to zła rzecz i nadaje się do jednego z bardziej powszechnych sposobów wykorzystywania przepełnień sterty. Atakujący często zastępują wskaźnik do procedury obsługi w strukturze rejestracji wyjątków na stosie lub w filtrze nieobsługiwanych wyjątków, ze wskaźnikiem do bloku kodu, który przeniesie ich z powrotem do kodu, jeśli zostanie zgłoszony wyjątek. I oto, jeśli EAX wskazuje na pamięć niezapisywalną, otrzymujemy wyjątek i wykonuje się dowolny kod. Nawet jeśli EAX jest zapisywalny, ponieważ EAX nie równa się ECX, niskopoziomowe funkcje sterty z dużym prawdopodobieństwem przejdą jakąś ścieżkę błędu i mimo to zgłoszą wyjątek. Tak więc nadpisanie wskaźnika do obsługi wyjątków jest prawdopodobnie najłatwiejszym sposobem wykorzystania przepełnień opartych na stercie.