目录
(二)SQL Server 中启用 XP_cmd shell 示例
一、视频核心内容总结
(一)SQLmap 功能概述
SQLmap 是用于 SQL 注入的工具,不仅能查询数据库数据,还可通过 --os-shell
指令获取目标服务器权限。
(二)不同数据库下的原理
- MySQL
- 当数据库为 MySQL 且用户有权限执行特定函数时,SQLmap 会上传一个包含用户自定义函数(如
SYS_EXCEC
、SYS_EVAL
)的库文件,通过这些函数可以执行系统命令。
- 当数据库为 MySQL 且用户有权限执行特定函数时,SQLmap 会上传一个包含用户自定义函数(如
- SQL Server
- 在 SQL Server 中,SQLmap 会使用
XP_cmd shell
存储过程来执行系统命令。在 SQL Server 2005 及以上版本默认禁用该存储过程,但 SQLmap 会重新启用或自动创建(若被删除)。
- 在 SQL Server 中,SQLmap 会使用
(三)获取 shell 的必要条件
- 需要知道网站的绝对路径。
- 当前用户要拥有网站的写入权限。
- 在 MySQL 中,有一个参数规定可写入的目录,当参数为空或为指定路径(且是所需路径)时可进行写入。若参数为空可任意写入。
(四)普通注入利用 --os-shell
执行远程命令
普通的注入使用 --os-shell
时,主要是通过上传一个 SQLmap 的木马,然后通过木马来执行远程命令。
二、扩展内容及代码示例
(一)MySQL 中利用函数执行命令示例
以下是一个简单的在 MySQL 中假设通过 SYS_EVAL
函数执行系统命令查看当前目录文件的示例(仅为示例,实际情况复杂且需满足相应权限等条件)。
SELECT SYS_EVAL('ls -l');
在 SQLmap 实际操作中,它会通过一些技术手段上传包含这些函数的库文件来实现类似操作,但具体的上传和调用细节涉及到复杂的数据库交互和权限利用过程。
(二)SQL Server 中启用 XP_cmd shell
示例
在 SQL Server 中,如果 XP_cmd shell
被禁用后 SQLmap 尝试重新启用或创建,以下是开启该存储过程的一些基础语法示例(实际环境中需谨慎操作且要满足权限等要求):
-- 启用 XP_cmd shell(如果被禁用)
EXEC sp_configure'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
SQLmap 在利用这个存储过程执行命令时,会发送相关的数据库指令来操作,比如可以执行 dir
命令查看目录内容等,但这都基于前期满足获取 shell 的必要条件以及 SQLmap 自身的功能逻辑。
(三)SQLmap 查找网站绝对路径相关操作及代码思路
在实际操作中,SQLmap 可能会尝试通过多种方式查找网站绝对路径。比如利用一些数据库的系统表或者信息函数。
- 在 MySQL 中可以尝试查询
information_schema
数据库中的相关表来获取一些路径信息:
SELECT table_schema,table_name,table_rows FROM information_schema.tables WHERE table_schema = 'database_name' AND table_name LIKE '%file%';
这个语句可以查找数据库中可能与文件路径相关的表信息。通过一系列类似的查询和分析,SQLmap 逐步推断出网站的绝对路径。
(四)检测写入权限的方法及可能代码
SQLmap 检测写入权限时,可能会尝试向一个已知的可写目录(如果能找到)写入一个测试文件来验证。
import os
test_file_path = "/test/dir/test.txt"
try:
with open(test_file_path, "w") as f:
f.write("test content")
os.remove(test_file_path)
print("Write permission verified.")
except Exception as e:
print(f"Error: {e}, write permission denied.")
这只是一个简单的 Python 示例,SQLmap 在实际中会结合数据库特性和服务器环境进行更复杂的权限检测操作。通过以上对视频内容的总结、扩展以及代码示例补充,可以让读者更全面深入地理解 SQLmap --os-shell
的原理及相关操作。