SQLMap使用指北
简介
sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。
安装
网上太多,不再赘述
支持的五种注入模式
基于布尔的盲注,即可以根据返回页面判断条件真假的注入
基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断
基于报错的注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中
联合查询注入,可以使用union的情况下的注入
堆查询注入,可以同时执行多条语句的执行时的注入
支持的数据库
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
sqlmap执行流程
判断可注入的参数
判断可以用哪种SQL注入技术来注入
识别出数据库类型
根据用户的输入,选择相应数据的读取
基础使用
sqlmap中很多的命令在实际应用中我们并不会用到,没有必要花大部分的时间去记下一堆不用就会忘记的命令,该部分列举了一些常用的命令
输出等级 -v
如果你想要观察sqlmap对一个可能的注入点进行了怎样的尝试判断以及读取数据的,可以使用 -v 参数,一共分为7个等级,默认为1,初学sql注入的话可以指定为-v 3 等级,这样会给出payload,方便学习
0:只显示 Python 的 tracebacks 信息、错误信息 [ERROR] 和关键信息 [CRITICAL];
1:同时显示普通信息 [INFO] 和警告信息 [WARNING];
2:同时显示调试信息 [DEBUG];
3:同时显示注入使用的攻击荷载;
4:同时显示 HTTP 请求;
5:同时显示 HTTP 响应头;
6:同时显示 HTTP 响应体。
指定目标 -u 或 --url
使用参数 -u 或者 --url 指定一个URL作为目标,该参数后跟一个表示URL的字符串,可以是http协议也可以是https协议,也可以指定端口
举例
sqlmap.py -u http://testphp.vulnweb.com/comment.php?aid=1
查看下载数据库数据:
sqlmap -u "url" --dbs //获取该url对应数据库的名称
sqlmap -u "url" --tables -D "database" //database这个数据库的表数据表 sqlmap -u "url" --columns -T "tables" -D "database" //查看tables这个数据表的字段 sqlmap -u "url" --dump "a,b,c" -C "columns" -T "tables" -D "database" //下载内容,后面的-CTDabc都是对下载的数据库表段的约束如果不加就是下载所有
指定多个URL -m
参数 -u 一次只能指定一个URL,若有多个URL需要测试就显得很不方便,我们可以将多个URL以一行一个的格式保存在文本文件中,然后使用参数 -m ,参数 -m 后跟该文本文件路径,让SQLMap依次读取文件中的URL作为攻击目标
从文件载入HTTP请求 -r
可以将一个HTTP请求保存在文件中,然后使用参数 -r 加载该文件,SQLMap会解析该文件,从该文件分析目标并进行测试
很多时候是使用BurpSuite对HTTP请求进行抓包并保存,然后使用 -r 参数读取文件进行注入,使用 -p 参数进行注入参数的指定
举个例子:
sqlmap.py -r "post.txt" -p "username" --dbs
将Google搜索结果作为攻击目标 -g
SQLMap能自动获取Google搜索的前一百个结果,对其中有GET参数的URL进行注入测试,当然因为某些众所周知的原因,你需要能够先翻越伟大的长城,在sqlmap手册中 -g 参数的例子为:
python sqlmap.py -g "inurl:\".php?id=1\""
进阶用法
进阶用法比之前的基础用法要高级一丢丢
列出数据库用户名和密码
--users 列出所有数据库用户,当前用户有权限读取包含所有用户的表权限时,就可以列出所有管理用户
--password 数据库密码,当前用户有权限读取包含用户密码的权限时,sqlmap会先列举出用户,然后列出hash,并且尝试破解
显示网站当前信息
--current-db 网站当前数据库
--current-user 当前数据库用户
指定代理
--proxy http://local:8080
指定代理进行网站注入,使用HTTP代理链接到目标URL,在防火墙会BAN的情况下使用
构造随机请求头 user-agent
--random-agent 构造随机user-agent
检查用户权限
--is-dbs 当前用户权限(是否为root),是的话会返回True
设置延迟注入的时间
--time-sec=xxx
当使用基于时间的盲注时,可指定响应的延迟时间(默认为5秒)
设置请求并发量
--threads=THREADS
最大的HTTP(S) 请求并发量(默认为1)
写入文件
条件:
1,需要有网站的物理路径,可以通过phpinfo探针,或者网站报错等方式获取
2,需要有可读或可写权限
--file-read=RFILE 从后端的数据库管理系统文件系统读取文件(物理路径)
--file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
--file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
举例如:
sqlmap -r "c:\request.txt" -p id –dbms mysql –file-dest "e:\php\htdocs\dvwa\inc\include\1.php" –file-write "f:\webshell\1112.php"
获取表中数据个数
--count xxx
有时候用户只想获取表中数据个数而不是具体的内容,那么可以使用这个参数
适用场景在HW的过程中,不允许拖数据又要知道数据量来拿分
HTTP请求之间添加延迟
--delay xxx
过于频繁地发送请求可能会被网站察觉或者有其他不良后果,使用参数 --delay 来指定HTTP请求之间的延迟,单位为秒,类型是浮点数,如
--delay 1.5 表示延迟1.5秒,默认是没有延迟的
修改注入数据
--tamper
除了使用CHAR()编码字符串外SQLMap没有对payload进行任何混淆。
该参数用于对payload进行混淆以绕过IPS或WAF
若使用的tamper脚本位于sqlmap的安装目录的tamper/目录中,那么可以省略路径和后缀名,只写文件名
多个tamper脚本之间使用空格隔开
在tamper/目录中有很多可用的tamper脚本,我们也可以自己编写属于自己的tamper脚本,这属于sqlmap的高级用法
关于tamper的详细介绍,有:
执行任意操作系统命令
--os-cmd 和 --os-shell
1.sqlmap -u http://url --os-shell
//或者windows可以用--os-cmd 或--sql-shell
2.选择网站服务端语言
3.填写网站根目录C:/www/
暂时先写这些趴,后面有啥要补充的再更新
参考链接:
SQLMap使用指北的更多相关文章
- git宝典—应付日常工作使用足够的指北手册
最近公司gitlab又迁移,一堆git的命令骚操作,然鹅git命令,感觉还是得复习下——其实,git现在界面操作工具蛮多,比如intellij 自带的git操作插件就不错,gitlab github ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
- Python 简单入门指北(一)
Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...
- 可能比文档还详细--VueRouter完全指北
可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...
- 关于supervisor的入门指北
关于supervisor的入门指北 在目前这个时间点(2017/07/25),supervisor还是仅支持python2,所以我们要用版本管理pyenv来隔离环境. pyenv 根据官方文档的讲解, ...
- 关于Gevent的使用指北
关于Gevent的使用指北 只是看了入门指南,和一个翻译文档.写一下个人读书心得. 其实看完之后,第一个反映就是asyncio这个系统库,感觉gevent现在所做的一些事情是与asyncio很像的,但 ...
- Celery入门指北
Celery入门指北 其实本文就是我看完Celery的官方文档指南的读书笔记.然后由于我的懒,只看完了那些入门指南,原文地址:First Steps with Celery,Next Steps,Us ...
- 后端API入门到放弃指北
后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一 ...
- 颓废选手在 Ubuntu/Noilinux 下的生存指北
颓废选手在 Ubuntu/Noilinux 下的生存指北 Hint: 这里的 "#" 都是假注释,复制的时候记得删除 一些基本的生存命令 ctrl + alt + t #调出终端 ...
随机推荐
- Databricks说的Lakehouse是什么?
在过去的几年里,Lakehouse作为一种新的数据管理范式,已独立出现在Databricks的许多用户和应用案例中.在这篇文章中,我们将阐述这种新范式以及它相对于之前方案的优势. 数据仓库在决策支持和 ...
- (1)ElasticSearch搭配Kibana在linux环境的部署
1.简介 这个章节主要介绍ElasticSearch+Kibana两个组件在linux环境的部署步骤,以及在部署过程中遇到问题解决,暂就不涉及集群部署知识点,后面章节再详细讲解这块.下面让我们来简单了 ...
- 基于 Nebula Operator 的 K8s 自动化部署运维
摘要:Nebula Operator 是 Nebula Graph 在 Kubernetes 系统上的自动化部署运维插件.在本文,你将了解到 Nebula Operator 的特性及它的工作原理. 从 ...
- Kafka高性能揭秘:sequence IO、PageCache、SendFile的应用详解
大家都知道Kafka是将数据存储于磁盘的,而磁盘读写性能往往很差,但Kafka官方测试其数据读写速率能达到600M/s,那么为什么Kafka性能会这么高呢? 首先producer往broker发送消息 ...
- Python_爬虫_案例汇总:
1.豆瓣采集 1 #coding:utf-8 2 #采集豆瓣书信息和图片,写进数据库 3 4 from urllib import request 5 # from bs4 import Beauti ...
- 干货 MySQL常见的面试题 + 索引原理分析
常见的面试必备之MySQL索引底层原理分析: MySQL索引的本质 MySQL索引的底层原理 MySQL索引的实战经验 面试 1)问题:数据库中最常见的慢查询优化方式是什么? 回答:加索引 2)问题: ...
- mybatis 解决属性名和字段名不一致
1. 数据库中表的设计 2. 实体类 3.mapper映射文件 4. 问题:密码没有获取到 原因:mybatis会根据查询的列名去进行设值 5. 解决列名和属性名不一致的方法 5.1 为列名指定别名, ...
- metasploit2 - vsftpd 漏洞攻击和拿shell
一.环境说明 目标IP: 本人虚拟机 192.168.80.134 ,使用 metasploit2 攻击IP: 本人虚拟机 192.168.80.129 ,使用 kali Metasploitable ...
- 面试题59 - II. 队列的最大值
请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的时间复杂度都是O(1). 若队列为空,pop_front 和 ...
- 5w 字 | 172 图 | 超级赛亚级 Spring Cloud 实战
一.PassJava 项目简介 PassJava-Learning 项目是 PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款 Java 面试刷题 的 ...