Sqlmap全参数讲解之第八篇

admin 2025年6月9日08:20:50评论15 views字数 3092阅读10分18秒阅读模式

免责声明

本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!

User-defined function injection:用户自定义函数注入

  • --udf-inject:用于注入用户自定义函数(UDF) 的高级参数,主要针对 MySQL 和 PostgreSQL 数据库,通过上传并调用自定义函数实现系统命令执行等高危操作(没做出来,关卡是堆叠注入,一直提示不存在堆叠注入)
    • 🔍UDF 注入目的:
      • 提权与命令执行:通过注入自定义函数(如 sys_eval),直接执行操作系统命令(如 whoami、文件读写),突破数据库权限限制
      • 绕过安全机制:在数据库用户具备写权限时,可绕过 AppArmor/SELinux 等安全策略(需临时关闭或配置例外)
    • 💡适用场景:
      • 获取系统 Shell(--os-shell 的前置步骤)
      • 读取敏感文件(如 /etc/passwd)
      • 数据库提权(如从普通用户提升至 DBA)
    • 技术依赖:
      • 数据库支持:仅限 MySQL 和 PostgreSQL(需支持堆叠查询)
      • 权限要求:
        • 数据库用户需具备 CREATE FUNCTION 权限(通过 --is-dba 验证)
        • 需可写入数据库安装目录下的 lib/plugin 路径(若目录不存在需手动创建)
      • 文件兼容性:UDF 文件需与数据库架构匹配(32/64位),否则注入失败(通过 mysql -V 确认版本)
    • 典型用法:
      • 基础命令:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --udf-inject
      • 操作步骤:
        • 上传 UDF 文件:
          • SQLMap 自动检测目标系统类型,上传预编译的共享库(如 lib_mysqludf_sys.so 或 .dll)到数据库服务器的 lib/plugin 目录
          • 手动指定路径(若默认上传失败): sqlmap -u <URL> --udf-inject --shared-lib="/path/to/udf.dll"
        • 创建自定义函数:
          • 调用上传的 UDF 文件注册函数(如 sys_eval): CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
        • 执行系统命令: SELECT sys_eval('whoami');
      • 实战:
        • 确认数据库架构(64位): sqlmap -u <URL> --sql-query="SELECT @@version_compile_os, @@version_compile_machine"
Sqlmap全参数讲解之第八篇
        • 注入 UDF 并创建函数: sqlmap -u <URL> --udf-inject --shared-lib="./sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so"
Sqlmap全参数讲解之第八篇
        • 执行系统命令: SELECT sys_eval('cat /etc/passwd');
    • 注意事项:
      • 权限与目录问题:
        • 目录不存在:MySQL 5.1+ 默认无 lib/plugin 目录,需手动创建并赋予写权限
        • 安全机制拦截:Ubuntu 的 AppArmor 或 CentOS 的 SELinux 可能阻止 UDF 执行,需临时关闭(sudo /etc/init.d/apparmor stop)或配置规则
      • 版本兼容性:
        • 32/64 位不匹配:SQLMap 自带 UDF 文件需与数据库架构一致,错误使用会导致 ERROR 1126
        • MySQL 5.1+ 适配:高版本 MySQL 需使用 SQLMap 预编译的专用 UDF 文件(位于 /sqlmap/data/udf/mysql)
      • 替代方案:
        • 若仅需执行单条命令 → 使用 --os-cmd="id"(无需手动注入)
        • 若需交互式 Shell → 直接使用 --os-shell(自动完成 UDF 注入)
    • 💎 安全与合规建议:
      • 风险控制:
        • UDF 注入可能触发 WAF/IDS 告警,建议结合 --proxy 和 --delay=2 降低风险
        • 避免执行破坏性命令(如 rm -rf),优先使用只读操作验证权限
      • 合法授权:⚠️所有操作需在授权范围内进行,未授权注入 UDF 违反《网络安全法》及《刑法》第 285 条
      • 📌扩展工具:
        • UDF 文件生成:
          https://github.com/sqlmapproject/sqlmap/tree/master/data/udf
  • --shared-lib=SHLIB:用于指定自定义共享库路径的关键参数,主要应用于通过用户自定义函数(UDF)扩展攻击能力的场景
    • 🔍加载自定义共享库:
      • UDF注入支持:通过 --shared-lib 指定本地共享库文件(如 .dll 或 .so),SQLMap 可将其注入目标数据库,实现执行系统命令、读写文件等高阶操作
      • 绕过限制:在数据库用户权限受限时,通过注入自定义函数绕过安全策略(如禁用系统命令执行)
    • 💡典型应用场景:
      • 执行系统命令:注入共享库中的函数调用 system() 或 exec()
      • 文件读写:读取服务器敏感文件(如 /etc/passwd)或上传后门
    • 典型用法:
      • 基础语法:sqlmap -u <目标URL> --shared-lib=<共享库路径> [其他参数]
      • 支持共享库注入的数据库:

数据库类型

共享库扩展名

注入方式

依赖条件

MySQL

.so(Linux)

通过CREATE FUNCTION注入

lib_mysqludf_sys等预编译库

PostgreSQL

.so

使用CREATE OR REPLACE FUNCTION

pg_exec等函数支持

Microsoft SQL Server

.dll

调用xp_cmdshell扩展

需启用Ole Automation Procedures

      • 实战案例:MySQL 执行系统命令
        • 编译共享库:使用预置的 UDF 库(如 lib_mysqludf_sys)编译生成 .so 文件
          •  gcc -shared -fPIC -o lib_mysqludf_sys.so lib_mysqludf_sys.c
        • 注入并执行命令: sqlmap -u "http://1.1.1.1/vuln?id=1" --shared-lib="/home/user/lib_mysqludf_sys.so" --os-cmd="id"
    • 注意事项:
      • 权限要求:
        • 数据库用户权限:需具备 CREATE FUNCTION 权限(通过 --is-dba 验证)
        • 文件系统访问:共享库需能被数据库服务进程读取(如 MySQL 的 plugin_dir 路径)
      • 兼容性问题:
        • 数据库版本:MySQL 5.1+ 需手动指定 plugin_dir;Windows 系统需 .dll 文件
        • 架构匹配:共享库需与数据库服务器的操作系统架构一致(如 x86 vs x64)
      • 隐蔽性与风险:
        • 日志记录:注入操作可能被数据库审计日志捕获,需结合 --proxy 隐匿流量
        • 破坏性操作:慎用 DROP FUNCTION 避免函数残留
    • 🔄替代方案与最佳实践:
      • 内置命令执行:若目标支持直接命令执行(如 MSSQL 的 xp_cmdshell),优先使用 --os-shell 避免文件上传
        •  sqlmap -u <URL> --os-shell 
        • 自动激活内置功能
      • 无文件注入:通过内存加载共享库(仅限 PostgreSQL)
        •  sqlmap --shared-lib="mem:<base64编码的库文件>" --dbms=postgresql
      • 安全合规性:⚠️仅限授权测试,未授权使用共享库注入违反《网络安全法》
    • 💎 总结:--shared-lib 是 SQLMap 高阶渗透能力的核心参数,适用于需定制化攻击逻辑的场景,但其依赖严格的权限与环境配置。建议操作流程:
      • 权限验证 → --is-dba → 确认 plugin_dir 可写性
      • 库文件编译 → 适配目标数据库类型与架构
      • 注入测试 → 使用 --os-cmd="whoami" 验证功能

原文始发于微信公众号(一个努力的学渣):Sqlmap全参数讲解之第八篇

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月9日08:20:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Sqlmap全参数讲解之第八篇http://cn-sec.com/archives/4147795.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息