sqlmap基础知识(二)

一、sqlmap的基本使用

读取文件/上传文件

支持的数据库类型

仅对MySQL、MSSQL、PostgreSQL有效,可以进行文件操作

前提条件

必须是高权限用户

mysql禁用secure_file_priv=' '

php禁用GPC

有目录读写文件权限

sqlmap -u url --is-dba
# 查看是否为dba权限,必须为root权限1.读取文件案例:
sqlmap -u "http://www.php001.com/index.php?id=1" --file-read "D:/n1.txt"2.写入文件案例:
sqlmap -u "http://www.php001.com/index.php?id=1" --file-write=D:/shell.php --file-dest=C:/www/shell.php
# 上传文件(本地木马路径:目标网站目录)

获取shell

注入攻击的最终目的就是为了获取目标主机的控制器,也就是为了后去目标主机的shell

sqlmap 能够在数据库所在的服务器的操作系统上运行任意命令

格式:

        sqlmap -u  "URL" --os-shell                获取系统交互

        sqlmap -u "URL" --os-cmd=命令        直接执行系统命令

注意:

  • 仅对MySQL、MSSQL、PostgreSQL有效

前提条件:

  • 数据库用户有读写权限
  • 有目录读写文件权限

执行命令的原理

  • 原理就是在执行--os-shell 或 os-cmd=xxx的时候,会上传一个upload木马后,再上传一个cmd shell
  • 当 --os-shell退出后,会调用后门脚本删除上传文件后,进行自删除
  • 在MySQL和PostgreSQL中,sqlmap可以上传一个包含两个用户自定义函数,分别为sys_exec()和sys_eval()的共享库(二进制文件),然后在数据库中创建两个对应函数,并调用对应函数执行特定的命令,并允许用户选择是否打印出相关命令执行的结果
  • 在Microsoft SQL Server 中,sqlmap会利用xp_cmdshell存储过程:如果该存储过程被关闭了(Microsoft SQL Server 的2005及以上版本默认关闭),当用户请求标准输出,sqlmap将使用任何可用的SQL注入技术(盲注、带内注入、报错型注入)去获取对应结果。相反,如果无需标准输出对应结果,sqlmap则会使用堆叠查询注入(Stacked queries)技术执行相关的命令。
  • 如果堆叠查询没有被web应用识别出来,并且DBMS为MySQL,假如后端DBMS和Web服务器在同一台服务器上,则仍可以利用SELECT语句中的INTO OUTFILE,在根目录可写目录中写shell。

UDF提权

可以通过编译MySQL或PostgreSQL共享库(在Windows上为DLL,在Linux、Unix上为共享对象(shared object)) 来注入自己的用户自定义函数(UDFs),然后将本地存储共享库的目录路径提供给 sqlmap。sqlmap 会根据你的选择决定下一步是向数据库服务器文件系统上传共享库,还是创建用户自定义函数。当你完成注入 UDFs 的使用后,sqlmap 还可以将它们从数据库中删除使用选项 --udf-inject 并按照说明进行操作即可;如果需要,也可以使用--shared-lib 选项通过命令行指定共享库的本地文件系统路径,否则 sqlmap 会在运行时向你询问路径此功能仅对 MySQL 或 PostgreSQL有用
有状态带外连接:Meterpreter & friends
开关和选项:--os-pwn,--os-smbrelay,--os-bof,--priv-esc,--msf-path 和 --tmp-path
当后端 DBMS 为 MySQL,PostgreSQL 或 Microsoft SQL Server 时,并且当前会话用户拥有对数据
库特定功能和架构缺陷的利用权限时,sqlmap 能够在攻击者机器与数据库服务器之间建立起有状态带
外 TCP 连接。根据用户的选择,该连接可以是交互式命令行、Meterpreter 会话、或者图形用户界面
(VNC)会话
sqlmap 依赖 Metasploit 创建 shellcode,并实现了四种不同的技术在数据库服务器上执行它。这些
技术分别是:
通过 sqlmap 的用户自定义函数 sys_bineval() 在数据库内存中执行 Metasploit shellcode。MySQL
和 PostgreSQL 支持该技术,通过开关 --os-pwn 启用
通过 sqlmap 的用户自定义函数 sys_exec() 向 MySQL 和 PostgreSQL 上传一个 Metasploit 独立
payload 传输器并执行,对于 Microsoft SQL Server 则是使用 xp_cmdshell() 函数,通过开关 --os
pwn 启用
通过进行从数据库服务器到攻击者机器(由 Metasploit smb_relay 服务监听)之间的 UNC 路径请求
的 SMB 反射攻击(MS08-068)来执行 Metasploit shellcode。当 sqlmap 运行于具有高权限
(uid=0)的 Linux/Unix 上,且目标 DBMS 以 Windows 管理员身份运行时支持该技术,通过开关 --
os-smbrelay 启用
通过利用 Microsoft SQL Server 2000 和 2005 的 sp_replwritetovarbin 存储过程堆缓冲区溢出
(MS09-004)在数据库内存中执行 Metasploit shellcode。sqlmap 使用自己的 exploit,自动绕过
DEP 内存保护来触发漏洞,但它依赖 Metasploit 生成 shellcode,以便在成功利用时执行,通过开关
--os-bof 启用

