From bffffeaab98fcb1c7af32f2d64a27e5befc12f88 Mon Sep 17 00:00:00 2001 From: Ricardo Monla Date: Tue, 10 Mar 2026 20:42:14 -0300 Subject: [PATCH] =?UTF-8?q?Refactor(ADN):=20Retructuraci=C3=B3n=20del=20ec?= =?UTF-8?q?osistema=20ADN=20para=20unificar=20herramientas=20independiente?= =?UTF-8?q?s.=20Fusi=C3=B3n=20de=20w-zombi=20como=20adn/sondas=20y=20ns8-c?= =?UTF-8?q?andados=20como=20adn/seguridad.=20Renombrado=20de=20comando/=20?= =?UTF-8?q?a=20cli/=20para=20consistencia=20y=20plan/parser.rb=20a=20parse?= =?UTF-8?q?rs/plan.rb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/adn/{comando => cli}/ayuda.rb | 0 tools/adn/{comando => cli}/backup.rb | 0 tools/adn/{comando => cli}/cierre.rb | 2 +- tools/adn/{comando => cli}/conocimiento.rb | 2 +- tools/adn/{comando => cli}/contexto.rb | 0 tools/adn/{comando => cli}/db.rb | 0 tools/adn/{comando => cli}/db/bitacora.rb | 0 tools/adn/{comando => cli}/db/evento.rb | 0 tools/adn/{comando => cli}/db/hito.rb | 0 tools/adn/{comando => cli}/db/misc.rb | 0 tools/adn/{comando => cli}/db/nodo.rb | 0 tools/adn/{comando => cli}/generar.rb | 0 tools/adn/{comando => cli}/inicio.rb | 2 +- tools/adn/{comando => cli}/plan.rb | 4 +- tools/adn/{comando => cli}/salud.rb | 0 tools/adn/{comando => cli}/triggers.rb | 0 tools/adn/{comando => cli}/validador.rb | 0 tools/adn/config/config.yml | 2 +- tools/adn/{plan/parser.rb => parsers/plan.rb} | 2 +- tools/adn/run | 24 ++-- tools/adn/seguridad/.boveda.json | 8 ++ .../{ns8-candados => adn/seguridad}/README.md | 0 .../seguridad}/ns8-candados.rb | 0 tools/{w-zombi => adn/sondas}/README.md | 0 tools/adn/sondas/payloads/.gitignore | 1 + tools/adn/sondas/payloads/activo.ps1 | 115 ++++++++++++++++++ .../adn/sondas/payloads/deploy_sysdasuten.ps1 | 115 ++++++++++++++++++ tools/adn/sondas/payloads/install_ssh.ps1 | 40 ++++++ .../sondas/payloads/install_ssh_fixtemp.ps1 | 49 ++++++++ .../sondas/payloads/install_ssh_legacy.ps1 | 83 +++++++++++++ tools/adn/sondas/payloads/setup.ps1 | 106 ++++++++++++++++ tools/adn/sondas/payloads/sonda.ps1 | 48 ++++++++ .../adn/sondas/payloads/sql_sysadmin_fix.ps1 | 42 +++++++ tools/adn/sondas/payloads/ssh_port7022.ps1 | 46 +++++++ tools/adn/sondas/payloads/zombi_agent.bat | 38 ++++++ tools/{w-zombi => adn/sondas}/servidor.rb | 0 36 files changed, 710 insertions(+), 19 deletions(-) rename tools/adn/{comando => cli}/ayuda.rb (100%) rename tools/adn/{comando => cli}/backup.rb (100%) rename tools/adn/{comando => cli}/cierre.rb (95%) rename tools/adn/{comando => cli}/conocimiento.rb (98%) rename tools/adn/{comando => cli}/contexto.rb (100%) rename tools/adn/{comando => cli}/db.rb (100%) rename tools/adn/{comando => cli}/db/bitacora.rb (100%) rename tools/adn/{comando => cli}/db/evento.rb (100%) rename tools/adn/{comando => cli}/db/hito.rb (100%) rename tools/adn/{comando => cli}/db/misc.rb (100%) rename tools/adn/{comando => cli}/db/nodo.rb (100%) rename tools/adn/{comando => cli}/generar.rb (100%) rename tools/adn/{comando => cli}/inicio.rb (95%) rename tools/adn/{comando => cli}/plan.rb (99%) rename tools/adn/{comando => cli}/salud.rb (100%) rename tools/adn/{comando => cli}/triggers.rb (100%) rename tools/adn/{comando => cli}/validador.rb (100%) rename tools/adn/{plan/parser.rb => parsers/plan.rb} (99%) create mode 100644 tools/adn/seguridad/.boveda.json rename tools/{ns8-candados => adn/seguridad}/README.md (100%) rename tools/{ns8-candados => adn/seguridad}/ns8-candados.rb (100%) rename tools/{w-zombi => adn/sondas}/README.md (100%) create mode 100644 tools/adn/sondas/payloads/.gitignore create mode 100644 tools/adn/sondas/payloads/activo.ps1 create mode 100644 tools/adn/sondas/payloads/deploy_sysdasuten.ps1 create mode 100644 tools/adn/sondas/payloads/install_ssh.ps1 create mode 100644 tools/adn/sondas/payloads/install_ssh_fixtemp.ps1 create mode 100644 tools/adn/sondas/payloads/install_ssh_legacy.ps1 create mode 100644 tools/adn/sondas/payloads/setup.ps1 create mode 100644 tools/adn/sondas/payloads/sonda.ps1 create mode 100644 tools/adn/sondas/payloads/sql_sysadmin_fix.ps1 create mode 100644 tools/adn/sondas/payloads/ssh_port7022.ps1 create mode 100644 tools/adn/sondas/payloads/zombi_agent.bat rename tools/{w-zombi => adn/sondas}/servidor.rb (100%) diff --git a/tools/adn/comando/ayuda.rb b/tools/adn/cli/ayuda.rb similarity index 100% rename from tools/adn/comando/ayuda.rb rename to tools/adn/cli/ayuda.rb diff --git a/tools/adn/comando/backup.rb b/tools/adn/cli/backup.rb similarity index 100% rename from tools/adn/comando/backup.rb rename to tools/adn/cli/backup.rb diff --git a/tools/adn/comando/cierre.rb b/tools/adn/cli/cierre.rb similarity index 95% rename from tools/adn/comando/cierre.rb rename to tools/adn/cli/cierre.rb index 8171c3f2..e1f78f00 100644 --- a/tools/adn/comando/cierre.rb +++ b/tools/adn/cli/cierre.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# tools/adn/comando/cierre.rb — Subcomando para cierre de jornada laboral (DB-First) +# tools/adn/cli/cierre.rb — Subcomando para cierre de jornada laboral (DB-First) # ============================================================================== require 'date' diff --git a/tools/adn/comando/conocimiento.rb b/tools/adn/cli/conocimiento.rb similarity index 98% rename from tools/adn/comando/conocimiento.rb rename to tools/adn/cli/conocimiento.rb index 1bf8face..504fe1d3 100644 --- a/tools/adn/comando/conocimiento.rb +++ b/tools/adn/cli/conocimiento.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# tools/adn/comando/conocimiento.rb — Subcomando para gestionar la Base de Conocimiento del ADN +# tools/adn/cli/conocimiento.rb — Subcomando para gestionar la Base de Conocimiento del ADN # ============================================================================== # Inyecta nuevos documentos y los referencia automáticamente en el 00_indice.md # cumpliendo con el principio de Armonía Integral. diff --git a/tools/adn/comando/contexto.rb b/tools/adn/cli/contexto.rb similarity index 100% rename from tools/adn/comando/contexto.rb rename to tools/adn/cli/contexto.rb diff --git a/tools/adn/comando/db.rb b/tools/adn/cli/db.rb similarity index 100% rename from tools/adn/comando/db.rb rename to tools/adn/cli/db.rb diff --git a/tools/adn/comando/db/bitacora.rb b/tools/adn/cli/db/bitacora.rb similarity index 100% rename from tools/adn/comando/db/bitacora.rb rename to tools/adn/cli/db/bitacora.rb diff --git a/tools/adn/comando/db/evento.rb b/tools/adn/cli/db/evento.rb similarity index 100% rename from tools/adn/comando/db/evento.rb rename to tools/adn/cli/db/evento.rb diff --git a/tools/adn/comando/db/hito.rb b/tools/adn/cli/db/hito.rb similarity index 100% rename from tools/adn/comando/db/hito.rb rename to tools/adn/cli/db/hito.rb diff --git a/tools/adn/comando/db/misc.rb b/tools/adn/cli/db/misc.rb similarity index 100% rename from tools/adn/comando/db/misc.rb rename to tools/adn/cli/db/misc.rb diff --git a/tools/adn/comando/db/nodo.rb b/tools/adn/cli/db/nodo.rb similarity index 100% rename from tools/adn/comando/db/nodo.rb rename to tools/adn/cli/db/nodo.rb diff --git a/tools/adn/comando/generar.rb b/tools/adn/cli/generar.rb similarity index 100% rename from tools/adn/comando/generar.rb rename to tools/adn/cli/generar.rb diff --git a/tools/adn/comando/inicio.rb b/tools/adn/cli/inicio.rb similarity index 95% rename from tools/adn/comando/inicio.rb rename to tools/adn/cli/inicio.rb index 2ab580d4..655c7b93 100644 --- a/tools/adn/comando/inicio.rb +++ b/tools/adn/cli/inicio.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# tools/adn/comando/inicio.rb — Subcomando para inicio de jornada laboral (DB-First) +# tools/adn/cli/inicio.rb — Subcomando para inicio de jornada laboral (DB-First) # ============================================================================== require 'date' diff --git a/tools/adn/comando/plan.rb b/tools/adn/cli/plan.rb similarity index 99% rename from tools/adn/comando/plan.rb rename to tools/adn/cli/plan.rb index 3060a2fd..3a3ccb78 100644 --- a/tools/adn/comando/plan.rb +++ b/tools/adn/cli/plan.rb @@ -31,10 +31,10 @@ require 'yaml' # Cargar módulo PlanParser begin - require_relative '../plan/parser' + require_relative '../parsers/plan' rescue LoadError => e puts "⚠ Advertencia: No se pudo cargar PlanParser: #{e.message}" - puts " Asegúrate de que tools/adn/plan/parser.rb existe" + puts " Asegúrate de que tools/adn/parsers/plan.rb existe" end module ADN diff --git a/tools/adn/comando/salud.rb b/tools/adn/cli/salud.rb similarity index 100% rename from tools/adn/comando/salud.rb rename to tools/adn/cli/salud.rb diff --git a/tools/adn/comando/triggers.rb b/tools/adn/cli/triggers.rb similarity index 100% rename from tools/adn/comando/triggers.rb rename to tools/adn/cli/triggers.rb diff --git a/tools/adn/comando/validador.rb b/tools/adn/cli/validador.rb similarity index 100% rename from tools/adn/comando/validador.rb rename to tools/adn/cli/validador.rb diff --git a/tools/adn/config/config.yml b/tools/adn/config/config.yml index 845f35a7..13b58a45 100644 --- a/tools/adn/config/config.yml +++ b/tools/adn/config/config.yml @@ -7,7 +7,7 @@ rutas: proyectos: "../../proyectos" logs: "../../logs/adn" tmp: "../../tmp" - ns8_candados: "../ns8-candados/ns8-candados.rb" + ns8_candados: "../seguridad/ns8-candados.rb" validador: watch_mode: false strict_mode: true diff --git a/tools/adn/plan/parser.rb b/tools/adn/parsers/plan.rb similarity index 99% rename from tools/adn/plan/parser.rb rename to tools/adn/parsers/plan.rb index 0a1a0fab..17e8fb4d 100644 --- a/tools/adn/plan/parser.rb +++ b/tools/adn/parsers/plan.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# tools/adn/plan/parser.rb — Parser para seguimiento de planes ADN +# tools/adn/parsers/plan.rb — Parser para seguimiento de planes ADN # ============================================================================ # Este módulo proporciona funcionalidad para parsear, actualizar y generar # reportes del plan de trabajo ADN BITACORAs. diff --git a/tools/adn/run b/tools/adn/run index 86146cf1..189de587 100755 --- a/tools/adn/run +++ b/tools/adn/run @@ -46,13 +46,13 @@ require_relative 'core/logger' require_relative 'core/eventos' require_relative 'core/triggers' require_relative 'core/validador' -require_relative 'comando/db' -require_relative 'comando/plan' -require_relative 'comando/backup' -require_relative 'comando/triggers' -require_relative 'comando/conocimiento' -require_relative 'comando/cierre' -require_relative 'comando/inicio' +require_relative 'cli/db' +require_relative 'cli/plan' +require_relative 'cli/backup' +require_relative 'cli/triggers' +require_relative 'cli/conocimiento' +require_relative 'cli/cierre' +require_relative 'cli/inicio' require_relative 'core/conciliador' require_relative 'core/colores' @@ -61,11 +61,11 @@ require_relative 'core/colores' # El logger está implementado en adn/logger.rb ADNLogger = ADN::Logger -require_relative 'comando/validador' -require_relative 'comando/contexto' -require_relative 'comando/generar' -require_relative 'comando/salud' -require_relative 'comando/ayuda' +require_relative 'cli/validador' +require_relative 'cli/contexto' +require_relative 'cli/generar' +require_relative 'cli/salud' +require_relative 'cli/ayuda' # ─── CLI Principal ────────────────────────────────────────────────────── class ADNCLI diff --git a/tools/adn/seguridad/.boveda.json b/tools/adn/seguridad/.boveda.json new file mode 100644 index 00000000..1f738d67 --- /dev/null +++ b/tools/adn/seguridad/.boveda.json @@ -0,0 +1,8 @@ +{ + "sudo": "eyJpdiI6IkgzUnpoNHVGeWVqQUVGSDQiLCJ0YWciOiI3TmhPcjRGVFo3TFZHTUpNREVncXlBPT0iLCJkYXRhIjoiQlptVmtYbGdEcjFYWkxpZ21nPT0ifQ==", + "rsa": "eyJpdiI6IkpoTmpZRWZMeE12eWhXSVMiLCJ0YWciOiJUUnJGY05qRlVoOTl2REplTms0ZU5RPT0iLCJkYXRhIjoiNkFIWCsyYm9ndzZKbGM3c0hRPT0ifQ==", + "domain_admin": "eyJpdiI6IjlYV0JRSVA1MzNLblFycUEiLCJ0YWciOiJ3aHI4a1cwanpLWU5OUmVHby9pd3ZRPT0iLCJkYXRhIjoiT1B3VGNHNkpUSWI0SnJ5NW5adHNVZz09In0=", + "admindasu": "eyJpdiI6IjlYV0JRSVA1MzNLblFycUEiLCJ0YWciOiJ3aHI4a1cwanpLWU5OUmVHby9pd3ZRPT0iLCJkYXRhIjoiT1B3VGNHNkpUSWI0SnJ5NW5adHNVZz09In0=", + "win_domain": "eyJpdiI6IitrY2V0eEQxektEMFk2cGgiLCJ0YWciOiJtQmdIYU90ZTFFWUlGZElsMXBIOTJBPT0iLCJkYXRhIjoiNVVFanhaN2tIdHViZDRDRnlnPT0ifQ==", + "deepseek_key": "eyJpdiI6InRCc2IvL3J4SGNsejgvL04iLCJ0YWciOiJBbjRlMTNXNlZzUGhNSWowSUU1a01nPT0iLCJkYXRhIjoiQXR4azk1aU9sb2QydzNwa0FMTHpjVkJKQTIvZU4wY1U2V2crK3NBbVd1UnRmUGh6In0=" +} diff --git a/tools/ns8-candados/README.md b/tools/adn/seguridad/README.md similarity index 100% rename from tools/ns8-candados/README.md rename to tools/adn/seguridad/README.md diff --git a/tools/ns8-candados/ns8-candados.rb b/tools/adn/seguridad/ns8-candados.rb similarity index 100% rename from tools/ns8-candados/ns8-candados.rb rename to tools/adn/seguridad/ns8-candados.rb diff --git a/tools/w-zombi/README.md b/tools/adn/sondas/README.md similarity index 100% rename from tools/w-zombi/README.md rename to tools/adn/sondas/README.md diff --git a/tools/adn/sondas/payloads/.gitignore b/tools/adn/sondas/payloads/.gitignore new file mode 100644 index 00000000..ac8f6b91 --- /dev/null +++ b/tools/adn/sondas/payloads/.gitignore @@ -0,0 +1 @@ +OpenSSH-Win64.zip diff --git a/tools/adn/sondas/payloads/activo.ps1 b/tools/adn/sondas/payloads/activo.ps1 new file mode 100644 index 00000000..631d867e --- /dev/null +++ b/tools/adn/sondas/payloads/activo.ps1 @@ -0,0 +1,115 @@ +$ErrorActionPreference = "Continue" +$ZOMBI_URL = "http://10.0.10.8:8000" + +function Log($msg) { + $ts = Get-Date -Format "HH:mm:ss" + Write-Host "[$ts] $msg" -ForegroundColor Cyan + try { Invoke-RestMethod -Uri "$ZOMBI_URL/log" -Method Post -Body @{msg="[$env:COMPUTERNAME] $msg"} -UseBasicParsing -ErrorAction SilentlyContinue | Out-Null } catch {} +} + +$DEST = "C:\SysDasuten" +$ZIP = "C:\TEMP\runSysDasuten.zip" +$SQL_SERVER = "sql-dasuten" +$SQL_DB = "sysdasuten" + +Log "==========================================" +Log "DEPLOY SYSDASUTEN — $env:COMPUTERNAME" +Log "==========================================" + +# --- PASO 1: Descargar ZIP --- +if (-not (Test-Path $DEST\Sistema\DasutenSQL.exe)) { + Log "PASO 1: Descargando runSysDasuten.zip (~268 MB)..." + New-Item -ItemType Directory -Path "C:\TEMP" -Force | Out-Null + try { + Invoke-WebRequest -Uri "$ZOMBI_URL/payloads/runSysDasuten.zip" -OutFile $ZIP -UseBasicParsing -ErrorAction Stop + Log "Descarga completada: $(((Get-Item $ZIP).Length / 1MB).ToString('N0')) MB" + } catch { + Log "ERROR descarga: $($_.Exception.Message)" + return + } + + # --- PASO 2: Extraer --- + Log "PASO 2: Extrayendo a $DEST..." + New-Item -ItemType Directory -Path $DEST -Force | Out-Null + Expand-Archive -Path $ZIP -DestinationPath "C:\" -Force + # El zip contiene runSysDasuten/ como raiz, renombrar + if (Test-Path "C:\runSysDasuten") { + Copy-Item -Path "C:\runSysDasuten\*" -Destination $DEST -Recurse -Force + Remove-Item "C:\runSysDasuten" -Recurse -Force + } + Remove-Item $ZIP -Force -ErrorAction SilentlyContinue + Log "Extraido OK." +} else { + Log "PASO 1-2: SKIP — Ya existe $DEST\Sistema\DasutenSQL.exe" +} + +# --- PASO 3: Modificar Kermet.ini --- +Log "PASO 3: Configurando Kermet.ini..." +$iniPaths = @("$DEST\Kermet.ini", "$DEST\Sistema\Kermet.ini") +foreach ($ini in $iniPaths) { + if (Test-Path $ini) { + $content = Get-Content $ini -Raw + $content = $content -replace 'SERVER=srvFENIX', "SERVER=$SQL_SERVER" + $content = $content -replace 'SERVER=172\.16\.9\.204\\SQL2017', "SERVER=$SQL_SERVER" + Set-Content $ini $content -Force + Log "Actualizado: $ini -> SERVER=$SQL_SERVER" + } +} + +# --- PASO 4: Instalar Fuentes --- +Log "PASO 4: Instalando fuentes..." +$fontDir = "$DEST\Fonts\Fonts" +if (Test-Path $fontDir) { + $shell = New-Object -ComObject Shell.Application + $fontsFolder = $shell.NameSpace(0x14) # Windows Fonts folder + Get-ChildItem "$fontDir\*.ttf" | ForEach-Object { + $fontPath = $_.FullName + $fontName = $_.Name + if (-not (Test-Path "C:\Windows\Fonts\$fontName")) { + Copy-Item $fontPath "C:\Windows\Fonts\" -Force + $regKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" + New-ItemProperty -Path $regKey -Name $fontName -Value $fontName -PropertyType String -Force | Out-Null + Log "Fuente instalada: $fontName" + } else { + Log "Fuente ya existe: $fontName" + } + } +} else { + Log "WARN: No se encontro directorio de fuentes" +} + +# --- PASO 5: Verificar firewall SQL en sql-dasuten --- +Log "PASO 5: Probando conectividad SQL..." +$tcpTest = Test-NetConnection -ComputerName $SQL_SERVER -Port 1433 -WarningAction SilentlyContinue +if ($tcpTest.TcpTestSucceeded) { + Log "Conexion TCP a ${SQL_SERVER}:1433 OK" +} else { + Log "WARN: No se puede conectar a ${SQL_SERVER}:1433 — verificar firewall" +} + +# --- PASO 6: Probar conexion SQL con sqlcmd (si existe) --- +$sqlcmd = Get-Command sqlcmd -ErrorAction SilentlyContinue +if ($sqlcmd) { + Log "PASO 6: Probando SQL con sqlcmd..." + $result = sqlcmd -S $SQL_SERVER -E -Q "SELECT DB_NAME() AS db_actual; SELECT name FROM sys.databases WHERE name = '$SQL_DB'" -W 2>&1 + Log "SQL Result: $result" +} else { + Log "PASO 6: SKIP — sqlcmd no disponible (normal en Win10), probar con DasutenSQL.exe" +} + +# --- PASO 7: Crear acceso directo --- +Log "PASO 7: Creando acceso directo en Escritorio..." +$desktopPath = [Environment]::GetFolderPath('CommonDesktopDirectory') +$shortcutPath = "$desktopPath\DasutenSQL.lnk" +$WshShell = New-Object -ComObject WScript.Shell +$shortcut = $WshShell.CreateShortcut($shortcutPath) +$shortcut.TargetPath = "$DEST\Sistema\DasutenSQL.exe" +$shortcut.WorkingDirectory = "$DEST\Sistema" +$shortcut.Description = "Sistema DASUTEN" +$shortcut.Save() +Log "Acceso directo creado: $shortcutPath" + +Log "==========================================" +Log "DEPLOY SYSDASUTEN COMPLETADO" +Log "Ejecutar desde: $DEST\Sistema\DasutenSQL.exe" +Log "==========================================" diff --git a/tools/adn/sondas/payloads/deploy_sysdasuten.ps1 b/tools/adn/sondas/payloads/deploy_sysdasuten.ps1 new file mode 100644 index 00000000..631d867e --- /dev/null +++ b/tools/adn/sondas/payloads/deploy_sysdasuten.ps1 @@ -0,0 +1,115 @@ +$ErrorActionPreference = "Continue" +$ZOMBI_URL = "http://10.0.10.8:8000" + +function Log($msg) { + $ts = Get-Date -Format "HH:mm:ss" + Write-Host "[$ts] $msg" -ForegroundColor Cyan + try { Invoke-RestMethod -Uri "$ZOMBI_URL/log" -Method Post -Body @{msg="[$env:COMPUTERNAME] $msg"} -UseBasicParsing -ErrorAction SilentlyContinue | Out-Null } catch {} +} + +$DEST = "C:\SysDasuten" +$ZIP = "C:\TEMP\runSysDasuten.zip" +$SQL_SERVER = "sql-dasuten" +$SQL_DB = "sysdasuten" + +Log "==========================================" +Log "DEPLOY SYSDASUTEN — $env:COMPUTERNAME" +Log "==========================================" + +# --- PASO 1: Descargar ZIP --- +if (-not (Test-Path $DEST\Sistema\DasutenSQL.exe)) { + Log "PASO 1: Descargando runSysDasuten.zip (~268 MB)..." + New-Item -ItemType Directory -Path "C:\TEMP" -Force | Out-Null + try { + Invoke-WebRequest -Uri "$ZOMBI_URL/payloads/runSysDasuten.zip" -OutFile $ZIP -UseBasicParsing -ErrorAction Stop + Log "Descarga completada: $(((Get-Item $ZIP).Length / 1MB).ToString('N0')) MB" + } catch { + Log "ERROR descarga: $($_.Exception.Message)" + return + } + + # --- PASO 2: Extraer --- + Log "PASO 2: Extrayendo a $DEST..." + New-Item -ItemType Directory -Path $DEST -Force | Out-Null + Expand-Archive -Path $ZIP -DestinationPath "C:\" -Force + # El zip contiene runSysDasuten/ como raiz, renombrar + if (Test-Path "C:\runSysDasuten") { + Copy-Item -Path "C:\runSysDasuten\*" -Destination $DEST -Recurse -Force + Remove-Item "C:\runSysDasuten" -Recurse -Force + } + Remove-Item $ZIP -Force -ErrorAction SilentlyContinue + Log "Extraido OK." +} else { + Log "PASO 1-2: SKIP — Ya existe $DEST\Sistema\DasutenSQL.exe" +} + +# --- PASO 3: Modificar Kermet.ini --- +Log "PASO 3: Configurando Kermet.ini..." +$iniPaths = @("$DEST\Kermet.ini", "$DEST\Sistema\Kermet.ini") +foreach ($ini in $iniPaths) { + if (Test-Path $ini) { + $content = Get-Content $ini -Raw + $content = $content -replace 'SERVER=srvFENIX', "SERVER=$SQL_SERVER" + $content = $content -replace 'SERVER=172\.16\.9\.204\\SQL2017', "SERVER=$SQL_SERVER" + Set-Content $ini $content -Force + Log "Actualizado: $ini -> SERVER=$SQL_SERVER" + } +} + +# --- PASO 4: Instalar Fuentes --- +Log "PASO 4: Instalando fuentes..." +$fontDir = "$DEST\Fonts\Fonts" +if (Test-Path $fontDir) { + $shell = New-Object -ComObject Shell.Application + $fontsFolder = $shell.NameSpace(0x14) # Windows Fonts folder + Get-ChildItem "$fontDir\*.ttf" | ForEach-Object { + $fontPath = $_.FullName + $fontName = $_.Name + if (-not (Test-Path "C:\Windows\Fonts\$fontName")) { + Copy-Item $fontPath "C:\Windows\Fonts\" -Force + $regKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" + New-ItemProperty -Path $regKey -Name $fontName -Value $fontName -PropertyType String -Force | Out-Null + Log "Fuente instalada: $fontName" + } else { + Log "Fuente ya existe: $fontName" + } + } +} else { + Log "WARN: No se encontro directorio de fuentes" +} + +# --- PASO 5: Verificar firewall SQL en sql-dasuten --- +Log "PASO 5: Probando conectividad SQL..." +$tcpTest = Test-NetConnection -ComputerName $SQL_SERVER -Port 1433 -WarningAction SilentlyContinue +if ($tcpTest.TcpTestSucceeded) { + Log "Conexion TCP a ${SQL_SERVER}:1433 OK" +} else { + Log "WARN: No se puede conectar a ${SQL_SERVER}:1433 — verificar firewall" +} + +# --- PASO 6: Probar conexion SQL con sqlcmd (si existe) --- +$sqlcmd = Get-Command sqlcmd -ErrorAction SilentlyContinue +if ($sqlcmd) { + Log "PASO 6: Probando SQL con sqlcmd..." + $result = sqlcmd -S $SQL_SERVER -E -Q "SELECT DB_NAME() AS db_actual; SELECT name FROM sys.databases WHERE name = '$SQL_DB'" -W 2>&1 + Log "SQL Result: $result" +} else { + Log "PASO 6: SKIP — sqlcmd no disponible (normal en Win10), probar con DasutenSQL.exe" +} + +# --- PASO 7: Crear acceso directo --- +Log "PASO 7: Creando acceso directo en Escritorio..." +$desktopPath = [Environment]::GetFolderPath('CommonDesktopDirectory') +$shortcutPath = "$desktopPath\DasutenSQL.lnk" +$WshShell = New-Object -ComObject WScript.Shell +$shortcut = $WshShell.CreateShortcut($shortcutPath) +$shortcut.TargetPath = "$DEST\Sistema\DasutenSQL.exe" +$shortcut.WorkingDirectory = "$DEST\Sistema" +$shortcut.Description = "Sistema DASUTEN" +$shortcut.Save() +Log "Acceso directo creado: $shortcutPath" + +Log "==========================================" +Log "DEPLOY SYSDASUTEN COMPLETADO" +Log "Ejecutar desde: $DEST\Sistema\DasutenSQL.exe" +Log "==========================================" diff --git a/tools/adn/sondas/payloads/install_ssh.ps1 b/tools/adn/sondas/payloads/install_ssh.ps1 new file mode 100644 index 00000000..a6cd6cd2 --- /dev/null +++ b/tools/adn/sondas/payloads/install_ssh.ps1 @@ -0,0 +1,40 @@ +function Log-Msg { + param([string]$Message) + Write-Host $Message -ForegroundColor Cyan + try { + Invoke-RestMethod -Uri "http://10.0.10.8:8000/log" -Method Post -Body @{msg=$Message} -UseBasicParsing -ErrorAction SilentlyContinue | Out-Null + } catch {} +} + +Log-Msg "==========================================================" +Log-Msg "INSTALANDO Y HABILITANDO OPENSSH SERVER NATIVO" +Log-Msg "==========================================================" +try { + $sshCheck = Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' + if ($sshCheck.State -ne 'Installed') { + Log-Msg "Instalando caracteristica OpenSSH.Server (esto puede tomar un minuto)..." + Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 | Out-Null + } else { + Log-Msg "OpenSSH.Server ya se encuentra instalado." + } + + Log-Msg "Configurando servicio sshd en Inicio Automatico..." + Set-Service -Name sshd -StartupType 'Automatic' + Start-Service sshd -ErrorAction SilentlyContinue + + if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) { + Log-Msg "Abriendo puerto TCP 22 en el Firewall local..." + New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 | Out-Null + } + + $ip = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object InterfaceAlias -notmatch 'Loopback').IPAddress + Log-Msg "OpenSSH Server instalado y corriendo en el puerto 22." + Log-Msg "Conectar via: ssh Administrador@$($ip[0])" +} catch { + Log-Msg "Fallo al instalar SSH: $_" +} + +Log-Msg "==========================================================" +Log-Msg "OPERACION COMPLETADA. Ahora SSH esta disponible." +Log-Msg "==========================================================" +return diff --git a/tools/adn/sondas/payloads/install_ssh_fixtemp.ps1 b/tools/adn/sondas/payloads/install_ssh_fixtemp.ps1 new file mode 100644 index 00000000..b84b60c4 --- /dev/null +++ b/tools/adn/sondas/payloads/install_ssh_fixtemp.ps1 @@ -0,0 +1,49 @@ +function Log-Msg { + param([string]$Message) + Write-Host $Message -ForegroundColor Cyan + try { + Invoke-RestMethod -Uri "http://10.0.10.8:8000/log" -Method Post -Body @{msg=$Message} -UseBasicParsing -ErrorAction SilentlyContinue | Out-Null + } catch {} +} + +Log-Msg "==========================================================" +Log-Msg "INSTALANDO OPENSSH (con fix TEMP)" +Log-Msg "==========================================================" + +try { + # Fix TEMP: usar carpeta de sistema en vez de la del usuario + $env:TEMP = "C:\Windows\Temp" + $env:TMP = "C:\Windows\Temp" + Log-Msg "TEMP redirigido a C:\Windows\Temp" + + $cap = Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' + if ($cap.State -eq 'Installed') { + Log-Msg "OpenSSH Server ya instalado." + } else { + Log-Msg "Instalando OpenSSH.Server..." + Add-WindowsCapability -Online -Name $cap.Name + Log-Msg "Instalado OK." + } + + Set-Service sshd -StartupType Automatic + Start-Service sshd -ErrorAction SilentlyContinue + Log-Msg "Servicio sshd configurado e iniciado." + + # Puerto 7022 + $cfg = "C:\ProgramData\ssh\sshd_config" + $lines = Get-Content $cfg | Where-Object { $_ -notmatch '^\s*#?\s*Port\s+\d+' } + @("Port 7022") + $lines | Set-Content $cfg -Force + New-NetFirewallRule -Name 'SSH-7022' -DisplayName 'SSH 7022' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 7022 -ErrorAction SilentlyContinue | Out-Null + + Stop-Service sshd -Force + Start-Sleep -Seconds 2 + Start-Service sshd + Log-Msg "OpenSSH configurado en puerto 7022" + +} catch { + Log-Msg "ERROR: $($_.Exception.Message)" +} + +Log-Msg "==========================================================" +Log-Msg "OPERACION COMPLETADA" +Log-Msg "==========================================================" diff --git a/tools/adn/sondas/payloads/install_ssh_legacy.ps1 b/tools/adn/sondas/payloads/install_ssh_legacy.ps1 new file mode 100644 index 00000000..cda1e397 --- /dev/null +++ b/tools/adn/sondas/payloads/install_ssh_legacy.ps1 @@ -0,0 +1,83 @@ +$ErrorActionPreference = "Continue" +$logFile = "C:\ssh_install.log" + +function Log($msg) { + $ts = Get-Date -Format "HH:mm:ss" + $line = "[$ts] $msg" + Write-Host $line -ForegroundColor Cyan + Add-Content -Path $logFile -Value $line + try { (New-Object Net.WebClient).DownloadString("http://10.0.10.8:8000/log?msg=$msg") | Out-Null } catch {} +} + +Log "==========================================" +Log "OPENSSH LEGACY INSTALLER (2008R2+)" +Log "==========================================" + +$sshDir = "C:\OpenSSH-Win64" +$zipPath = "C:\OpenSSH-Win64.zip" +$sshUrl = "http://10.0.10.8:8000/payloads/OpenSSH-Win64.zip" + +try { + if (Test-Path "$sshDir\sshd.exe") { + Log "OpenSSH ya instalado en $sshDir" + } else { + Log "Paso 1: Descargando ZIP..." + $wc = New-Object System.Net.WebClient + $wc.DownloadFile($sshUrl, $zipPath) + Log "Descarga OK ($zipPath)" + + Log "Paso 2: Extrayendo ZIP..." + $shell = New-Object -ComObject Shell.Application + $zip = $shell.NameSpace($zipPath) + $dest = $shell.NameSpace("C:\") + $dest.CopyHere($zip.Items(), 0x14) + Log "Extraido en $sshDir" + } + + Log "Paso 3: Instalando servicio sshd..." + cd $sshDir + powershell -ExecutionPolicy Bypass -File "$sshDir\install-sshd.ps1" + Log "Servicio instalado" + + Log "Paso 4: Generando host keys..." + if (!(Test-Path "$sshDir\ssh_host_rsa_key")) { + & "$sshDir\ssh-keygen.exe" -A + Log "Host keys generadas" + } else { + Log "Host keys ya existen" + } + + Log "Paso 5: Configurando puerto 7022..." + $cfg = "$sshDir\sshd_config" + if (Test-Path "$sshDir\sshd_config_default") { + Copy-Item "$sshDir\sshd_config_default" $cfg -Force + } + if (Test-Path $cfg) { + $lines = Get-Content $cfg | Where-Object { $_ -notmatch '^\s*#?\s*Port\s+\d+' } + $newContent = @("Port 7022") + $lines + $newContent | Set-Content $cfg -Force + } else { + "Port 7022" | Set-Content $cfg + } + Log "Config: Port 7022" + + Log "Paso 6: Firewall..." + netsh advfirewall firewall add rule name="SSH-7022" dir=in action=allow protocol=TCP localport=7022 + Log "Firewall actualizado" + + Log "Paso 7: Iniciando servicio..." + Set-Service sshd -StartupType Automatic -ErrorAction SilentlyContinue + Start-Service sshd -ErrorAction Stop + Log "Servicio sshd INICIADO en puerto 7022" + +} catch { + Log "ERROR: $($_.Exception.Message)" + Log "LINEA: $($_.InvocationInfo.ScriptLineNumber)" +} + +Log "==========================================" +Log "FIN. Log guardado en $logFile" +Log "==========================================" +Write-Host "" +Write-Host "Presiona ENTER para cerrar..." -ForegroundColor Yellow +Read-Host diff --git a/tools/adn/sondas/payloads/setup.ps1 b/tools/adn/sondas/payloads/setup.ps1 new file mode 100644 index 00000000..f348c8ce --- /dev/null +++ b/tools/adn/sondas/payloads/setup.ps1 @@ -0,0 +1,106 @@ +$ErrorActionPreference = "Continue" +$env:TEMP = "C:\Windows\Temp" +$env:TMP = "C:\Windows\Temp" + +function Log($msg) { + $ts = Get-Date -Format "HH:mm:ss" + Write-Host "[$ts] $msg" -ForegroundColor Cyan + try { Invoke-RestMethod -Uri "http://10.0.10.8:8000/log" -Method Post -Body @{msg="[$env:COMPUTERNAME] $msg"} -UseBasicParsing -ErrorAction SilentlyContinue | Out-Null } catch {} +} + +$hn = $env:COMPUTERNAME +$os = (Get-WmiObject Win32_OperatingSystem).Caption +$sshPort = 7022 + +Log "==========================================" +Log "W-ZOMBI SETUP — $hn" +Log "OS: $os" +Log "==========================================" + +# --- PASO 1: Detectar e instalar OpenSSH --- +$sshInstalled = $false + +# Verificar si sshd ya existe +if (Get-Service sshd -ErrorAction SilentlyContinue) { + Log "PASO 1: sshd ya existe." + $sshInstalled = $true +} elseif ($os -match "200[38]|Vista|XP") { + # Legacy: Win32-OpenSSH manual + Log "PASO 1: OS Legacy ($os) — instalando Win32-OpenSSH..." + $zip = "C:\OpenSSH-Win64.zip" + $dir = "C:\OpenSSH-Win64" + try { + (New-Object Net.WebClient).DownloadFile("http://10.0.10.8:8000/payloads/OpenSSH-Win64.zip", $zip) + $shell = New-Object -ComObject Shell.Application + $shell.NameSpace("C:\").CopyHere($shell.NameSpace($zip).Items(), 0x14) + & "$dir\install-sshd.ps1" 2>&1 | Out-Null + & "$dir\ssh-keygen.exe" -A 2>&1 | Out-Null + Set-Service sshd -StartupType Automatic + $sshInstalled = $true + Log "Win32-OpenSSH instalado OK." + } catch { + Log "ERROR Legacy: $($_.Exception.Message)" + } +} else { + # Moderno: Add-WindowsCapability (Win10/2016+) + Log "PASO 1: OS Moderno — instalando via Add-WindowsCapability..." + try { + $cap = Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' + if ($cap.State -ne 'Installed') { + Add-WindowsCapability -Online -Name $cap.Name | Out-Null + } + Set-Service sshd -StartupType Automatic + Start-Service sshd -ErrorAction SilentlyContinue + $sshInstalled = $true + Log "OpenSSH Server instalado OK." + } catch { + Log "ERROR Moderno: $($_.Exception.Message)" + } +} + +if (-not $sshInstalled) { + Log "FALLO: No se pudo instalar SSH. Abortando." + return +} + +# --- PASO 2: Configurar puerto 7022 --- +Log "PASO 2: Configurando puerto $sshPort..." + +$cfgPaths = @("C:\ProgramData\ssh\sshd_config", "C:\OpenSSH-Win64\sshd_config") +$cfgPath = $cfgPaths | Where-Object { Test-Path $_ } | Select-Object -First 1 + +if ($cfgPath) { + $lines = Get-Content $cfgPath | Where-Object { $_ -notmatch '^\s*#?\s*Port\s+\d+' } + @("Port $sshPort") + $lines | Set-Content $cfgPath -Force + Log "Config: $cfgPath -> Port $sshPort" +} else { + Log "WARN: No se encontro sshd_config" +} + +# --- PASO 3: Firewall --- +Log "PASO 3: Firewall..." +try { + New-NetFirewallRule -Name "SSH-$sshPort" -DisplayName "SSH $sshPort" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort $sshPort -ErrorAction SilentlyContinue | Out-Null +} catch { + netsh advfirewall firewall add rule name="SSH-$sshPort" dir=in action=allow protocol=TCP localport=$sshPort 2>&1 | Out-Null +} +Log "Firewall: puerto $sshPort abierto" + +# --- PASO 4: Reiniciar sshd --- +Log "PASO 4: Reiniciando sshd..." +Stop-Service sshd -Force -ErrorAction SilentlyContinue +Start-Sleep -Seconds 2 +Start-Service sshd -ErrorAction SilentlyContinue +Log "sshd reiniciado." + +# --- PASO 5: Verificar --- +$listening = netstat -an | Select-String ":$sshPort\s+.*LISTEN" +if ($listening) { + Log "VERIFICADO: $hn escuchando en puerto $sshPort" +} else { + Log "WARN: Puerto $sshPort no detectado en netstat" +} + +Log "==========================================" +Log "SETUP COMPLETADO — $hn : $sshPort" +Log "==========================================" diff --git a/tools/adn/sondas/payloads/sonda.ps1 b/tools/adn/sondas/payloads/sonda.ps1 new file mode 100644 index 00000000..d8898e3b --- /dev/null +++ b/tools/adn/sondas/payloads/sonda.ps1 @@ -0,0 +1,48 @@ +function Log-Msg { + param([string]$Message) + Write-Host $Message -ForegroundColor Cyan + try { + Invoke-RestMethod -Uri "http://10.0.10.8:8000/log" -Method Post -Body @{msg=$Message} -UseBasicParsing -ErrorAction SilentlyContinue | Out-Null + } catch {} +} + +Log-Msg "==========================================================" +Log-Msg "SONDA DE DIAGNOSTICO — RELEVAMIENTO DEL SISTEMA" +Log-Msg "==========================================================" + +Log-Msg "Hostname: $env:COMPUTERNAME" +Log-Msg "OS: $((Get-CimInstance Win32_OperatingSystem).Caption)" +Log-Msg "Arquitectura: $((Get-CimInstance Win32_OperatingSystem).OSArchitecture)" + +# Red +$ips = Get-NetIPAddress -AddressFamily IPv4 | Where-Object InterfaceAlias -notmatch 'Loopback' +foreach ($ip in $ips) { + Log-Msg "Red [$($ip.InterfaceAlias)]: $($ip.IPAddress)/$($ip.PrefixLength)" +} + +# Dominio +try { + $domain = (Get-CimInstance Win32_ComputerSystem).Domain + $inDomain = (Get-CimInstance Win32_ComputerSystem).PartOfDomain + Log-Msg "Dominio: $domain (Unido: $inDomain)" +} catch { + Log-Msg "Dominio: No disponible" +} + +# Servicios clave +$servicios = @('sshd', 'MSSQLSERVER', 'NTDS', 'DNS') +foreach ($svc in $servicios) { + $s = Get-Service -Name $svc -ErrorAction SilentlyContinue + if ($s) { + Log-Msg "Servicio [$svc]: $($s.Status)" + } +} + +# Firewall SSH +$rule = Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue +Log-Msg "Firewall SSH (TCP 22): $(if ($rule) { 'Habilitado' } else { 'No configurado' })" + +Log-Msg "==========================================================" +Log-Msg "SONDA COMPLETADA." +Log-Msg "==========================================================" +exit diff --git a/tools/adn/sondas/payloads/sql_sysadmin_fix.ps1 b/tools/adn/sondas/payloads/sql_sysadmin_fix.ps1 new file mode 100644 index 00000000..e393239b --- /dev/null +++ b/tools/adn/sondas/payloads/sql_sysadmin_fix.ps1 @@ -0,0 +1,42 @@ +$ErrorActionPreference = "Continue" + +function Log($msg) { + $ts = Get-Date -Format "HH:mm:ss" + Write-Host "[$ts] $msg" -ForegroundColor Cyan + try { Invoke-RestMethod -Uri "http://10.0.10.8:8000/log" -Method Post -Body @{msg="[$env:COMPUTERNAME] $msg"} -UseBasicParsing -ErrorAction SilentlyContinue | Out-Null } catch {} +} + +Log "==========================================" +Log "SQL SYSADMIN FIX — Agregando DASUTEN\admindasu" +Log "==========================================" + +# Paso 1: Parar SQL Server +Log "PASO 1: Deteniendo MSSQLSERVER..." +net stop MSSQLSERVER /y 2>&1 | Out-Null +Start-Sleep -Seconds 3 + +# Paso 2: Iniciar en modo single-user +Log "PASO 2: Iniciando en modo single-user..." +net start MSSQLSERVER /m 2>&1 | Out-Null +Start-Sleep -Seconds 5 + +# Paso 3: Agregar sysadmin +Log "PASO 3: Agregando DASUTEN\admindasu como sysadmin..." +$result = sqlcmd -S localhost -E -Q "ALTER SERVER ROLE sysadmin ADD MEMBER [DASUTEN\admindasu]; SELECT 'SYSADMIN_OK' AS resultado;" -W 2>&1 +Log "Resultado: $result" + +# Paso 4: Reiniciar normal +Log "PASO 4: Reiniciando SQL Server en modo normal..." +net stop MSSQLSERVER /y 2>&1 | Out-Null +Start-Sleep -Seconds 3 +net start MSSQLSERVER 2>&1 | Out-Null +Start-Sleep -Seconds 5 + +# Paso 5: Verificar +Log "PASO 5: Verificando acceso..." +$check = sqlcmd -S localhost -E -Q "SELECT SYSTEM_USER AS usuario, IS_SRVROLEMEMBER('sysadmin') AS es_sysadmin" -W 2>&1 +Log "Verificacion: $check" + +Log "==========================================" +Log "SQL SYSADMIN FIX COMPLETADO" +Log "==========================================" diff --git a/tools/adn/sondas/payloads/ssh_port7022.ps1 b/tools/adn/sondas/payloads/ssh_port7022.ps1 new file mode 100644 index 00000000..50108189 --- /dev/null +++ b/tools/adn/sondas/payloads/ssh_port7022.ps1 @@ -0,0 +1,46 @@ +function Log-Msg { + param([string]$Message) + Write-Host $Message -ForegroundColor Cyan + try { + Invoke-RestMethod -Uri "http://10.0.10.8:8000/log" -Method Post -Body @{msg=$Message} -UseBasicParsing -ErrorAction SilentlyContinue | Out-Null + } catch {} +} + +Log-Msg "==========================================================" +Log-Msg "CONFIGURANDO SSH EN PUERTO 7022" +Log-Msg "==========================================================" + +$cfg = "C:\ProgramData\ssh\sshd_config" + +try { + # Leer config, quitar cualquier linea Port anterior + $lines = Get-Content $cfg | Where-Object { $_ -notmatch '^\s*#?\s*Port\s+\d+' } + + # Agregar Port 7022 al inicio + $lines = @("Port 7022") + $lines + + # Escribir config limpia + $lines | Set-Content $cfg -Force + Log-Msg "sshd_config actualizado: Port 7022" + + # Firewall: agregar 7022, quitar 22 + New-NetFirewallRule -Name 'SSH-7022' -DisplayName 'SSH 7022' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 7022 -ErrorAction SilentlyContinue | Out-Null + Remove-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -ErrorAction SilentlyContinue + Log-Msg "Firewall actualizado: 7022 abierto, 22 cerrado" + + # Reiniciar servicio + Stop-Service sshd -Force -ErrorAction SilentlyContinue + Start-Sleep -Seconds 2 + Start-Service sshd + Log-Msg "Servicio sshd reiniciado OK" + + $port = (Get-Content $cfg | Select-String "^Port").ToString().Trim() + Log-Msg "Verificacion: $port" +} catch { + Log-Msg "ERROR: $_" +} + +Log-Msg "==========================================================" +Log-Msg "OPERACION COMPLETADA" +Log-Msg "==========================================================" +return diff --git a/tools/adn/sondas/payloads/zombi_agent.bat b/tools/adn/sondas/payloads/zombi_agent.bat new file mode 100644 index 00000000..086676fa --- /dev/null +++ b/tools/adn/sondas/payloads/zombi_agent.bat @@ -0,0 +1,38 @@ +@echo off +chcp 65001 >nul 2>&1 +title W-ZOMBI Agent - Conectado a srv-ns8 +color 0A + +echo ====================================================== +echo W-ZOMBI Agent — Esperando ordenes de srv-ns8 +echo ====================================================== +echo. +echo Este agente se queda abierto y ejecuta lo que +echo srv-ns8 le envie. NO cerrar esta ventana. +echo. +echo Servidor: http://10.0.10.8:8000 +echo ====================================================== +echo. + +:LOOP +echo [%TIME%] Consultando payload activo... + +REM Descargar y ejecutar el payload activo via PowerShell +powershell -ExecutionPolicy Bypass -Command ^ + "$ErrorActionPreference='Continue'; " ^ + "try { " ^ + " $script = (New-Object Net.WebClient).DownloadString('http://10.0.10.8:8000/payloads/activo.ps1'); " ^ + " if ($script -and $script.Trim() -ne '') { " ^ + " Write-Host '[ZOMBI] Ejecutando payload...' -ForegroundColor Green; " ^ + " Invoke-Expression $script " ^ + " } else { " ^ + " Write-Host '[ZOMBI] Sin payload pendiente.' -ForegroundColor DarkGray " ^ + " } " ^ + "} catch { " ^ + " Write-Host '[ZOMBI] Sin conexion a srv-ns8, reintentando...' -ForegroundColor Yellow " ^ + "}" + +echo. +echo [%TIME%] Esperando 15 segundos... (CTRL+C para salir) +timeout /t 15 /nobreak >nul +goto LOOP diff --git a/tools/w-zombi/servidor.rb b/tools/adn/sondas/servidor.rb similarity index 100% rename from tools/w-zombi/servidor.rb rename to tools/adn/sondas/servidor.rb