广告设计制作公司名字,北京seo管理,wordpress 数据库搜索功能,seo sem 外贸建站 网站建设 文化墙设计一、sqlmap的基本使用
读取文件/上传文件
支持的数据库类型 仅对MySQL、MSSQL、PostgreSQL有效#xff0c;可以进行文件操作 前提条件 必须是高权限用户 mysql禁用secure_file_priv php禁用GPC 有目录读写文件权限 sqlmap -u url --is-dba
# 查看是否为dba权限#xff0c;…一、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?id1 --file-read D:/n1.txt2.写入文件案例:
sqlmap -u http://www.php001.com/index.php?id1 --file-writeD:/shell.php --file-destC:/www/shell.php
# 上传文件(本地木马路径:目标网站目录)
获取shell 注入攻击的最终目的就是为了获取目标主机的控制器也就是为了后去目标主机的shell sqlmap 能够在数据库所在的服务器的操作系统上运行任意命令 格式 sqlmap -u URL --os-shell 获取系统交互 sqlmap -u URL --os-cmd命令 直接执行系统命令 注意 仅对MySQL、MSSQL、PostgreSQL有效 前提条件 数据库用户有读写权限有目录读写文件权限 执行命令的原理 原理就是在执行--os-shell 或 os-cmdxxx的时候会上传一个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 为 MySQLPostgreSQL 或 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 运行于具有高权限 uid0的 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响应内容
对目标进行检测的时候相关参数
-u URL-r # 从文件中读取HTTP请求-d 直连数据库格式mysql://root:root192.168.0.8:3306/testdb-l # 从Burp代理日志文件中解析目标地址-m # 从文本文件中批量获取目标-g # 使用Google dork 结果作为目标地址 python sqlmap.py -g inurl: .php?id1-c # 从INI配置文件中读取选项--purge # 清除历史缓存--flush-session #清除上次扫描的缓存
指定连接目标地址的方式
--methodMETHOD #强制使用提供的HTTP方法例如PUT--dataDATA #使用POST发送数据串--dataid1useradmin--param-del; #使用参数分隔符--dataid1;useradmin--cookieCOOKIE #指定HTTP Cookie--cookie id11 --level 2--drop-set-cookie #忽略HTTP响应中的Set-Cookie参数--user-agentAGENT #指定 HTTP User-Agent--random-agent #使用随机的HTTP User-Agent随机从./txt/user-agents.txt 选一个不是每次请求换一个--host #手动设置HTTP Host请求头值默认情况下HTTP Host请求头从提供的目标URL中解析--refererREFERER #指定HTTP Referer默认情况下不会在HTTP请求中发送HTTP Referer请求头-H HEADER #设置额外带的HTTP头参数例如:X-Forwarded-For:127.0.0.1--headersHEADERS #设置额外的HTTP头参数必须以换行符分割例如:Accept-Language:fr\nETag:123--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--auth-file #HTTP协议私钥认证--ignore-code #忽略有问题HTTP错误码--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)代理服务--delay10 #设置每个HTTP请求的延迟秒数--safe-freqSAFE #每访问两次给定的合法URL才发送一次测试请求--csrf-token 和--csrf-url #绕过反CSRF防护-force-ssl #支持https的SQL注入只需加入参数-force-ssl告诉sqlmap这是http服务即可--identify-waf #检测是否有WAF/IPS/IDS这个功能以失效--eval #在每个请求期间运行自定义的Python代码
指定注入参数 提供自定义注入payloads 和篡改参数的脚本 -p TESTPARAMETER #指定需要测试的参数--skipSKIP #指定要跳过的参数--dbmsDBMS #指定DBMS类型例如MySQL--osOS #指定DBMS服务器的操作系统类型--prefixPREFIX #注入payload 的前缀字符串--suffixSUFFIX #注入payload 的后缀字符串--tamperTAMPER #用给定脚本修改注入数据--batch #自动跳过选择项按默认选项注入
指定检测级别 sqlmap 使用的 payloads 直接从文本文件 xml/pauloads.xml 中载入 根据该文件顶部的相关指导说明进行设置如果sqlmap漏多了特定的注入 你可以选择自己修改指定的payload 用于检测