sqlmap是一个开源的渗透测试工具,可以自动检测和利用SQL注入漏洞并接管数据库服务器。它配备了强大的检测引擎,针对终极渗透测试人员的众多特性,以及从数据库指纹识别,从数据库获取数据,到访问底层文件系统以及在操作系统上通过out-带外连接。
特征: - 完全支持MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP MaxDB,HSQLDB和Informix数据库管理系统。
- 完全支持六种SQL注入技术:基于布尔的盲,基于时间的盲,基于错误的,基于查询的UNION,堆栈查询和带外。
- 支持直接连接数据库而不通过SQL注入,通过提供DBMS凭证,IP地址,端口和数据库名称。
- 支持枚举用户,密码哈希,权限,角色,数据库,表和列。
- 自动识别密码哈希格式,并支持使用基于字典的攻击对其进行破解。
- 支持完全转储数据库表,一系列条目或特定列根据用户的选择。用户也可以选择仅从每列的条目转储一系列字符。
- 支持搜索特定的数据库名称,跨所有数据库的特定表或所有数据库表的特定列。例如,这对于标识包含自定义应用程序凭证的表格非常有用,其中相关列的名称包含名称和传递等字符串。
- 当数据库软件是MySQL,PostgreSQL或Microsoft SQL Server时,支持从数据库服务器底层文件系统下载和上载任何文件。
- 当数据库软件是MySQL,PostgreSQL或Microsoft SQL Server时,支持执行任意命令并检索数据库服务器底层操作系统上的标准输出。
- 支持在攻击者机器和数据库服务器底层操作系统之间建立一个带外状态TCP连接。该通道可以是交互式命令提示符,Meterpreter会话或图形用户界面(VNC)会话,可以根据用户的选择进行选择。
- 通过Metasploit的Meterpreter 命令支持数据库进程'用户权限升级getsystem。
用法:python sqlmap [options] python sqlmap [选项]
选项:-h,--help 显示基本帮助信息并退出 -hh 显示高级帮助信息并退出 --version 显示程序的版本号并退出 -v VERBOSE 详细程度级别:0-6(默认值1)
目标:至少必须提供其中一个选项来定义目标(S) -d DIRECT 直接连接数据库的连接字符串 -u URL,--url = URL 目标URL(例如“http://www.site.com/vuln.php?id=1”) -l LOGFILE 从Burp或WebScarab代理日志文件解析目标 -x SITEMAPURL 从远程站点地图(.xml)文件解析目标 -m BULKFILE 扫描文本文件中给出的多个目标 -r REQUESTFILE 从文件加载HTTP请求 -g GOOGLEDORK 将Google dork结果作为目标网址处理 -c CONFIGFILE 从配置INI文件中加载选项
请求:这些选项可用于指定如何连接到目标URL --method = METHOD 强制使用给定的HTTP方法(例如PUT) --data = DATA 通过POST发送的数据字符串 --param-del = PARA。 用于分割参数值的字符 --cookie = COOKIE HTTP Cookie标头值 --cookie-del = COO .. 用于分割cookie值的字符 --load-cookies = L .. 包含Netscape / wget格式的cookie的文件 --drop-set-cookie 忽略来自响应的Set-Cookie头 --user-agent = AGENT HTTP用户代理标题值 --random-agent 使用随机选择的HTTP User-Agent头值 --host = HOST HTTP主机头值 --referer = REFERER HTTP Referer头部值 -H HEADER,--hea .. 额外的头文件(例如“X-Forwarded-For:127.0.0.1”) --headers = HEADERS 额外的标题(例如“Accept-Language:fr \ nETag:123”) --auth-type = AUTH .. HTTP认证类型(Basic,Digest,NTLM或PKI) --auth-cred = AUTH .. HTTP认证凭证(名称:密码) --auth-file = AUTH .. HTTP认证PEM证书/私钥文件 --ignore-code = IG .. 忽略HTTP错误代码(例如401) --ignore-proxy 忽略系统默认代理设置 --ignore-redirects 忽略重定向尝试 --ignore-timeouts 忽略连接超时 --proxy = PROXY 使用代理连接到目标URL --proxy-cred = PRO .. 代理认证凭证(名称:密码) --proxy-file = PRO .. 从文件加载代理列表 --tor 使用Tor匿名网络 --tor-port = TORPORT 设置默认的Tor代理端口 --tor-type = TORTYPE 设置Tor代理类型(HTTP,SOCKS4或SOCKS5(默认)) --check-tor 检查Tor是否正确使用 --delay = DELAY 每个HTTP请求之间的延迟(秒) --timeout = TIMEOUT 超时连接等待的时间(默认为30) --retries = RETRIES 连接超时时重试(默认3) --randomize = RPARAM 随机更改给定参数的值(s) --safe-url =SAFEURL URL 在测试期间经常访问的SAFEURL URL地址 --safe-post = SAFE .. POST数据发送到一个安全的URL --safe-req = SAFER .. 从文件中加载安全的HTTP请求 --safe-freq = SAFE .. 两次访问给定安全URL的测试请求 --skip-urlencode 跳过净荷数据的URL编码 --csrf-token = CSR .. 用于保存反CSRF标记的参数 --csrf-url = CSRFURL 要访问的URL地址以提取反CSRF标记 --force-ssl 强制使用SSL / HTTPS --hpp 使用HTTP参数污染方法 --eval = EVALCODE 在请求之前评估提供的Python代码(例如,“import hashlib; id2 = hashlib.md5(id).hexdigest()”)
优化:这些选项可以用来优化sqlmap的性能 -o 打开所有优化开关 --predict-output 预测常见查询输出 --keep-alive 使用持久HTTP(s)连接 --null-connection 检索没有实际的HTTP响应主体的页面长度 --threads = THREADS 最大并发HTTP请求数(默认值为1)
注射:这些选项可以用来指定要测试的参数,提供自定义注入有效载荷和可选的篡改脚本 -p TESTPARAMETER 可测试的参数(s) --skip = SKIP 跳过对给定参数的测试 --skip-static 跳过似乎不是动态的测试参数 --param-exclude = .. 正则表达式从测试中排除参数(例如“ses”) --dbms = DBMS 将后端DBMS强制为此值 --dbms-cred = DBMS .. DBMS身份验证凭据(用户:密码) --os = OS 强制后端DBMS操作系统为此值 --invalid-bignum 使用大数字来使值失效 --invalid-logical 使用逻辑操作来使值失效 --invalid-string 使用随机字符串来使值无效 --no-cast 关闭有效载荷转换机制 --no-escape 关闭字符串转义机制 --prefix = PREFIX 注入有效载荷前缀字符串 --suffix = SUFFIX 注入有效负载后缀字符串 --tamper = TAMPER 使用给定的脚本来篡改注入数据
检测:这些选项可用于自定义检测阶段 --level = LEVEL 要执行的测试级别(1-5,默认值1) --risk=RISK 执行测试的风险(1-3,默认值1) --string = STRING 将查询评估为True时匹配的字符串 --not-string = NOT .. 将查询评估为False时匹配的字符串 --regexp = REGEXP 正则表达式匹配查询评估为True时 --code = CODE 当查询评估为True时匹配的HTTP代码 --text-only 比较仅基于文本内容的页面 --titles 只比较页面的标题
技巧:这些选项可以用来调整特定SQL注入的测试技术 --technique = TECH 使用SQL注入技术(默认“BEUSTQ”) --time-sec = TIMESEC 延迟DBMS响应的秒数(默认值5) --union-cols = UCOLS 要测试UNION查询SQL注入的列的范围 --union-char =UCHAR 用于强化列数的UCHAR字符 --union-from = UFROM 表在UNION查询SQL注入的FROM部分中使用 --dns-domain = DNS .. 用于DNS泄露攻击的域名 --second-order = S .. 生成的页面URL搜索二阶响应
指纹: -f,--fingerprint 执行大量的DBMS版本指纹
枚举: 这些选项可以用来枚举后端数据库管理体系信息,结构和所包含的数据表。而且你可以运行你自己的SQL语句 -a,--all 检索一切 -b,--banner 检索DBMS横幅 --current-user 检索DBMS当前用户 --current-db 检索DBMS当前数据库 --hostname 检索DBMS服务器主机名 --is-dba 检测DBMS当前用户是否是DBA --users 枚举DBMS用户 --passwords 枚举DBMS用户密码哈希值 --privileges 枚举DBMS用户权限 --roles 枚举DBMS用户角色 --dbs 枚举DBMS数据库 --tables 枚举DBMS数据库表 --columns 枚举DBMS数据库表列 --schema 枚举DBMS模式 --count 检索表格的条目数 --dump 转储DBMS数据库表条目 --dump-all 转储所有DBMS数据库表项 --search 搜索列,表格和/或数据库名称(S) --comments 检索DBMS注释 -D DB DBMS数据库来枚举 -T TBL DBMS数据库表进行枚举 -C COL DBMS数据库表列来枚举 -X EXCLUDECOL DBMS数据库表列不能枚举 -U USER DBMS用户枚举 --exclude-sysdbs 枚举表时排除DBMS系统数据库 --pivot-column = P .. Pivot列名称 --where = DUMPWHERE 在表转储时使用WHERE条件 --start = LIMITSTART 要检索的第一个转储表项 --stop = LIMITSTOP 要检索的上次转储表条目 --first = FIRSTCHAR 首先查询输出字符来检索 --last=LASTCHAR 最后一个查询输出字符字符检索 --sql-query =QUERY 要执行的QUERY SQL语句 --sql-shell 提示交互式SQL shell --sql-file = SQLFILE 执行给定文件的SQL语句
蛮力:这些选项可以用来运行强力检查 --common-tables 检查是否存在通用表 --common-columns 检查是否存在公共列
用户定义的功能注入:这些选项可以用来创建自定义的用户定义函数 --udf-inject 注入自定义用户定义的函数 --shared-lib = SHLIB 共享库的本地路径
文件系统访问:这些选项可用于访问后端数据库管理系统底层文件系统 --file-read = RFILE 从后端DBMS文件系统读取文件 --file-write = WFILE 在后端DBMS文件系统上写入本地文件 --file-dest = DFILE 要写入的后端DBMS绝对文件路径
操作系统访问:这些选项可用于访问后端数据库管理系统底层操作系统 --os-cmd = OSCMD 执行操作系统命令 --os-shell 提示使用交互式操作系统shell --os-pwn 提示使用OOB shell,Meterpreter或VNC --os-smbrelay 单击OOB shell,Meterpreter或VNC的提示 --os-bof 存储过程缓冲区溢出开发 --priv-esc 数据库进程用户权限升级 --msf-path = MSFPATH 安装Metasploit Framework的本地路径 --tmp-path = TMPPATH 临时文件目录的远程绝对路径
Windows注册表访问:这些选项可用于访问后端数据库管理系统的Windows注册表 --reg-read 读取Windows注册表项值 --reg-add 编写一个Windows注册表键值数据 --reg-del 删除Windows注册表键值 --reg-key = REGKEY Windows注册表项 --reg-value = REGVAL Windows注册表键值 --reg-data = REGDATA Windows注册表键值数据 --reg-type = REGTYPE Windows注册表项值类型
一般:这些选项可以用来设置一些一般的工作参数 -s SESSIONFILE 从存储的(.sqlite)文件加载会话 -t TRAFFICFILE 将所有HTTP流量记录到文本文件中 -t TRAFFICFILE 不要求用户输入,使用默认行为 --binary-fields = .. 具有二进制值的结果字段(例如“摘要”) --charset = CHARSET 强制用于数据检索的字符编码 --check-internet 在评估目标之前检查Internet连接 --crawl=CRAWLDEPTH 从目标URL开始抓取网站 --crawl-exclude = .. 正则表达式排除页面爬行(例如“注销”) --csv-del = CSVDEL CSV输出中使用的分隔字符(默认为“,”) --dump-format = DU .. 转储数据的格式(CSV(默认),HTML或SQLITE) --eta 显示每个输出的预计到达时间 --flush-session 刷新当前目标的会话文件 --forms 在目标URL上解析和测试表单 --fresh-queries 忽略存储在会话文件中的查询结果 --har = HARFILE 将所有HTTP流量记录到HAR文件中 --hex 使用DBMS十六进制功能进行数据检索 --output-dir = OUT .. 自定义输出目录路径 --parse-errors 解析并显示来自响应的DBMS错误消息 --save = SAVECONFIG 将选项保存到配置INI文件 --scope = SCOPE Regexp 从提供的代理日志中筛选目标 --test-filter = TE .. 按有效载荷和/或标题选择测试(例如,ROW) --test-skip = TEST .. 通过有效载荷和/或标题跳过测试(例如,BENCHMARK) --update 更新sqlmap
其它: -z 助记符使用短助记符(例如“流感,蝙蝠,禁令,技术=欧盟”) --alert = ALERT 发现SQL注入时运行主机操作系统命令 --answers = ANSWERS 设置问题答案(例如“quit = N,follow = N”) --beep 有问题的时候发出哔哔声和/或发现SQL注入的时候 --cleanup 从sqlmap特定的UDF和表中清理DBMS --dependencies 检查丢失(非核心)的sqlmap依赖项 --disable-coloring 禁用控制台输出颜色 --gpage = GOOGLEPAGE 使用来自指定页码的Google dork结果 --identify-waf 对WAF / IPS / IDS进行彻底的测试 --mobile 通过HTTP User-Agent头模仿智能手机 --offline 在离线模式下工作(仅使用会话数据) --purge-output 安全地从输出目录中删除所有内容 --skip-waf 跳过启发式检测WAF / IPS / IDS保护 --smart 只有在积极的启发式(s) --sqlmap-shell 提示交互式的sqlmap shell --tmp-dir = TMPDIR 用于存储临时文件的本地目录 --web-root = WEBROOT Web服务器文档根目录(例如“/ var / www”) --wizard 向导初学者用户简单的向导界面
sqlmap效果与评价:我还是那句话,kali里面提供的软件只要有官方网站的通常是不会很差的,虽然说现在sql注入难度变大了,但是还是有很多的网站它对sql注入还是做得不到位,特别是自己开发的项目,我见过太多新入行的程序员他们往往在开发项目的时候是没有太在意sql注入这个问题的。有关sqlmap详细知识请看下面: 官方网站:http://sqlmap.org/ 使用手册:https://github.com/sqlmapproject/sqlmap |