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 #调出终端 ...
随机推荐
- ubuntu12.04管理文件系统工具
ubuntu12.04管理文件系统工具 以前可以自动管理系统盘和移动硬盘,刚重新安装了UBUNTU12.04LTS之后不行了,原来是这个工具: "PCMANFM" 群星_-_偏偏喜 ...
- Effective Modern C++ ——条款6 当auto型别不符合要求时,使用带显式型别的初始化物习惯用法
类的代理对象 其实这部分内容主要是说明了在STL或者某些其他代码的容器中,在一些代理类的作用下使得最后的返回值并不是想要的结果. 而他的返回值则是类中的一个容器,看下面的一段代码: std::vect ...
- HiveMQ TDengine extension 使用指南
我们简单介绍一下 HiveMQ extension for TDengine 的部署和使用方法. TDengine 和 HiveMQ 部署方法 TDengine 安装最新 TDengine serve ...
- Python的ConfigParser模块读取ini配置文件 报错(持续更新总结)
1.ConfigParser.MissingSection什么的错误巴拉巴拉一堆,其实根本上就是没有读到配置文件,然后我去检查了一遍路径,发现没有问题,我是将文件的路径作为一个字符串拼接好传到另一个专 ...
- 从ceph对象中提取RBD中的指定文件
前言 之前有个想法,是不是有办法找到rbd中的文件与对象的关系,想了很久但是一直觉得文件系统比较复杂,在fs 层的东西对ceph来说是透明的,并且对象大小是4M,而文件很小,可能在fs层进行了合并,应 ...
- rbd的image对象数与能写入文件数的关系
前言 收到一个问题如下: 一个300TB 的RBD,只有7800万的objects,如果存储小文件的话,感觉不够用 对于这个问题,我原来的理解是:对象默认设置的大小是4M一个,存储下去的数据,如果小于 ...
- PHP+Ajax点击加载更多内容
css样式: <style type="text/css"> #more{margin:10px auto;width: 560px; border: 1px soli ...
- C++深拷贝与浅拷贝区别
浅拷贝只是对指针的拷贝,浅拷贝后两个指针指向同一个内存空间: 深拷贝不仅对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针. 当对一个已知对象进行拷贝时,编译系统会 ...
- vue中实时监听移动端屏幕高度(采坑后实践)
最近做微信公众号活动,需要首页往input中输入内容,点击input软键盘tabbar被顶起来,网上借鉴很多(踩了许多坑)最后自己实践出来. <--!将手机屏幕的默认高度和实时高度获取--> ...
- ppt-1 操作界面与基本操作
1.Ctrl+N快速建立新文档 2.新模板:文件--新建--可免费搜索.下载新模板 3.恢复未保存的演示文稿 文件--打开(首先看到的是近期使用的演示文稿,)--鼠标滚动至末尾,可看到"恢复 ...