访问 Windows 注册表

条件:

DBMS (Database Management System,数据库管理系统) 是MySQL,PostgreSQL 或 Microsoft SQL Server
web 应用程序支持堆叠查询
会话用户必须具备相应的访问权限

--reg-read        读取Windows注册表键值

--reg-add         写入Windows注册表键值

--reg-del          删除Windows注册表项

--reg-key,  --reg-value, --reg-data和--reg-type        #注册表辅助选项

常规选项

  • -s   从已存储(.sqlite)文件读取会话
    • #qlmap 会在专用的输出目录中自动为每一个目标分别建立持久会话 SQLite 文件,该文件会存
      储用于恢复会话的所有数据。如果用户需要指定会话文件的具体存储位置(例如:将所有目标的
      会话数据存储在同一个位置),则可以使用这个选项
  • -t   记录HTTP(s)访问信息到文本文件,这个选项需要一个指定文本文件地址的参数,用于吸入sqlmap产生的所有HTTP(s)流量信息,包括HTTP(s)请求和HTTP(s)响应
  • --batch   以非交互式模式运行,当sqlmap需要用户输入信息时,都将会以默认参数运行
  • --update   更新sqlmap
  • --flush-session    清空会话文件
输出信息的详细程度
-v 数字
# 共7个级别(0~6),默认为1
# 可以用-vv 代替 -v2,推荐使用
0: 只输出 Python 出错回溯信息,错误和关键信息
1: 增加输出普通信息和警告信息
2: 增加输出调试信息
3: 增加输出已注入的payload
4: 增加输出HTTP请求
5: 增加输出HTTP响应头
6: 增加输出HTTP响应内容

对目标进行检测的时候相关参数

  1. -u   URL
  2. -r    # 从文件中读取HTTP请求
  3. -d   直连数据库,格式"mysql://root:root@192.168.0.8:3306/testdb"
  4. -l    # 从Burp代理日志文件中解析目标地址
  5. -m  # 从文本文件中批量获取目标
  6. -g   # 使用Google dork 结果作为目标地址 python sqlmap.py -g "inurl:" .php?id=1""
  7. -c   # 从INI配置文件中读取选项
  8. --purge   # 清除历史缓存
  9. --flush-session   #清除上次扫描的缓存

指定连接目标地址的方式

  1. --method=METHOD        #强制使用提供的HTTP方法(例如:PUT)
  2. --data=DATA                    #使用POST发送数据串;--data="id=1&user=admin"
  3. --param-del=";"                #使用参数分隔符,--data="id=1;user=admin"
  4. --cookie=COOKIE           #指定HTTP Cookie,--cookie "id=11" --level 2
  5. --drop-set-cookie             #忽略HTTP响应中的Set-Cookie参数
  6. --user-agent=AGENT      #指定 HTTP User-Agent
  7. --random-agent               #使用随机的HTTP User-Agent,随机从./txt/user-agents.txt 选一个,不是每次请求换一个
  8. --host                               #手动设置HTTP Host请求头值,默认情况下,HTTP Host请求头从提供的目标URL中解析
  9. --referer=REFERER        #指定HTTP Referer,默认情况下不会在HTTP请求中发送HTTP Referer请求头
  10. -H HEADER                    #设置额外带的HTTP头参数(例如:"X-Forwarded-For:127.0.0.1")
  11. --headers=HEADERS     #设置额外的HTTP头参数,必须以换行符分割(例如:"Accept-Language:fr\nETag:123")
  12. --auth-type,--auth-cred #选项用于指定后端web服务器实现的HTTP协议认证和所有向目标程序发起HTTP请求的有效凭据,支持的三种HTTP协议认证机制是:Basic、Digest、NTLM,认证凭据的语法是username:password。一个符合语法的例子:$ python sqlmap.py -u "http://192.168.124.121/sqlmap/mysql/basic/get_int.php?id\=1" --auth-type Basic --auth-cred "testuser:testpass"
  13. --auth-file                          #HTTP协议私钥认证
  14. --ignore-code                    #忽略(有问题)HTTP错误码
  15. --proxy,--proxy-cred,--proxy-file 和 --ignore-proxy #HTTP(s)代理,--proxy 并提供HTTP(S)代理地址使HTTP(S)请求经过该代理到达目标URL。设置HTTP(S) 代理的语法是http://url:post。如果HTTP(S)代理需要身份验证,则可以对选项 --proxy-cred 使用username:password 格式添加对应的凭证可以使用选项 --proxy-file 并指定包含批量代理的文件,想要使用sqlmap 对本地局域网目标进行测试时应该使用开关--ignore-proxy来绕过系统级的HTTP(S)代理服务
  16. --delay=10                         #设置每个HTTP请求的延迟秒数
  17. --safe-freq=SAFE              #每访问两次给定的合法URL才发送一次测试请求
  18. --csrf-token 和--csrf-url      #绕过反CSRF防护
  19. -force-ssl                           #支持https的SQL注入只需加入参数-force-ssl告诉sqlmap这是http服务即可
  20. --identify-waf                     #检测是否有WAF/IPS/IDS,这个功能以失效
  21. --eval                                 #在每个请求期间运行自定义的Python代码

