elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Consola por pipe crashea en windows 8 y versiones adelantadas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consola por pipe crashea en windows 8 y versiones adelantadas  (Leído 4,106 veces)
illuminat3d

Desconectado Desconectado

Mensajes: 231



Ver Perfil WWW
Consola por pipe crashea en windows 8 y versiones adelantadas
« en: 4 Abril 2016, 20:57 pm »

Hola a ver si alguien me hecha una mano tengo este codigo para ejecutar y leer la salida de los comandos en windows, se ejecutan y se ven perfectamente en versiones de XP hasta windows 7 he probado.. ahora en windows 8 y 10 crashea en un loop :

Código
  1.   Do
  2.       ret = ReadFile(hReadPipe, strBuff, 256, lngBytesRead, 0&)
  3.       mOutputs = mOutputs & Left(strBuff, lngBytesRead)
  4.   Loop While ret <> 0
  5.  

Código
  1.  
  2. Public Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As Any, ByVal nSize As Long) As Long
  3.  
  4. Public Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
  5.  
  6. Public Declare Function CloseHandle Lib "kernel32" (ByVal hHandle As Long) As Long
  7.  
  8. Public Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
  9.  
  10.  
  11.  
  12. Public Type PROCESS_INFORMATION
  13.  hProcess     As Long
  14.  hThread      As Long
  15.  dwProcessId  As Long
  16.  dwThreadId   As Long
  17. End Type
  18.  
  19. Public Type STARTUPINFO
  20.  cb                As Long
  21.  lpReserved        As Long
  22.  lpDesktop         As Long
  23.  lpTitle           As Long
  24.  dwX               As Long
  25.  dwY               As Long
  26.  dwXSize           As Long
  27.  dwYSize           As Long
  28.  dwXCountChars     As Long
  29.  dwYCountChars     As Long
  30.  dwFillAttribute   As Long
  31.  dwFlags           As Long
  32.  wShowWindow       As Integer
  33.  cbReserved2       As Integer
  34.  lpReserved2       As Long
  35.  hStdInput         As Long
  36.  hStdOutput        As Long
  37.  hStdError         As Long
  38. End Type
  39.  
  40. Public Type SECURITY_ATTRIBUTES
  41.  nLength                As Long
  42.  lpSecurityDescriptor   As Long
  43.  bInheritHandle         As Long
  44. End Type
  45.  
  46.  
  47.  
  48. Public Function CMD(ByVal Comando As String) As String
  49. On Error Resume Next
  50.   Dim proc           As PROCESS_INFORMATION
  51.   Dim ret            As Long
  52.   Dim start          As STARTUPINFO
  53.   Dim sa             As SECURITY_ATTRIBUTES
  54.   Dim hReadPipe      As Long
  55.   Dim hWritePipe     As Long
  56.   Dim lngBytesRead   As Long
  57.   Dim strBuff        As String * 256
  58.  
  59.   sa.nLength = Len(sa)
  60.   sa.bInheritHandle = 1&
  61.   sa.lpSecurityDescriptor = 0&
  62.   ret = CreatePipe(hReadPipe, hWritePipe, sa, 0)
  63.  
  64.   If ret = 0 Then CMD = "Fallo de Conexion con Proceso. Error: " & Err.LastDllError: Exit Function
  65.  
  66.   start.cb = Len(start)
  67.   start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
  68.   start.hStdOutput = hWritePipe
  69.   start.hStdError = hWritePipe
  70.  
  71.   mCommand = Environ("COMSPEC") + " /c " + Comando
  72.  
  73.   ret& = CreateProcessA(0&, mCommand, sa, sa, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
  74.  
  75.   If ret <> 1 Then CMD = "Archivo o comando no encontrado": Exit Function
  76.  
  77.   ret = CloseHandle(hWritePipe)
  78.   mOutputs = ""
  79.  
  80.   ' CRASHEA En versiones mayores a Windows 7
  81.   If InStr(1, SO, "Windows 8") Or InStr(1, SO, "Windows 10") Then Exit Function
  82.  
  83.   Do
  84.       ret = ReadFile(hReadPipe, strBuff, 256, lngBytesRead, 0&)
  85.       mOutputs = mOutputs & Left(strBuff, lngBytesRead)
  86.   Loop While ret <> 0
  87.   ret = CloseHandle(proc.hProcess)
  88.   ret = CloseHandle(proc.hThread)
  89.   ret = CloseHandle(hReadPipe)
  90.  
  91.   CMD = mOutputs
  92.  
  93.   Exit Function
  94. End Function
  95.  
  96.  

A ver si alguien lo puede probar quizas puede ser por otra cosa! un saludo! :P


En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #1 en: 5 Abril 2016, 10:37 am »

En realidad es una forma un poco chapucera de usar pipes  >:D

¿Tu programa sería capaz de ejecutar la instrucción "CD.." y mantenerse en esa ruta en ejecutar la siguiente instrucción?

Usa los pipes de manera eficiente amigo :)

