sqlmap自动扫描注入点_SQLMAP使用指南[学员作品]
文章作者:小酱
团队交流群:673441920
-----------------------------------------------------------
目录
什么是SQLMAP?
SQLMAP的安装
常见数据库的结构
SQLMAP参数
SQLMAP扫描漏洞
SQLMAP的性能优化
SQLMAP的进阶用法
1、什么是SQLMAP?
Sqlmap是一款由Python语言编写的开源sql注入检测、利用工具,它可以自动检测和利用sql注入漏洞,并且配备了强大的检测引擎,拥有丰富的特性这其中包括了指纹识别、对系统的控制、自动识别密码的散列格式并暴力破解等等,加之非常多的参数,是一款安全从业人员必备的工具。
其他特性:
- 基于数据库服务进程提权和上传执行后门
- 支持保存当前会话、断点续扫
- 支持多线程,指定最大的并发数、执行的间隔时间
- 支持读取BurpSuite的日志、结合google自动搜索进行sql注入检查
- 集成于metasploit、w3af
- 等等
Sqlmap完全支持对MySQL、Oracle、PostgreSQL、Microsoft SQL Serve、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、Informix、HSQLDB、H2数据库管理系统的sql注入检测和利用,sqlmap支持以下五种类型的sql注入:
- Boolean-based blind SQL injection(布尔型注入)
- Error-based SQL injection(报错型注入)
- UNION query SQL injection(联合查询注入)
- Stacked queries SQL injection(多语句查询注入)
- Time-based blind SQL injection(基于时间的延迟注入)
2、SQLMAP的安装
由于SQLMAP是Python2.7版本开发的,所以我们在安装SQLMAP前需要先安装Python(Python官网:http://www.python.org),本文采用的是Python 2.7.14版本,每个人的电脑环境不一样在安装完Python后添加环境变量并不靠谱,在这里笔者建议在安装的时候选中添加到系统环境变量。
在SQLMAP的官网上下载了安装包后需要解压到Python的安装目录(这里采用的是SQLMAP1.3.73),并在桌面新建一个快捷方式,将目标设置为C:WindowsSystem32cmd.exe,名字为SQLMAP,然后将这个快捷方式属性内的起始位置设置SQLMAP的目录(笔者这里是E:Python27sqlmap)
我们双击这个快捷方式,输入sqlmap.py -h如果出现如下所示的参数说明和帮助就代表我们的SQLMAP安装成功了。
3、SQLMAP参数
在本章节主要以Webug4.0的sql注入靶场进行讲解,Webug是226安全团队的开源靶场,其名称的含义是我们的漏洞库,也就是我们的靶场,在这里我们将介绍sqlmap绝大多数的常用参数,如读者有兴趣学习其他参数可以使用sqlmap.py -hh命令自行查看(注:读者如是在kali liunx中使用sqlmap只需要执行sqlmap -hh即可)。
4、SQLMAP的帮助参数
参数
作用
h/--help
显示基本的帮助信息
-hh
显示详细的帮助信息
--version
显示SQLMAP的版本号
-v 0-6
设置输出信息的详细度
注:-v参数有0到6七个等级默认情况下为1,等级1:显示信息和警告、等级2:显示debug信息、等级3:显示注入payload、等级4:显示HTTP请求、等级5:显示HTTP请求的响应头、等级6:显示HTTP请求的响应内容。
5、SQLMAP的目标参数
参数
作用
-u
指定需要判断是否存在SQL注入漏洞的URL
-d
直接连接到数据库-d”mysql://用户名:密码@地址:端口/数据库名称”
-l
读取BurpSuite的日志,来判断目标是否存在SQL注入漏洞
-m
读取文本文件中的URL地址判断是否存在SQL注入漏洞
--threads
设置最大并发请求数
--timeout
设置等待超时的时间
--retries
设置重试的次数
6、SQLMAP的枚举参数
参数
作用
-b, --banner
检测出数据库的版本信息
--current-user
检测数据库当前用户的用户名
--current-db
枚举出当前数据库名称
--is-dba
检测当前用户是否是数据库管理员
--users
枚举出所有数据库用户
--passwords
枚举出所有数据库用户的密码哈希
--privileges
枚举数据库管理系统用户的权限
--roles
枚举数据库管理系统用户的角色
--dbs
枚举出所有的数据库
--tables
枚举出所有数据库中所有的表
--columns
枚举出所有数据库表中的列名
--dump
下载数据库中的表项
--dump-all
下载所有的数据库表中的条目
--search
搜索列,表和/或数据库名称
-D
指定要进行枚举的指定数据库名
-T
指定要进行枚举的指定数据库表
-C
指定要进行枚举的数据库列
-U
用来进行枚举的数据库用户
--exclude-sysdbs
枚举表时排除系统数据库
--sql-query=
指定要执行的SQL语句
--sql-shell
提示交互式SQL的shell
7、SQLMAP的操作系统访问参数
参数
作用
--os-cmd=
指定需要执行操作系统命令
--os-shell
交互式的操作系统的shell
--priv-esc
数据库进程用户权限提升
--file-read=’’
访问操作系统内的文件
--file-write=’’
编辑操作系统内的文件
8、SQLMAP的一般使用参数
参数
作用
--update
更新SQLMAP
--batch
自动选择yes
--output-dir=
自定义输出目录路径
9、SQLMAP的其他参数
参数
作用
--update
更新SQLMAP
--batch
自动选择yes
--output-dir=
自定义输出目录路径
--smart
启发式判断
SQLMAP扫描漏洞
10、SQLMAP的基础使用
使用SQLMAP判断是否存在SQL注入
我们靶场存在的SQL注入注入点为
http://192.168.31.41/control/sqlinject/manifest_error.php?id=1,使用的命令如下所示:
sqlmap.py -u ”http://192.168.31.41/control/sqlinject/manifest_error.php?id=1”
注:-u参数用于指定URL来进行判断是否存在SQL注入漏洞,是必须使用的参数。
批量扫描注入点
如果我们需要批量扫描可能存在注入点的URL的时候,可以将URL以一行一个的形式保存在TXT文本中然后用SQLMAP进行扫描。
注:在使用的时候可以右键点击文件查看属性看一看所在的位置,笔者这里是C:UsersAdministratorDesktop
sqlmap.py -m C:UsersAdministratorDesktop11.txt
应对多个参数判断是否存在sql注入漏洞
可能会出现一种情况我们的注入点后面会存在二个参数,我们执行后会出现很多提示,这个时候只需要使用-p参数指定参数即可,或者一直按回车使用sqlmap自动的选项即可。
读取BurpSuite的日志,来判断是否存在注入
在使用此参数前,需要打开BurpSuite的日志记录选项,打开步骤:Project options>Misc>Logging>Proxy勾选Requests>选择保存位置,Burp Suite的Proxy模块日志中包含了完整的HTTP请求,这样我们就可以不用设置像Cookie以及其他的参数,
注:在使用的时候可以右键点击文件查看属性看一看所在的位置,笔者这里是C:UsersAdministratorDesktop
使用的命令如下:
sqlmap.py -l C:UsersAdministratorDesktop1.log
如果你想知道当前的数据库的名称可以使用--current-db这个参数去枚举出来:
sqlmap.py -u"http://192.168.1.7/control/sqlinject/manifest_error.php?id=1"--current-db
如果你想知道当前数据库的用户是什么可以使用--current-user这个参数检测出数据库当前用户的用户名:
sqlmap.py -u"http://192.168.1.7/control/sqlinject/manifest_error.php?id=1" --current-user
在如今的渗透测试环节里,还都是属于一种“模糊测试”的状态,我们前阶段不可能知道目标的数据库系统内那个数据库才是我们的主要目标,如果发现了注入点我们可以使用—dbs这个参数去枚举出所有的数据库,从而确定我们下一步的目标:
sqlmap.py -u"http://192.168.1.7/control/sqlinject/manifest_error.php?id=1" –dbs
注:因为是枚举所以速度会有点慢,如上图所示我们已经枚举出来6个数据库。
如果你想要知道所有的数据库用户名称可以使用—users这个参数来举出所有数据库用户:qlmap.py -u"http://192.168.1.7/control/sqlinject/manifest_error.php?id=1" --users
如果我们想获取到数据库用户的密码则可以使用--passwords 这个参数去枚举出数据库所有用户的密码,虽然获取的仅仅是密码哈希值并不是明文的密码,但sqlmap会提示你是否去进行破解:
sqlmap.py -u"http://192.168.1.7/control/sqlinject/manifest_error.php?id=1" --passwords
注:如上图所示sqlmap提示我们do you want to perform a dictionary-based attack against retrieved password hashes?是否对获取到的密码哈希进行基于字典的破解,那当然是是(y)
你也可以直接回车执行、接着又问我们what dictionary do you want to use?使用哪个字典呢,我们回车使用sqlmap自带的字典、紧接着sqlmap又再次询问我们do you want to use common password suffixes?是否试一试常用的密码呢?我们回车继续执行,从结果来看root的密码为’root’是一个弱密码。
如果你想知道数据库中有哪些表可以使用—tables这个参数去枚举出所有数据库中所有的表
sqlmap.py -u"http://192.168.1.7/control/sqlinject/manifest_error.php?id=1" --tables
如果你想要知道数据库中有哪些列可以使用—columns参数枚举出所有数据库表中的列名:
sqlmap.py -u"http://192.168.1.7/control/sqlinject/manifest_error.php?id=1" --columns
Webug靶场显错注入关卡实例剖析:
我们确定存在注入后,想在库中寻找我们需要的东西,例如账号密码、flag等信息,首先我们要使用--dbs参数枚举出所有的数据库,在分辨出哪个数据库可以获取出我们需要的信息,枚举出所有的数据库的命令如下。
sqlmap.py -u"http://192.168.0.107/control/sqlinject/manifest_error.php?id=1" –dbs
在查询到所有的数据库后,猜测flag值可能在名为webug的数据库中我们使用-D参数指定sqlmap去枚举数据库中的表名。
sqlmap.py -u"http://192.168.0.107/control/sqlinject/manifest_error.php?id=1" -D webug --tables
注:我们从结果中可以看到已经枚举出的表,例如我猜测webug的MySQL注入题的flag是在flag这个表内我们就可以去试试了。
我们使用-T去指定我们想要枚举的列的名称,例如名字为flag的列,--columns的作用是显示所有的列。
sqlmap.py -u"http://192.168.0.107/control/sqlinject/manifest_error.php?id=1" -D webug -T flag --columns
在枚举出列名后我们可以里面的具体信息,使用-C和--dump参数:
sqlmap.py -u"http://192.168.0.107/control/sqlinject/manifest_error.php?id=1" -D webug -T flag -C flag –dump
得到flag值:dfafdasfafdsadfa
11、SQLMAP的性能优化
使用--predict-output参数提高检测效率
这个参数主要是根据返回结果与sqlmap自带的一个表(/sqlmap/common-outputs.txt)里面的内容进行比对,缩小范围并使用不同的payloads进行更有针对性的检测,从而提高效率,这其中对比的信息包括Banners、User、Passwords、Privileges、Roles、Databases、Tables、Columns,从下图来看Banners包括了数据库的名称和版本信息。
由于sqlmap并不知道到目标的数据库是什么版本,它会进行大量的请求,在很可能引起管理员的注意以外还影响了我们的速度,我们使用--predict-output和--vv参数来对存在sql注入的页面进行渗透测试去演示这一参数的使用。
sqlmap.py -u"http://192.168.0.109/control/sqlinject/manifest_error.php?id=1" --predict-output -vvv
在这里可以看到sqlmap提示我们:GET parameter 'id' appears to be 'MySQL >= 5.0.12 AND time-based blind' injectable这个GET型参数’id’似乎是基于时间的可注射的盲注以及MySQL的版本是 >= 5.0.12的,it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? 后端的数据库操作系统看起来是”Mysql”,你想跳过特定与其他数据库操作系统的测试负荷(Payloads)吗?等等,总的来说这是一个很好的提高效率和速度的参数,但此参数和我们后面要介绍的--threads参数不兼容。
使用--batch参数自动选择yes。
上面我们介绍了使用--predict-output参数来提高检测效率,不单单是这个在前面读者也有看到sqlmap会经常询问我们是否确定Y或者不n,如果你觉得烦或者多开了sqlmap进行使用的时候--batch参数不失为一个好选择,它可以帮助我们自动选择Y去继续,以上面使用--predict-output参数为例,使用--batch参数的方法也是在给定的URL后面添加这个参数:
sqlmap.py -u"http://192.168.0.109/control/sqlinject/manifest_error.php?id=1" --predict-output -vvv --batch
使用--keep-alive参数启用http(s)长连接
在正常访问基于HTTP协议的网页时,页面上的每一个组成元素都需要我们使用一个单独的TCP连接去获取,而我们都知道米格==每个TCP连接都要经过三次握手,这样会出现在建立众多连接的时候网络流量很大,所消耗的时间也会很大,我们请求了那么多流量却得不到想要的结果,这是显而易见的浪费,由此出现了HTTP长连接,这个长连接指的是我们在不断开连接的情况下传输完所有的页面元素,这样就会省掉时间提高了效率,在这里不建议在多开sqlmap的时候使用--keep-alive参数这样对服务器的开销还是十分的大的,此参数不兼容—proxy参数,因为大多数代理不支持长连接。
例:sqlmap.py -u"http://192.168.0.109/control/sqlinject/manifest_error.php?id=1"--keep-alive
使用--null-connection参数在盲注时通过响应判断真假
这个参数主要适用于盲注类型的sql注入,盲注类型的注入是基于判断真假去做大量的请求来获取信息,例如服务器再给我们返回真的情况下是100个笑脸的页面,返回假的时候是200个笑脸的页面,往返很多很多次的发送请求去猜测和获取信息很容易引起服务器管理员的察觉,在使用了--null-connection的情况下sqlmap只会通过响应包的head(头部)内的长度去判断而不是通过响应包的主体(body)的内容去判断从而也省下了网络带宽,因为sqlmap只要求服务器返回请求包的头部的内容,此参数不兼容--text-only参数,因为--text-only这个参数指的就是仅基于在文本内容比较网页也就是body部分。
例:sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 --text-only
使用-o参数
使用这个参数就代表着同时使用--predict-output、--keep-alive、--null-connection这三个参数。
例:sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 -o
使用--threads参数设置并发线程
一个执行中的程序至少有一个线程,同样做一件事情,我们拥有的线程越多处理的速度就越快,sqlmap最大支持10个线程,这个参数和之前提到的--predict-output参数不兼容。
例:sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 --threads 10
使用--timeout设置等待超时的时间。
在对多个目标进行sql注入渗透测试的时候,往往可能因为一个卡住导致sqlmap一直在等待回应导致卡住不继续,这种情况就可以使用--timeout参数去设置等待超时的时间,默认为30秒。
例:sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 –timeout=35
使用--retries参数设置重试的次数。
在有些情况下,我们所发出去的请求因为种种原因得不到回复,我们在使用sqlmap的时候建议加上这个参数。
12、SQLMAP的进阶用法
在这一小节我们介绍8个SQLMAP的进阶使用的参数
使用--is-dba参数检测当前用户是否是数据库管理员
在发现了注入点后我们下一步可能是扩大战果,直至获取操作系统最高权限,这个时候数据库当前用户是否是数据库管理员就十分的重要了,此时就可以使用这个参数了。
使用--roles参数枚举出数据库中所有的管理员
在准备扩大战果的过程中可能我们当前数据库的用户并不是管理员账户,基于此情况我们就可以使用--roles参数来继续发现其他管理员账户。
使用--delay参数设置发出每次请求间的延迟
在某些情况下我们是需要控制住我们请求的速度的,例如防止被安全产品拦截、防止被管理员发现,如果需要隐秘那么就可以使用这个参数,这个参数的单位是秒。
例:设置每次请求间的延迟为1秒
sqlmap.py -u"http://192.168.0.109/control/sqlinject/manifest_error.php?id=1" --delay
使用--os-cmd= 参数设置需要执行的操作系统命令
如果你需要执行cmd命令尝试创建一个一句话木马到目标的网站文件夹下,或者查看目标的操作系统上存在哪些文件等等那么你就可以试试这个参数。
例:查看目标操作系统的版本(在操作系统是windows的情况下)
sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 --os-cmd=ver
使用--os-shell 参数获得一个交互式的操作系统的shell
使用这个参数我们就不用一次又一次的使用--os-cmd这个参数了,我们会获得到目标操纵系统的shell,也就是我们常见的cmd来做我们想做的事情。
例:
sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 --os-cmd
使用--sql-query参数设置需要执行的SQL语句
这个参数和前面所提到的--os-cmd参数使用方法不一样,直接附带上这个参数sqlmap会给出一个数据库命令行操作的界面让我们输入需要执行的SQL语句来执行。
例: sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 --os-cmd
使用--file-read=’/xxxx/x.txt’ 参数访问操作系统内的文件
这个参数可以让我们访问目标网站操作系统内的文件
例:sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 --file-read=’ C:Users123Desktop1.txt’
使用--file-write=’/xxxx/x.txt’参数编辑操作系统内的文件
这个参数可以让我们编辑目标网站操作系统内的文件
例:sqlmap.py -u http://192.168.0.109/control/sqlinject/manifest_error.php?id=1 --file-write =’ C:Users123Desktop1.txt’
sqlmap自动扫描注入点_SQLMAP使用指南[学员作品]相关推荐
- sqlmap自动扫描注入点_SQLmap JSON 格式的数据注入
现在越来越多的网站开始使用 RESTFUL 框架,数据传输使用 JSON,那么这种情况下我们如何使用 SQLmap 进行自动化注入呢? 能使用 * 指定注入点吗? 先说结论:对于 JSON 数据的 S ...
- SQLMap 从入门到入狱详细指南
SQLMap 是一个开源的渗透测试工具,可以用来进行自动化检测,利用 SQL 注入漏洞,获取数据库服务器的权限.它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存 ...
- 北大青鸟广州天河中心学员作品
北大青鸟 广州天河中心学员作品 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...
- sqlmap自动扫描注入点_同天上降魔主,真是人间太岁神——SQLMAP 高级教程
昨天对一个网站做渗透测试,本来想自己写脚本来sql注入的,但是觉得麻烦还是用了sqlmap 这一用发现sqlmap好多好玩的地方,以前用sqlmap 也就 -r -u ,觉得这样就够用了,直到昨天才发 ...
- SQL注入分类,一看你就明白了。SQL注入点/SQL注入类型/SQL注入有几种/SQL注入点分类
「作者主页」:士别三日wyx 「作者简介」:CSDN top200.阿里云博客专家.华为云享专家.网络安全领域优质创作者 SQL注入分类 一.数值型注入 二.字符型注入 1)单引号字符型注入 2)双引 ...
- 【干货】如何判断 Sql 注入点
注:本文在Jewel591 文章的基础上加以实例说明而成 原文链接 1.判断是否存在 Sql 注入漏洞 2.判断 Sql 注入漏洞的类型 2.1 数字型判断: 2.2 字符型判断: 3.实例说明 le ...
- SQL注入(SQL注入(SQLi)攻击)攻击-注入点
SQL注入被称为漏洞之王 , 是最常用的漏洞之一 , 其中PHP在这方面的贡献最大 SQL注入原理 用户在参数中插入恶意的SQL语句 , 破坏原有的SQL语法结构 , 从而执行攻击者的操作 SQL注入 ...
- IOC容器特性注入第六篇:利用MVC注入点,把容器启动
这里是利用MVC三个注入点中的:IDependencyResolver 进行注入 在全局类中Global.asax代码如下: #region MVC InjectSystem.Web.Mvc.Depe ...
- 【转载】Mysql注入点在limit关键字后面的利用方法
描写sql注入利用方法的文章数不胜数,本文将描述一种比较特殊的场景. 细节 在一次测试中,我碰到了一个sql注入的问题,在网上没有搜到解决办法,当时的注入点是在limit关键字后面,数据库是MySQL ...
- php的注入点,Php注入点构造代码
把下面保存成 Test.asp 复制代码 代码如下: $mysql_server_name = "localhost"; $mysql_username = "ro ...
最新文章
- jquery 实现Json节点的增删改查
- 回溯 皇后 算法笔记_算法笔记_04_回溯
- 编程中经常碰到且觉得难的事是什么?
- 成功解决PermissionError: [WinError 5] 拒绝访问 \lib\\site-packages\\h5py\\_errors.cp38-win_amd64.pyd‘
- 我----大抵是个废人
- c语言基础学python_D11——C语言基础学PYTHON
- 信息系统管理19年真题选择题
- 计算机科普小知识——U盘格式化
- JavaSE——类集(下)(Set、Comparable、Collections、Comparator、Map)
- 力改变物体形状举例_对旋转问题的思考-在离心力确定的情况下,物体的旋转情况如何通过宇宙中的相对运动情况和质量分布确定?...
- 2010年6月计算机组织与结构,2010 计算机组织与体系结构课程设计.doc
- JAXB:Java对象序和XML互相转化的利器
- 从零开始学ios开发(十四):Navigation Controllers and Table Views(上)
- extended-insert对mysqldump及导入性能的影响
- python更换镜像源_更换Anaconda 和 Pip 镜像源的方法
- 【C++基础之十】友元函数和友元类
- 1688图片批量采集技巧
- 【C++学习笔记】基本内置类型和变量
- 微软官方的精简版Windows 7——Windows Thin PC
- xjoi 1542 玩玩拉格朗日四平方和定理
热门文章
- byte[] 转化为 string 转化为汉字和字母
- Atitit.软件与编程语言中的锁机制原理attilax总结 1. 用途 (Db,业务数据加锁,并发操作加锁。	2 2. 锁得类型	3 2.1. 排它锁 “互斥锁 共享锁 乐观锁与悲观锁 乐观锁:
- Atitit Immutability 和final的优点
- Atitit ocr识别原理 与概论 attilax总结
- Atitit 热更新资源管理器 自动更新管理器 功能设计
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- paip.数据库发邮件通知配置
- paip.命令行执行js
- 金融用户画像的数据合规法律问题
- (转)诺亚财富巨亏5亿,“嗜血模式”走向末路?