指定注入参数

提供自定义注入payloads 和篡改参数的脚本

  1. -p TESTPARAMETER   #指定需要测试的参数
  2. --skip=SKIP                    #指定要跳过的参数
  3. --dbms=DBMS                #指定DBMS类型(例如:MySQL)
  4. --os=OS                          #指定DBMS服务器的操作系统类型
  5. --prefix=PREFIX             #注入payload 的前缀字符串
  6. --suffix=SUFFIX              #注入payload 的后缀字符串
  7. --tamper=TAMPER         #用给定脚本修改注入数据
  8. --batch                            #自动跳过选择项,按默认选项注入

指定检测级别

sqlmap 使用的 payloads 直接从文本文件 xml/pauloads.xml 中载入

根据该文件顶部的相关指导说明进行设置,如果sqlmap漏多了特定的注入

你可以选择自己修改指定的payload 用于检测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch | torch.contiguous()方法

torch.contiguous()方法语义上是“连续的”,经常与torch.permute()、torch.transpose()、torch.view()方法一起使用,要理解这样使用的缘由,得从pytorch多维数组的低层存储开始说起: touch.view()方法对张量改变“形状”其实并没有…

Android WindowManager工具类

WindowManager提供三个方法&#xff1a; addView()、updateLayout()、removeView()。分别对应是添加view、更新view、移除view。 <!--悬浮窗权限--><uses-permission android:name"android.permission.SYSTEM_ALERT_WINDOW"/> WindowManagerUtil pack…

Linux-3 yum和vim

目录 本节目标&#xff1a; Linux 软件包管理器 yum 什么是软件包 1.yum是什么&#xff1f;软件包&#xff1f; 2.Linux(centos)的生态 3.yum的相关操作 我怎么知道我应该安装什么软件&#xff1f; 4.yum的本地配置 关于 rzsz 查看软件包 Linux编辑器-vim使用 1.v…

【Go】goroutine并发常见的变量覆盖案例

越过山丘 遇见六十岁的我 拄着一根白手杖 在听鸟儿歌唱 我问他幸福与否 他笑着摆了摆手 在他身边围绕着一群 当年流放归来的朋友 他说你不必挽留 爱是一个人的等候 等到房顶开出了花 这里就是天下 总有人幸福白头 总有人哭着分手 无论相遇还是不相遇 都是献给岁月的序曲 …

Github 2024-03-30 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目2C项目1Jupyter Notebook项目1Go项目1非开发语言项目1Mojo项目1开源 iOS 应用合作列表 创建周期:3351 天协议类型:…

ubuntu18.04安装qt

ubuntu18.04安装qt 1、下载文件 比如我下载的是5.13.0版本 下载链接 2、安装 wget https://download.qt.io/archive/qt/5.13/5.13.0/qt-opensource-linux-x64-5.13.0.runsudo chmod x qt-opensource-linux-x64-5.13.0.runsudo ./qt-opensource-linux-x64-5.13.0.run参考文…

数学分析复习:等价量的概念

本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 等价量 定义&#xff1a;无穷小量、无穷大量 若 lim ⁡ x → x 0 f ( x ) 0 \lim\limits_{x\to x_0}f(x)0 x→x0​lim​f(x)0&#xff0c;则称当 x → x 0 x\to x_0 x→x0​ 时&#xff0c; f ( x ) f(x) f(x) 是无…