un saludo.


En línea

Un byte a la izquierda.
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #2 en: 5 Abril 2016, 18:31 pm »

En realidad es una forma un poco chapucera de usar pipes  >:D

¿Tu programa sería capaz de ejecutar la instrucción "CD.." y mantenerse en esa ruta en ejecutar la siguiente instrucción?

Usa los pipes de manera eficiente amigo :)

un saludo.

¿Por qué no nos ilustras un poco con tu sabiduría? En lugar de criticar  :¬¬
« Última modificación: 5 Abril 2016, 19:32 pm por Lekim » En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #3 en: 6 Abril 2016, 09:46 am »

¿Por qué no nos ilustras un poco con tu sabiduría? En lugar de criticar  :¬¬

Por supuesto que te ilustro  >:D

Aquí tienes mi código en ASM de una verdadera Shell Remota que usa pipes de manera eficiente.

Código
  1. ;///////////////////////////////////////////////////////////////////////////////////////////////
  2. ;//////                                         FUNCIONES SHELL REMOTA                /////////
  3. ;//////////////////////////////////////////////////////////////////////////////////////////////
  4. proc IniciarShell
  5.     ; Funcion que inicializa la shell remota
  6.     mov [saPipe.nLength], 12
  7.     mov [saPipe.lpSecurityDescriptor], NULL
  8.     mov [saPipe.bInheritHandle], TRUE
  9.  
  10.     invoke CreatePipe, stdinRd,  stdinWr,  saPipe, 0
  11.     invoke CreatePipe, stdoutRd, stdoutWr, saPipe, 0
  12.  
  13.      invoke GetStartupInfoA, sInfo
  14.  
  15.      mov eax, STARTF_USESTDHANDLES
  16.      mov ebx, STARTF_USESHOWWINDOW
  17.      or eax, ebx
  18.  
  19.      mov [sInfo.dwFlags], eax
  20.      mov [sInfo.wShowWindow], SW_HIDE
  21.      mov eax, [stdoutWr]
  22.      mov [sInfo.hStdOutput] , eax
  23.      mov eax, [stdoutWr]
  24.      mov [sInfo.hStdError]  , eax
  25.      mov eax, [stdinRd]
  26.      mov [sInfo.hStdInput]  , eax
  27.  
  28.      invoke GlobalAlloc, LPTR, 30
  29.      mov [RutaCmd], eax
  30.  
  31.      invoke GetSystemDirectoryA, [RutaCmd], 29
  32.  
  33.      invoke lstrcat, [RutaCmd], '\cmd.exe'
  34.  
  35.      invoke CreateProcessA, NULL, [RutaCmd], NULL, NULL, TRUE, 0, NULL, NULL, sInfo, pInfo
  36.  
  37.      invoke GlobalFree, [RutaCmd]
  38.  
  39.      invoke Sleep, 150
  40.  
  41.      stdcall LeerShell ; Llamamos a LEER PIPE para enviar la primera lectura
  42.      ret
  43. endp
  44.  
  45. proc EscShell,Comando,Longitud
  46.     mov [bEscritos],NULL
  47.     invoke WriteFile, [stdinWr],[Comando], [Longitud], bEscritos, NULL
  48.  
  49.     mov [bEscritos],NULL
  50.     invoke WriteFile, [stdinWr],varSaltoLinea, 2, bEscritos, NULL
  51.  
  52.     invoke Sleep, 100
  53.  
  54.     stdcall LeerShell
  55.  
  56.     ret
  57.  
  58.     varSaltoLinea     db 13,10 ; salto de linea para el PIPE
  59. endp
  60.  
  61. proc TerminarShell
  62.     ; Funcion que cierra la shell remota
  63.     invoke TerminateProcess, [pInfo.hProcess], 0
  64.     invoke CloseHandle, [stdinRd]
  65.     invoke CloseHandle, [stdinWr]
  66.     invoke CloseHandle, [stdoutRd]
  67.     invoke CloseHandle, [stdoutWr]
  68.     invoke Sleep, 100
  69.     ret
  70. endp
  71.  
  72. proc LeerShell
  73.     ; Funcion que lee la shell remota
  74.     mov [totalLeido], 0
  75.     mov [totalLeer], 0
  76.  
  77.     invoke PeekNamedPipe, [stdoutRd], NULL, NULL, NULL, totalLeer, NULL
  78.  
  79.     .if [totalLeer] = 0
  80. ; No hay que leer.
  81. ret
  82.     .endif
  83.  
  84.     LP_leer:
  85. invoke GlobalAlloc, LPTR, 1050
  86. mov [bufLeido], eax
  87.  
  88. invoke GlobalAlloc, LPTR, 1050
  89. mov [envLeido], eax
  90.  
  91. invoke ReadFile, [stdoutRd], [bufLeido], 1024, bUsadosOK, NULL
  92.  
  93. invoke lstrcat, [envLeido], 'SHEL%%%%'
  94. invoke lstrcat, [envLeido], [bufLeido]
  95.  
  96. invoke send, [hsock], [envLeido], 1024, 0
  97.  
  98. mov edx, [bUsadosOK]
  99.  
  100. add [totalLeido], edx
  101.  
  102. invoke GlobalFree, [bufLeido]
  103. invoke GlobalFree, [envLeido]
  104.  
  105. invoke Sleep, 100
  106.  
  107. cmp [bUsadosOK], 1024
  108. je  LP_leer
  109. mov edx, [totalLeer]
  110. cmp [totalLeido], edx
  111. jl  LP_leer
  112.  
  113. ret
  114. endp
  115. ;//////////////////////////////////////////////////////////////////////////////////////////////
  116. ;//////////////////////////////////////////////////////////////////////////////////////////////

