Translated ['src/pentesting-web/sql-injection/sqlmap.md', 'src/pentestin

This commit is contained in:
Translator 2025-07-30 06:29:19 +00:00
parent b8d9f70cbb
commit 9198d40a28
2 changed files with 104 additions and 63 deletions

View File

@ -4,7 +4,7 @@
## SQLmap을 위한 기본 인자
### 일반적인
### 일반
```bash
-u "<URL>"
-p "<PARAM TO TEST>"
@ -21,6 +21,23 @@
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=PROXY
```
### Technique flags (`--technique`)
`--technique` 인자는 sqlmap이 시도할 SQL 인젝션 방법을 정의합니다. 문자열의 각 문자는 기술을 나타냅니다:
| Letter | Technique | Description |
| ------ | --------- | ----------- |
| B | Boolean-based blind | true/false 조건을 사용하여 데이터를 추론합니다 |
| E | Error-based | 상세한 DBMS 오류 메시지를 활용하여 결과를 유출합니다 |
| U | UNION query | 동일한 채널을 통해 데이터를 가져오기 위해 `UNION SELECT` 문을 주입합니다 |
| S | Stacked queries | `;`로 구분된 추가 문을 추가합니다 |
| T | Time-based blind | 인젝션을 감지하기 위해 지연(`SLEEP`, `WAITFOR`)에 의존합니다 |
| Q | Inline / out-of-band | `LOAD_FILE()`와 같은 함수 또는 DNS와 같은 OOB 채널을 사용합니다 |
기본 순서는 `BEUSTQ`입니다. 이를 재배열하거나 제한할 수 있습니다. 예를 들어, Boolean과 Time-based만 그 순서대로:
```bash
sqlmap -u "http://target/?id=1" --technique="BT" --batch
```
### 정보 검색
#### 내부
@ -71,7 +88,7 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
#The injection is located at the '*'
```
### 2차 주입
### 두 번째 차수 주입
```bash
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
@ -105,7 +122,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
```
### 불리언 인젝션 찾기
### Help finding boolean injection
```bash
# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch
@ -117,51 +134,54 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
```
| Tamper | Description |
| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | 아포스트로피 문자를 UTF-8 전체 폭 대응 문자로 대체합니다. |
| apostrophenullencode.py | 아포스트로피 문자를 불법적인 이중 유니코드 대응 문자로 대체합니다. |
| appendnullbyte.py | 페이로드 끝에 인코딩된 NULL 바이트 문자를 추가합니다. |
| base64encode.py | 주어진 페이로드의 모든 문자를 Base64로 인코딩합니다. |
| between.py | '>' 연산자를 'NOT BETWEEN 0 AND #'로 대체합니다. |
| bluecoat.py | SQL 문장 뒤의 공백 문자를 유효한 무작위 공백 문자로 대체합니다. 이후 '=' 문자를 LIKE 연산자로 대체합니다. |
| chardoubleencode.py | 주어진 페이로드의 모든 문자를 이중 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). |
| commalesslimit.py | 'LIMIT M, N'과 같은 인스턴스를 'LIMIT N OFFSET M'으로 대체합니다. |
| commalessmid.py | 'MID(A, B, C)'와 같은 인스턴스를 'MID(A FROM B FOR C)'로 대체합니다. |
| concat2concatws.py | 'CONCAT(A, B)'와 같은 인스턴스를 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'로 대체합니다. |
| charencode.py | 주어진 페이로드의 모든 문자를 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). |
| charunicodeencode.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). "%u0022" |
| charunicodeescape.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). "\u0022" |
| equaltolike.py | '=' 연산자의 모든 발생을 'LIKE' 연산자로 대체합니다. |
| escapequotes.py | 따옴표(')와 큰따옴표(")를 슬래시로 이스케이프합니다. |
| greatest.py | '>' 연산자를 'GREATEST' 대응 문자로 대체합니다. |
| halfversionedmorekeywords.py | 각 키워드 앞에 버전이 있는 MySQL 주석을 추가합니다. |
| ifnull2ifisnull.py | 'IFNULL(A, B)'와 같은 인스턴스를 'IF(ISNULL(A), B, A)'로 대체합니다. |
| modsecurityversioned.py | 전체 쿼리를 버전이 있는 주석으로 감쌉니다. |
| modsecurityzeroversioned.py | 전체 쿼리를 제로 버전 주석으로 감쌉니다. |
| multiplespaces.py | SQL 키워드 주위에 여러 개의 공백을 추가합니다. |
| nonrecursivereplacement.py | 미리 정의된 SQL 키워드를 대체에 적합한 표현으로 대체합니다 (예: .replace("SELECT", "") 필터). |
| percentage.py | 각 문자 앞에 백분율 기호('%')를 추가합니다. |
| overlongutf8.py | 주어진 페이로드의 모든 문자를 변환합니다 (이미 인코딩된 것은 처리하지 않음). |
| randomcase.py | 각 키워드 문자를 무작위 대소문자 값으로 대체합니다. |
| randomcomments.py | SQL 키워드에 무작위 주석을 추가합니다. |
| securesphere.py | 특별히 제작된 문자열을 추가합니다. |
| sp_password.py | 페이로드 끝에 'sp_password'를 추가하여 DBMS 로그에서 자동으로 난독화합니다. |
| space2comment.py | 공백 문자(' ')를 주석으로 대체합니다. |
| space2dash.py | 공백 문자(' ')를 대시 주석('--')으로 대체하고 무작위 문자열과 새 줄('\n')을 추가합니다. |
| space2hash.py | 공백 문자(' ')를 파운드 문자('#')로 대체하고 무작위 문자열과 새 줄('\n')을 추가합니다. |
| space2morehash.py | 공백 문자(' ')를 파운드 문자('#')로 대체하고 무작위 문자열과 새 줄('\n')을 추가합니다. |
| space2mssqlblank.py | 공백 문자(' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
| space2mssqlhash.py | 공백 문자(' ')를 파운드 문자('#')로 대체하고 새 줄('\n')을 추가합니다. |
| space2mysqlblank.py | 공백 문자(' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
| space2mysqldash.py | 공백 문자(' ')를 대시 주석('--')으로 대체하고 새 줄('\n')을 추가합니다. |
| space2plus.py | 공백 문자(' ')를 더하기 기호('+')로 대체합니다. |
| space2randomblank.py | 공백 문자(' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
| symboliclogical.py | AND 및 OR 논리 연산자를 그들의 기호 대응 문자로 대체합니다 (&& 및 |
| unionalltounion.py | UNION ALL SELECT를 UNION SELECT로 대체합니다. |
| unmagicquotes.py | 따옴표 문자(')를 다중 바이트 조합 %bf%27로 대체하고 끝에 일반 주석을 추가합니다 (작동하게 하기 위해). |
| uppercase.py | 각 키워드 문자를 대문자 'INSERT'로 대체합니다. |
| varnish.py | HTTP 헤더 'X-originating-IP'를 추가합니다. |
| versionedkeywords.py | 각 비함수 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
| versionedmorekeywords.py | 각 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
| xforwardedfor.py | 가짜 HTTP 헤더 'X-Forwarded-For'를 추가합니다. |
| apostrophemask.py | 아포스트로피 문자를 UTF-8 전체 폭 대응 문자로 대체합니다. |
| apostrophenullencode.py | 아포스트로피 문자를 불법적인 이중 유니코드 대응 문자로 대체합니다. |
| appendnullbyte.py | 페이로드 끝에 인코딩된 NULL 바이트 문자를 추가합니다. |
| base64encode.py | 주어진 페이로드의 모든 문자를 Base64로 인코딩합니다. |
| between.py | '>' 연산자를 'NOT BETWEEN 0 AND #'로 대체합니다. |
| bluecoat.py | SQL 문장 뒤의 공백 문자를 유효한 무작위 공백 문자로 대체합니다. 이후 '=' 문자를 LIKE 연산자로 대체합니다. |
| chardoubleencode.py | 주어진 페이로드의 모든 문자를 이중 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). |
| commalesslimit.py | 'LIMIT M, N'과 같은 인스턴스를 'LIMIT N OFFSET M'으로 대체합니다. |
| commalessmid.py | 'MID(A, B, C)'와 같은 인스턴스를 'MID(A FROM B FOR C)'로 대체합니다. |
| concat2concatws.py | 'CONCAT(A, B)'와 같은 인스턴스를 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'로 대체합니다. |
| charencode.py | 주어진 페이로드의 모든 문자를 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). |
| charunicodeencode.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). "%u0022" |
| charunicodeescape.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). "\u0022" |
| equaltolike.py | '=' 연산자의 모든 발생을 'LIKE' 연산자로 대체합니다. |
| escapequotes.py | 따옴표(')와 큰따옴표(")를 슬래시로 이스케이프합니다. |
| greatest.py | '>' 연산자를 'GREATEST' 대응 문자로 대체합니다. |
| halfversionedmorekeywords.py | 각 키워드 앞에 버전이 있는 MySQL 주석을 추가합니다. |
| ifnull2ifisnull.py | 'IFNULL(A, B)'와 같은 인스턴스를 'IF(ISNULL(A), B, A)'로 대체합니다. |
| modsecurityversioned.py | 전체 쿼리를 버전이 있는 주석으로 감쌉니다. |
| modsecurityzeroversioned.py | 전체 쿼리를 제로 버전 주석으로 감쌉니다. |
| multiplespaces.py | SQL 키워드 주위에 여러 개의 공백을 추가합니다. |
| nonrecursivereplacement.py | 미리 정의된 SQL 키워드를 대체에 적합한 표현으로 대체합니다 (예: .replace("SELECT", "") 필터). |
| percentage.py | 각 문자 앞에 퍼센트 기호('%')를 추가합니다. |
| overlongutf8.py | 주어진 페이로드의 모든 문자를 변환합니다 (이미 인코딩된 것은 처리하지 않음). |
| randomcase.py | 각 키워드 문자를 무작위 대소문자 값으로 대체합니다. |
| randomcomments.py | SQL 키워드에 무작위 주석을 추가합니다. |
| securesphere.py | 특별히 제작된 문자열을 추가합니다. |
| sp_password.py | 페이로드 끝에 'sp_password'를 추가하여 DBMS 로그에서 자동으로 난독화합니다. |
| space2comment.py | 공백 문자(' ')를 주석으로 대체합니다. |
| space2dash.py | 공백 문자(' ')를 대시 주석('--')으로 대체하고 무작위 문자열과 새 줄('\n')을 추가합니다. |
| space2hash.py | 공백 문자(' ')를 파운드 문자('#')로 대체하고 무작위 문자열과 새 줄('\n')을 추가합니다. |
| space2morehash.py | 공백 문자(' ')를 파운드 문자('#')로 대체하고 무작위 문자열과 새 줄('\n')을 추가합니다. |
| space2mssqlblank.py | 공백 문자(' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
| space2mssqlhash.py | 공백 문자(' ')를 파운드 문자('#')로 대체하고 새 줄('\n')을 추가합니다. |
| space2mysqlblank.py | 공백 문자(' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
| space2mysqldash.py | 공백 문자(' ')를 대시 주석('--')으로 대체하고 새 줄('\n')을 추가합니다. |
| space2plus.py | 공백 문자(' ')를 더하기 기호('+')로 대체합니다. |
| space2randomblank.py | 공백 문자(' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
| symboliclogical.py | AND 및 OR 논리 연산자를 그들의 기호 대응 문자로 대체합니다 (&& 및 |
| unionalltounion.py | UNION ALL SELECT를 UNION SELECT로 대체합니다. |
| unmagicquotes.py | 따옴표 문자(')를 다중 바이트 조합 %bf%27로 대체하고 끝에 일반 주석을 추가합니다 (작동하게 하기 위해). |
| uppercase.py | 각 키워드 문자를 대문자 값 'INSERT'로 대체합니다. |
| varnish.py | HTTP 헤더 'X-originating-IP'를 추가합니다. |
| versionedkeywords.py | 각 비함수 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
| versionedmorekeywords.py | 각 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
| xforwardedfor.py | 가짜 HTTP 헤더 'X-Forwarded-For'를 추가합니다. |
## References
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,6 +2,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## SQLmap을 위한 기본 인수
### 일반
@ -22,6 +23,23 @@
--proxy=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char
```
### Technique flags (`--technique`)
`--technique` 옵션을 사용하면 sqlmap이 테스트할 SQL 인젝션 기술을 제한하거나 재정렬할 수 있습니다. 각 문자는 다른 페이로드 클래스에 해당합니다:
| Letter | Technique | Description |
| ------ | --------- | ----------- |
| B | Boolean-based blind | 페이지 응답에서 true/false 조건을 사용하여 결과를 추론합니다. |
| E | Error-based | 자세한 DBMS 오류 메시지를 활용하여 데이터를 추출합니다. |
| U | UNION query | 동일한 채널을 통해 데이터를 가져오기 위해 `UNION SELECT` 문을 주입합니다. |
| S | Stacked queries | SQL 구분자(`;`)로 구분된 추가 문을 추가합니다. |
| T | Time-based blind | 주입 가능한 조건을 감지하기 위해 `SLEEP/WAITFOR` 지연에 의존합니다. |
| Q | Inline / out-of-band | `LOAD_FILE()` 또는 DNS 유출과 같은 함수를 사용하여 데이터를 추출합니다. |
sqlmap이 따를 기본 순서는 `BEUSTQ` (모든 기술)입니다. 순서와 하위 집합을 모두 변경할 수 있습니다. 예를 들어, 다음 명령은 **오직** UNION 쿼리와 Time-based blind 기술을 시도하며, UNION을 먼저 시도합니다:
```bash
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
```
### 정보 검색
#### 내부
@ -81,11 +99,11 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
```
### 탐지 기술 추가
SQLi를 발견했지만 sqlmap이 이를 감지하지 못한 경우, `--prefix` 또는 `--suffix`와 같은 인수를 사용하여 탐지 기술을 강제로 적용할 수 있습니다. 더 복잡한 경우에는 `/usr/share/sqlmap/data/xml/payloads/time_blind.xml`에 sqlmap이 사용하는 페이로드에 추가할 수 있습니다. 예를 들어, 시간 블라인드 기반입니다.
SQLi를 발견했지만 sqlmap이 이를 감지하지 못한 경우, `--prefix` 또는 `--suffix`와 같은 인수를 사용하여 탐지 기술을 강제로 적용할 수 있습니다. 더 복잡한 경우에는 `/usr/share/sqlmap/data/xml/payloads/time_blind.xml`와 같은 sqlmap에서 사용하는 페이로드에 추가할 수 있습니다.
### Eval
**Sqlmap**은 `-e` 또는 `--eval`을 사용하여 각 페이로드를 전송하기 전에 처리할 수 있습니다. 이는 페이로드를 전송하기 전에 사용자 정의 방식으로 쉽게 빠르게 처리할 수 있게 해줍니다. 다음 예제에서 **flask 쿠키 세션** **은 전송하기 전에 알려진 비밀로 flask에 의해 서명됩니다**:
**Sqlmap**은 `-e` 또는 `--eval`을 사용하여 각 페이로드를 전송하기 전에 처리할 수 있도록 합니다. 이를 통해 페이로드를 전송하기 전에 사용자 정의 방식으로 쉽게 빠르게 처리할 수 있습니다. 다음 예제에서 **flask cookie session** **은 전송되기 전에 알려진 비밀로 flask에 의해 서명됩니다**:
```bash
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
```
@ -129,7 +147,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
```
### Help finding boolean injection
### boolean injection 찾기 도움
```bash
# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch
@ -148,8 +166,8 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| appendnullbyte.py | 페이로드 끝에 인코딩된 NULL 바이트 문자를 추가합니다. |
| base64encode.py | 주어진 페이로드의 모든 문자를 Base64로 인코딩합니다. |
| between.py | '>' 연산자를 'NOT BETWEEN 0 AND #'로 대체합니다. |
| bluecoat.py | SQL 문장 뒤의 공백 문자를 유효한 무작위 공백 문자로 대체합니다. 이후 '=' 문자를 LIKE 연산자로 대체합니다. |
| chardoubleencode.py | 주어진 페이로드의 모든 문자를 이중 URL 인코딩합니다(이미 인코딩된 것은 처리하지 않음). |
| bluecoat.py | SQL 문장 뒤의 공백 문자를 유효한 무작위 공백 문자로 대체합니다. 이후 '=' 문자를 LIKE 연산자로 대체합니다. |
| chardoubleencode.py | 주어진 페이로드의 모든 문자를 이중 URL 인코딩합니다(이미 인코딩된 것은 처리하지 않음). |
| commalesslimit.py | 'LIMIT M, N'과 같은 인스턴스를 'LIMIT N OFFSET M'으로 대체합니다. |
| commalessmid.py | 'MID(A, B, C)'와 같은 인스턴스를 'MID(A FROM B FOR C)'로 대체합니다. |
| concat2concatws.py | 'CONCAT(A, B)'와 같은 인스턴스를 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'로 대체합니다. |
@ -157,20 +175,20 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| charunicodeencode.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다(이미 인코딩된 것은 처리하지 않음). "%u0022" |
| charunicodeescape.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다(이미 인코딩된 것은 처리하지 않음). "\u0022" |
| equaltolike.py | '=' 연산자의 모든 발생을 'LIKE' 연산자로 대체합니다. |
| escapequotes.py | 따옴표(' 및 ")를 슬래시로 이스케이프합니다. |
| escapequotes.py | 따옴표(' 및 ")를 슬래시로 이스케이프합니다. |
| greatest.py | '>' 연산자를 'GREATEST' 대응 문자로 대체합니다. |
| halfversionedmorekeywords.py | 각 키워드 앞에 버전이 있는 MySQL 주석을 추가합니다. |
| halfversionedmorekeywords.py | 각 키워드 앞에 버전이 있는 MySQL 주석을 추가합니다. |
| ifnull2ifisnull.py | 'IFNULL(A, B)'와 같은 인스턴스를 'IF(ISNULL(A), B, A)'로 대체합니다. |
| modsecurityversioned.py | 전체 쿼리를 버전이 있는 주석으로 감쌉니다. |
| modsecurityzeroversioned.py | 전체 쿼리를 제로 버전 주석으로 감쌉니다. |
| multiplespaces.py | SQL 키워드 주위에 여러 개의 공백을 추가합니다. |
| modsecurityversioned.py | 전체 쿼리를 버전이 있는 주석으로 감쌉니다. |
| modsecurityzeroversioned.py | 전체 쿼리를 제로 버전 주석으로 감쌉니다. |
| multiplespaces.py | SQL 키워드 주위에 여러 개의 공백을 추가합니다. |
| nonrecursivereplacement.py | 미리 정의된 SQL 키워드를 대체에 적합한 표현으로 대체합니다(예: .replace("SELECT", "") 필터). |
| percentage.py | 각 문자 앞에 백분율 기호('%')를 추가합니다. |
| overlongutf8.py | 주어진 페이로드의 모든 문자를 변환합니다(이미 인코딩된 것은 처리하지 않음). |
| randomcase.py | 각 키워드 문자를 무작위 대소문자 값으로 대체합니다. |
| randomcase.py | 각 키워드 문자를 무작위 대소문자 값으로 대체합니다. |
| randomcomments.py | SQL 키워드에 무작위 주석을 추가합니다. |
| securesphere.py | 특별히 제작된 문자열을 추가합니다. |
| sp_password.py | 페이로드 끝에 'sp_password'를 추가하여 DBMS 로그에서 자동으로 난독화합니다. |
| sp_password.py | 페이로드 끝에 'sp_password'를 추가하여 DBMS 로그에서 자동으로 난독화합니다. |
| space2comment.py | 공백 문자(' ')를 주석으로 대체합니다. |
| space2dash.py | 공백 문자(' ')를 대시 주석('--')으로 대체하고 무작위 문자열과 새 줄('\n')을 추가합니다. |
| space2hash.py | 공백 문자(' ')를 파운드 문자('#')로 대체하고 무작위 문자열과 새 줄('\n')을 추가합니다. |
@ -186,9 +204,12 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| unmagicquotes.py | 따옴표 문자(')를 다중 바이트 조합 %bf%27로 대체하고 끝에 일반 주석을 추가합니다(작동하게 하기 위해). |
| uppercase.py | 각 키워드 문자를 대문자 'INSERT'로 대체합니다. |
| varnish.py | HTTP 헤더 'X-originating-IP'를 추가합니다. |
| versionedkeywords.py | 각 비함수 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
| versionedmorekeywords.py | 각 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
| versionedkeywords.py | 각 비함수 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
| versionedmorekeywords.py | 각 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
| xforwardedfor.py | 가짜 HTTP 헤더 'X-Forwarded-For'를 추가합니다. |
## References
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../../banners/hacktricks-training.md}}