开源知识库平台Raneto--使用Docker部署Raneto

文章目录 一、Raneto介绍1.1 Raneto简介1.2 知识库介绍 二、阿里云环境2.1 环境规划2.2 部署介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Raneto镜像五、部署Raneto知识库平台5.1 创建挂载目录5.2 编辑config.js文件5.…

MySQL InnoDB 之 多版本并发控制(MVCC)

多版本并发控制&#xff08;MVCC&#xff0c;Multi-Version Concurrency Control&#xff09;是数据库管理系统中用于提供高并发性和在事务处理中实现隔离级别的一种技术。MVCC 允许系统在不完全锁定数据库资源的情况下&#xff0c;处理多个并发事务&#xff0c;从而提高了数据…

Datacom HCIP笔记-OSPF协议 之二

链路&#xff1a;路由器之间的相连的链路 状态&#xff1a;链路上的参数在某一时刻的状态 单边邻居 one way&#xff1f; 收到对端发来的hello报文&#xff0c;其中没有自己的router id LSA类型&#xff1a; 1类LSA&#xff1a;描述路由器自身加入到ospf进程中的直连链路的状态…

大数据-TXT文本重复行计数工具

支持系统类型&#xff1a;Windows 64位系统 Linux 64位系统 苹果64位系统 硬盘要求&#xff1a;固态硬盘&#xff08;有效剩余磁盘空间大小最低3倍于大数据文件的大小&#xff09; 内存要求&#xff1a;最低8G&#xff08;例如只有几百G数据&#xff09; 如果处理TB级大数据文…

STM32 软件I2C方式读取AS5600磁编码器获取角度例程

STM32 软件I2C方式读取AS5600磁编码器获取角度例程 &#x1f516;本例程使用正点原子例程作为工程模板创建。 &#x1f4d8; 硬件电路部分 &#x1f33f;原理图部分&#xff1a; &#x1f33f;PCB布线和电路 ✨注意事项&#xff1a;有些硬件需要I2C上拉&#xff0c;否则检…

校园局域网钓鱼实例

Hello &#xff01; 我是"我是小恒不会java" 本文仅作为针对普通同学眼中的网络安全&#xff0c;设计的钓鱼案例也是怎么简陋怎么来 注&#xff1a;本文不会外传代码&#xff0c;后端已停止使用&#xff0c;仅作为学习使用 基本原理 内网主机扫描DNS劫持前端模拟后端…

HTTP和tcp的区别

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和TCP&#xff08;Transmission Control Protocol&#xff09;是互联网通信中的两个不同层次的协议&#xff0c;它们之间有着以下区别&#xff1a; 层次不同&#xff1a; TCP是传输层协议&#xff0c;负责在网络上可靠…

【2023】kafka入门学习与使用(kafka-2)

目录&#x1f4bb; 一、基本介绍1、产生背景2、 消息队列介绍2.1、消息队列的本质作用2.2、消息队列的使用场景2.3、消息队列的两种模式2.4、消息队列选型&#xff1a; 二、kafka组件1、核心组件概念2、架构3、基本使用3.1、消费消息3.2、单播和多播消息的实现 4、主题和分区4.…

大模型与数据分析:探索Text-to-SQL

当今大模型如此火热&#xff0c;作为一名数据同学&#xff0c;持续在关注LLM是如何应用在数据分析中的&#xff0c;也关注到很多公司推出了AI数智助手的产品&#xff0c;比如火山引擎数智平台VeDI—AI助手、 Kyligence Copilot AI数智助理、ThoughtSpot等&#xff0c;通过接入人…

Node.js的Event Loop:六个阶段详解

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

括号生成(回溯+剪枝)

22. 括号生成 - 力扣&#xff08;LeetCode&#xff09; 题目描述 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 样例输入 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))&q…

五年前端的面试之旅

哈喽我是树酱&#xff0c;最近整理了下前端面试相关的知识题库&#xff0c;借此分享给各位小伙伴&#xff0c;帮助小伙伴早日拿到钟意的offer&#xff01; 前言 最近就业市场不景气&#xff0c;跟大环境较差也有关&#xff0c;确实给我们也会带来一定的挑战。在招聘网站投简历的…

数据仓库的发展历程

数据仓库的概念可以追溯到20世纪60年代,但真正形成理论并被企业广泛应用还需要一个较长的发展过程。大致可以分为以下几个阶段: 决策支持系统(DSS)时期(1960s-1970s) 这一时期,随着管理信息系统(MIS)和电子计算机的兴起,企业开始尝试构建面向决策的数据处理系统。最初的决策支…