Además de que el código que el aporta, no es suyo... no sé en donde lo vi posteado.

saludos.
« Última modificación: 6 Abril 2016, 09:48 am por fary » En línea

Un byte a la izquierda.
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #4 en: 6 Abril 2016, 10:57 am »

Por supuesto que te ilustro  >:D

Aquí tienes mi código en ASM de una verdadera Shell Remota que usa pipes de manera eficiente.

...

¿Y en VB?, porque te recuerdo que esto es el foro para Visual Basic y aquí el amigo programa en VB. XD
En línea

illuminat3d

Desconectado Desconectado

Mensajes: 231



Ver Perfil WWW
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #5 en: 6 Abril 2016, 14:00 pm »

Muchas gracias a los dos, mis conocimientos en VB no son tan avanzados Fary pero si me gustaria que publicaran algun arreglo en VB sobre el codigo, gracias Lekim por apoyarme jajaja!  :-*

PD : Tambien tengo un problema con el envio de datos por winsock y es que en local me llegan todos los datos correctamente a veces al segundo intento pero despues cuando intento de manera remota me faltan datos y no se todavia a que debe ser, ya depure el codigo y si por ejemplo hay 60 procesos, solo llegan 32 auqnue en el servidor liste los 60 pero el envio de datos pierde datos al enviarselos al cliente a que puede deberse? y eso que envio los datos partidos con un tamaño de 8192 a veces ni supera esa cantidad y es lo mismo pierde los datos.

Saludos compañeros!  :-[
En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #6 en: 6 Abril 2016, 22:04 pm »

¿Y en VB?, porque te recuerdo que esto es el foro para Visual Basic y aquí el amigo programa en VB. XD

Jajajaja, en VB6 o en cualquier otro lenguaje se usan las mismas funciones... Pero vamos que si insistes y tienes mucho interés lo programo.

Saludos.
En línea

Un byte a la izquierda.
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #7 en: 7 Abril 2016, 13:00 pm »

Jajajaja, en VB6 o en cualquier otro lenguaje se usan las mismas funciones... Pero vamos que si insistes y tienes mucho interés lo programo.

Saludos.

El problema no es que tenga las mismas funciones o no. El problema está en saber interpretar el código ASM y saber lo suficiente en VB para pasar de uno a otro. Y además  concretamente lo que pide illuminat3d. Pienso yo vamos XD. No es pos fastidiar.
En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #8 en: 7 Abril 2016, 13:45 pm »

El problema no es que tenga las mismas funciones o no. El problema está en saber interpretar el código ASM y saber lo suficiente en VB para pasar de uno a otro. Y además  concretamente lo que pide illuminat3d. Pienso yo vamos XD. No es pos fastidiar.

El código se puede pasar perfectamente a VB6 sin tener ni idea de ASM... son solo API de windows lo que se ve en el código, de ensamblador se podría decir que no hay casi nada de intrucciones.

Parate a mirarlo 1 minuto y lo vas a comprobar por ti mismo.

saludos.
En línea

Un byte a la izquierda.
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Consola por pipe crashea en windows 8 y versiones adelantadas
« Respuesta #9 en: 7 Abril 2016, 19:31 pm »

Pues yo no entiendo no papa XD
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO] CMD Pipe en Windows 7
Programación Visual Basic
aaronduran2 1 2,332 Último mensaje 4 Octubre 2010, 16:26 pm
por aaronduran2
Mi pc va muy lento, POR FAVOR AYUDA y gracias adelantadas
Seguridad
lord-xavi 7 5,937 Último mensaje 10 Diciembre 2010, 22:44 pm
por lord-xavi
Microsoft reduce a tres las versiones de Windows 8: Windows 8, Pro y RT
Noticias
wolfbcn 1 2,065 Último mensaje 17 Abril 2012, 14:34 pm
por WHK
Mini-lib para hacer graficos en consola (versiones en C y C++) « 1 2 »
Programación C/C++
HardForo 10 8,118 Último mensaje 23 Abril 2016, 21:02 pm
por HardForo
Windows 10 crashea o hace amagos
Windows
AlbertoPerez 7 4,673 Último mensaje 28 Marzo 2017, 12:26 pm
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines