<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
To retrieve data from a database, you can use the following SQL injection techniques:
#### 1. UNION-based SQL Injection
This technique involves injecting a UNION statement into the original SQL query to combine the results of two separate queries. By manipulating the UNION statement, you can retrieve data from other tables in the database.
Example:
```
SELECT column1, column2 FROM table1 UNION SELECT column3, column4 FROM table2
```
#### 2. Error-based SQL Injection
In error-based SQL injection, you intentionally trigger an error in the SQL query to extract information from the database error message. By injecting malicious input, you can force the database to reveal sensitive data.
Example:
```
SELECT column1 FROM table1 WHERE id='1' AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x717a7a6a71,(SELECT (ELT(1=1,1))),0x716a7a7871,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)
```
#### 3. Blind SQL Injection
Blind SQL injection is a technique used when the application does not display database errors. It involves injecting queries that result in a true or false response from the application. By manipulating the injected queries, you can extract data from the database.
Example:
```
SELECT column1 FROM table1 WHERE id='1' AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x717a7a6a71,(SELECT (ELT(1=1,1))),0x716a7a7871,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)
```
#### 4. Time-based Blind SQL Injection
Time-based blind SQL injection is similar to blind SQL injection, but it relies on the application's response time to determine if the injected query is true or false. By injecting time-delayed queries, you can extract data from the database.
Example:
```
SELECT column1 FROM table1 WHERE id='1' AND IF(ASCII(SUBSTRING((SELECT column2 FROM table2 LIMIT 0,1),1,1))=97, SLEEP(5), 0)
```
#### 5. Boolean-based Blind SQL Injection
Boolean-based blind SQL injection is another variation of blind SQL injection. It involves injecting queries that result in a true or false response from the application. By manipulating the injected queries, you can extract data from the database.
Example:
```
SELECT column1 FROM table1 WHERE id='1' AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x717a7a6a71,(SELECT (ELT(1=1,1))),0x716a7a7871,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)
```
#### 6. Out-of-band SQL Injection
Out-of-band SQL injection is a technique used when the application is unable to display the results of the injected query. Instead, the attacker uses a different channel to retrieve the data, such as DNS requests or HTTP requests to an external server.
Example:
```
SELECT column1 FROM table1 WHERE id='1' AND (SELECT LOAD_FILE(CONCAT('\\\\',(SELECT column2 FROM table2 LIMIT 0,1), '\\\\filename.txt')))
```
#### 7. Stored Procedure SQL Injection
Stored procedure SQL injection occurs when an attacker injects malicious input into a stored procedure call. By manipulating the input, an attacker can execute arbitrary SQL code and retrieve data from the database.
EXECUTE dbo.usp_GetData @param1 = '1'; DROP TABLE table1; --'
```
#### 8. Second-Order SQL Injection
Second-order SQL injection occurs when user input is stored in the database and later used in a vulnerable query. By injecting malicious input during the initial input, an attacker can execute arbitrary SQL code when the stored input is used in a query.
Example:
```
INSERT INTO table1 (column1) VALUES ('1'); SELECT * FROM table2 WHERE id = (SELECT MAX(id) FROM table1);
```
#### 9. Time Delay SQL Injection
Time delay SQL injection involves injecting time-delayed queries to extract data from the database. By manipulating the injected queries, an attacker can cause the application to delay its response, revealing sensitive information.
Example:
```
SELECT column1 FROM table1 WHERE id='1' AND IF(ASCII(SUBSTRING((SELECT column2 FROM table2 LIMIT 0,1),1,1))=97, SLEEP(5), 0)
```
Remember to always use these techniques responsibly and with proper authorization.
SQL Injection (wstrzykiwanie kodu SQL) jest jednym z najczęstszych ataków na aplikacje internetowe. Polega na wstrzyknięciu złośliwego kodu SQL do zapytania, które jest wykonywane przez aplikację. Atakujący może wykorzystać tę lukę w celu wykonania nieautoryzowanych operacji na bazie danych, odczytania poufnych informacji lub nawet przejęcia kontroli nad aplikacją.
### Wykrywanie SQL Injection za pomocą SQLMap
SQLMap to potężne narzędzie do automatycznego wykrywania i eksploatacji podatności SQL Injection. Może być używane do testowania bezpieczeństwa aplikacji internetowych i znajdowania luk w zabezpieczeniach.
Aby wykryć podatność na SQL Injection w zapytaniu GET, możemy użyć SQLMap w następujący sposób:
W powyższym przykładzie, `http://example.com/page.php?id=1` to adres URL strony, na której chcemy przetestować podatność. Parametr `--dbs` informuje SQLMap, że chcemy wyświetlić dostępne bazy danych.
Po uruchomieniu powyższej komendy, SQLMap automatycznie przetestuje podatność na SQL Injection w zapytaniu GET i wyświetli wyniki.
### Eksploatacja SQL Injection za pomocą SQLMap
Jeśli SQLMap wykryje podatność na SQL Injection, możemy użyć go do eksploatacji tej luki. Na przykład, jeśli chcemy wyświetlić zawartość tabeli `users`, możemy użyć następującej komendy:
W powyższym przykładzie, `database_name` to nazwa bazy danych, a `users` to nazwa tabeli, której zawartość chcemy wyświetlić. Parametr `--dump` informuje SQLMap, że chcemy wyświetlić dane z tabeli.
SQLMap automatycznie wykona zapytanie SQL i wyświetli wyniki, w tym wrażliwe informacje, takie jak hasła użytkowników.
### Podsumowanie
Wstrzykiwanie zapytań GET jest powszechną techniką ataku SQL Injection. SQLMap jest potężnym narzędziem, które może pomóc w wykrywaniu i eksploatacji podatności SQL Injection w zapytaniach GET. Pamiętaj, że wykorzystywanie tych technik do celów nieautoryzowanych jest nielegalne i może prowadzić do konsekwencji prawnych.
Wstrzykiwanie żądania POST jest podobne do wstrzykiwania żądania GET, ale różni się sposobem przekazywania danych. W przypadku żądania POST dane są przesyłane w ciele żądania, a nie w parametrach URL.
### Wykrywanie wstrzykiwania żądania POST
Aby wykryć podatność na wstrzykiwanie żądania POST, możemy użyć narzędzia SQLMap. Narzędzie to automatyzuje proces wykrywania i eksploatacji podatności na wstrzykiwanie SQL.
### Użycie SQLMap do wstrzykiwania żądania POST
Aby użyć SQLMap do wstrzykiwania żądania POST, musimy dostarczyć narzędziu odpowiednie dane wejściowe. Możemy to zrobić na kilka sposobów:
1. Podając bezpośrednio dane wejściowe w linii poleceń.
2. Zapisując dane wejściowe do pliku i przekazując go jako argument.
3. Korzystając z interaktywnego trybu SQLMap.
Po dostarczeniu danych wejściowych, SQLMap automatycznie przetestuje podatność na wstrzykiwanie SQL i spróbuje eksploatować znalezione podatności.
### Przykład użycia SQLMap do wstrzykiwania żądania POST
Poniżej przedstawiony jest przykład użycia SQLMap do wstrzykiwania żądania POST:
```bash
sqlmap -u "http://example.com/login" --data "username=admin&password=test" --method POST
```
W powyższym przykładzie SQLMap wysyła żądanie POST na adres URL "http://example.com/login" z danymi "username=admin&password=test". Narzędzie automatycznie wykrywa podatność na wstrzykiwanie SQL i próbuje ją eksploatować.
Wstrzykiwanie żądania POST jest podobne do wstrzykiwania żądania GET, ale różni się sposobem przekazywania danych. Narzędzie SQLMap może być użyte do wykrywania i eksploatacji podatności na wstrzykiwanie SQL w żądaniach POST.
## Wstrzykiwanie w nagłówkach i innych metodach HTTP
### Wstrzykiwanie w nagłówkach
W przypadku niektórych aplikacji internetowych, wstrzykiwanie może być możliwe poprzez manipulację nagłówkami HTTP. Wstrzykiwanie w nagłówkach może prowadzić do różnych ataków, takich jak ataki XSS (Cross-Site Scripting) lub ataki CSRF (Cross-Site Request Forgery).
#### Wstrzykiwanie w nagłówku User-Agent
Wstrzykiwanie w nagłówku User-Agent jest możliwe, gdy aplikacja internetowa wykonuje pewne operacje na podstawie wartości tego nagłówka. Aby przeprowadzić atak, należy zmodyfikować wartość nagłówka User-Agent, aby zawierała złośliwy kod. Następnie, gdy aplikacja internetowa przetwarza ten nagłówek, kod zostanie wykonany, co może prowadzić do różnych ataków.
#### Wstrzykiwanie w nagłówku Referer
Podobnie jak w przypadku nagłówka User-Agent, wstrzykiwanie w nagłówku Referer jest możliwe, gdy aplikacja internetowa wykonuje pewne operacje na podstawie wartości tego nagłówka. Atakujący może zmodyfikować wartość nagłówka Referer, aby zawierała złośliwy kod. Gdy aplikacja internetowa przetwarza ten nagłówek, kod zostanie wykonany, co może prowadzić do różnych ataków.
### Wstrzykiwanie w innych metodach HTTP
Oprócz nagłówków HTTP, wstrzykiwanie może być również możliwe w innych metodach HTTP, takich jak parametry URL, ciało żądania, metoda żądania, nagłówki żądania, nagłówki odpowiedzi itp. Wstrzykiwanie w tych miejscach może prowadzić do różnych ataków, takich jak ataki SQL Injection, ataki Command Injection itp.
W celu przeprowadzenia ataku wstrzykiwania w innych metodach HTTP, należy zidentyfikować odpowiednie miejsce do wstrzykiwania kodu i dostarczyć odpowiednie dane, które spowodują wykonanie złośliwego kodu przez aplikację internetową.
W przypadku ataku SQL Injection, atakujący może wstrzyknąć złośliwy kod SQL poprzez parametr URL. Aby to zrobić, atakujący musi zidentyfikować odpowiedni parametr URL, który jest podatny na wstrzykiwanie i dostarczyć odpowiednie dane, które spowodują wykonanie złośliwego kodu SQL przez aplikację internetową.
#### Przykład: Wstrzykiwanie w ciele żądania
W przypadku ataku Command Injection, atakujący może wstrzyknąć złośliwy kod systemowy poprzez ciało żądania HTTP. Aby to zrobić, atakujący musi zidentyfikować odpowiednie miejsce w ciele żądania, które jest podatne na wstrzykiwanie i dostarczyć odpowiednie dane, które spowodują wykonanie złośliwego kodu systemowego przez aplikację internetową.
### Podsumowanie
Wstrzykiwanie w nagłówkach i innych metodach HTTP może prowadzić do różnych ataków, takich jak ataki XSS, ataki CSRF, ataki SQL Injection, ataki Command Injection itp. Aby przeprowadzić atak, atakujący musi zidentyfikować odpowiednie miejsce do wstrzykiwania kodu i dostarczyć odpowiednie dane, które spowodują wykonanie złośliwego kodu przez aplikację internetową.
Wstrzykiwanie drugiego rzędu to zaawansowana technika ataku polegająca na wykorzystaniu podatności SQL Injection w celu wykonania złośliwego kodu w późniejszym czasie. W przeciwieństwie do tradycyjnego wstrzykiwania SQL, wstrzykiwanie drugiego rzędu nie wykonuje kodu natychmiast, ale zapisuje go w bazie danych lub w innych miejscach, gdzie będzie mógł być wykorzystany w przyszłości.
W celu przeprowadzenia ataku wstrzykiwania drugiego rzędu, należy znaleźć podatność SQL Injection, która pozwoli na zapisanie złośliwego kodu w bazie danych. Następnie, gdy aplikacja wykorzysta ten kod w przyszłości, zostanie on wykonany, umożliwiając atakującemu uzyskanie nieautoryzowanego dostępu lub wykonanie innych złośliwych działań.
Aby wykorzystać wstrzykiwanie drugiego rzędu, można użyć narzędzia takiego jak SQLMap, które automatyzuje proces wykrywania i eksploatacji podatności SQL Injection. Narzędzie to pozwala na przeprowadzenie ataku wstrzykiwania drugiego rzędu poprzez zapisanie złośliwego kodu w bazie danych i wykorzystanie go w późniejszym czasie.
Wstrzykiwanie drugiego rzędu jest bardziej zaawansowaną techniką ataku, która wymaga dogłębnej wiedzy na temat SQL Injection i struktury bazy danych. Jednakże, jeśli zostanie poprawnie wykorzystana, może być bardzo skutecznym narzędziem dla hakerów, umożliwiającym wykonanie złośliwego kodu w celu uzyskania nieautoryzowanego dostępu do systemu.
SQLMap to popularne narzędzie do automatycznego wykrywania i eksploatacji podatności SQL Injection. Może być używane do testowania bezpieczeństwa aplikacji internetowych i wykrywania luk w zabezpieczeniach.
#### Instalacja
Aby zainstalować SQLMap, wykonaj następujące kroki:
1. Pobierz najnowszą wersję SQLMap z [oficjalnego repozytorium](https://github.com/sqlmapproject/sqlmap).
2. Rozpakuj pobrane archiwum.
3. Przejdź do katalogu z rozpakowanymi plikami.
4. Uruchom SQLMap za pomocą polecenia `python sqlmap.py`.
Po zidentyfikowaniu podatności SQL Injection, SQLMap może być używane do eksploatacji tych luk w zabezpieczeniach. Aby to zrobić, wykonaj następujące kroki:
1. Uruchom SQLMap, podając adres URL docelowej aplikacji jako argument.
2. Wybierz odpowiednie opcje, takie jak metoda ataku, poziom ryzyka i technika wstrzykiwania.
3. Uruchom eksploatację, używając polecenia `--dump-all` lub `--dump` w celu wydobycia danych z bazy danych.
4. Wybierz konkretne dane do wydobycia, używając polecenia `--columns` i `--dump`.
#### Dodatkowe funkcje
SQLMap oferuje wiele dodatkowych funkcji, które mogą być przydatne podczas testowania aplikacji internetowych. Niektóre z tych funkcji to:
- Wstrzykiwanie kodu SQL do plików konfiguracyjnych.
- Wstrzykiwanie kodu SQL do nagłówków HTTP.
- Wstrzykiwanie kodu SQL do parametrów POST i GET.
- Wstrzykiwanie kodu SQL do plików XML i JSON.
- Wstrzykiwanie kodu SQL do danych użytkownika.
- Wstrzykiwanie kodu SQL do zapytań LDAP.
- Wstrzykiwanie kodu SQL do zapytań DNS.
#### Zabezpieczenia przed SQL Injection
Aby zabezpieczyć aplikację przed atakami SQL Injection, należy podjąć odpowiednie środki ostrożności. Niektóre z zalecanych praktyk to:
- Używanie parametryzowanych zapytań SQL.
- Walidacja i filtrowanie danych wejściowych.
- Unikanie dynamicznych zapytań SQL.
- Używanie mechanizmów ochrony przed atakami SQL Injection dostarczanych przez frameworki i biblioteki programistyczne.
- Regularne aktualizowanie oprogramowania w celu usuwania znanych podatności.
#### Podsumowanie
SQLMap to potężne narzędzie do testowania bezpieczeństwa aplikacji internetowych pod kątem podatności SQL Injection. Może być używane do wykrywania i eksploatacji luk w zabezpieczeniach, a także do przeprowadzania różnych testów i analizy bazy danych. Pamiętaj jednak, że używanie SQLMap do celów nielegalnych lub bez zgody właściciela systemu jest niezgodne z prawem.
## Przeszukiwanie strony internetowej za pomocą SQLmap i automatyczne wykorzystanie podatności
SQLmap is a powerful tool used for automating the process of detecting and exploiting SQL injection vulnerabilities in web applications. It is capable of crawling a website, identifying potential injection points, and automatically exploiting them.
### Crawling a website
Before exploiting SQL injection vulnerabilities, it is important to crawl the target website to identify potential injection points. This can be done using the following command:
```bash
sqlmap -u <target_url> --crawl=<depth>
```
Replace `<target_url>` with the URL of the website you want to crawl and `<depth>` with the desired depth of the crawl. The depth determines how many levels deep SQLmap will crawl the website.
### Identifying injection points
Once the website has been crawled, SQLmap will identify potential injection points and display them in the output. These injection points can be URLs, form parameters, cookies, or HTTP headers.
Replace `<target_url>` with the URL of the website, `<post_data>` with the POST data (if applicable), `<cookie_data>` with the cookie data (if applicable), `<header_data>` with the header data (if applicable), `<level>` with the level of tests to perform (1-5, with 5 being the most thorough), and `<risk>` with the risk level of tests to perform (1-3, with 3 being the most risky).
SQLmap will automatically test the identified injection points for vulnerabilities and attempt to exploit them.
### Conclusion
By using SQLmap to crawl a website and automatically exploit SQL injection vulnerabilities, you can efficiently identify and exploit potential security flaws in web applications. However, it is important to ensure that you have proper authorization and legal permission before performing any penetration testing activities.
Sometimes, you may encounter situations where the SQL injection payload needs to be appended with a specific suffix. This can be achieved by using the `--suffix` option in SQLMap.
Using the `--suffix` option can be helpful in scenarios where the application requires a specific character or string to be present after the injection payload.
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
To find boolean-based SQL injection vulnerabilities, you can use the SQLMap tool. SQLMap is a powerful tool that automates the process of detecting and exploiting SQL injection flaws.
First, you need to identify the vulnerable parameter in the target URL. This parameter is usually found in the query string or in the form data. Once you have identified the parameter, you can proceed with the following steps:
1. Use the `--level` and `--risk` options to set the scanning level and risk level respectively. Higher levels increase the thoroughness of the scan but also increase the chances of causing disruptions.
2. Use the `--dbms` option to specify the database management system (DBMS) used by the target application. This helps SQLMap to optimize the payloads and techniques for the specific DBMS.
3. Use the `--technique` option to specify the injection technique. For boolean-based injection, you can use the `B` technique.
4. Use the `--tamper` option to specify tampering scripts. These scripts modify the payloads sent by SQLMap to bypass security filters. For boolean-based injection, you can use the `boolean-based` tamper script.
5. Use the `--dbs` option to enumerate the available databases on the target server. This helps you to identify the database names that you can further exploit.
6. Use the `--tables` option to enumerate the tables in a specific database. This helps you to identify the table names that you can further exploit.
7. Use the `--columns` option to enumerate the columns in a specific table. This helps you to identify the column names that you can further exploit.
By following these steps, you can effectively use SQLMap to find boolean-based SQL injection vulnerabilities and gather valuable information from the target database. Remember to always obtain proper authorization before conducting any penetration testing activities.
Tamper to funkcja w narzędziu SQLMap, która pozwala na modyfikację żądań HTTP i odpowiedzi serwera w celu obejścia zabezpieczeń i manipulacji danymi. Działa poprzez aplikowanie różnych technik modyfikacji na parametry żądania, co może pomóc w ominięciu filtrów i wykryciu podatności na SQL Injection.
### Użycie
Aby użyć funkcji Tamper w SQLMap, należy dodać flagę `--tamper` po nazwie narzędzia. Następnie można wybrać jedną lub wiele technik modyfikacji, które zostaną zastosowane do żądań i odpowiedzi. Przykład użycia:
W powyższym przykładzie używane są dwie techniki modyfikacji: `apostrophemask` i `randomcase`. Pierwsza technika zamienia pojedyncze cudzysłowy na różne kombinacje, aby obejść filtrowanie znaków specjalnych. Druga technika losowo zmienia wielkość liter w żądaniu i odpowiedzi, co może pomóc w uniknięciu wykrycia przez systemy detekcji.
### Dostępne techniki modyfikacji
SQLMap oferuje wiele różnych technik modyfikacji, które można zastosować przy użyciu funkcji Tamper. Niektóre z popularnych technik to:
Pełną listę dostępnych technik modyfikacji można znaleźć w dokumentacji SQLMap.
### Tworzenie własnych technik modyfikacji
Jeśli żadna z dostępnych technik modyfikacji nie spełnia wymagań, można również stworzyć własną technikę. W tym celu należy utworzyć plik Pythona zawierający funkcję modyfikacji i przekazać ścieżkę do tego pliku jako argument `--tamper`. Funkcja powinna przyjmować jako argumenty łańcuch znaków `payload` i `**kwargs`, a następnie zwracać zmodyfikowany łańcuch znaków.
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.