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 - rmdma()

#11
ASM / cast en asm
16 Febrero 2012, 11:14 AM
como puedo hacer para conertir un DWORD en un BYTE ?


Código ("fasm") [Seleccionar]

include 'win32ax.inc'

.data
        resultado dd ?
        titulo    db 'Suma',0

.code
        start:

            mov eax,2 ;
            mov ebx,5 ;
            mov [resultado], eax
            add ebx,[resultado]

            push 0
            push titulo
            push resultado
            push 0
            call [MessageBoxA]

            push 0
            call [ExitProcess]


.end start   



lo que quiero es convertir la variable resultado en un BYTE para poder pasarsela como parametro a messageboxa, aer es sin mas estoy aprendiendo asm
#12
busca sobre interceptar las syscalls, tendras que mirarte como maneja los modulos el kernel, busca sobre programar modulos del kernel linux o LKM o asi
#13
(gdb) r $(perl -e 'print "A"x[b]42[/b] , "B"x4')
The program being debugged has been started already.
Start it from the beginning? (y o n) y
Starting program: /home/cebanc/vuln $(perl -e 'print "A"x42 , "B"x4')

Program received signal SIGSEGV, Segmentation fault.
0x08004242 in ?? ()
(gdb) i r
eax            0xbffff280 -1073745280
ecx            0x0 0
edx            0xbffff54f -1073744561
ebx            0x28bff4 2670580
esp            0xbffff2b0 0xbffff2b0
[b]ebp            0x42424141 0x42424141[/b]
esi            0x0 0
edi            0x0 0
[b]eip            0x8004242 0x8004242[/b]


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

(gdb) r $(perl -e 'print "A"x[b]44 [/b], "B"x4')
The program being debugged has been started already.
Start it from the beginning? (y o n) y
Starting program: /home/cebanc/vuln $(perl -e 'print "A"x44 , "B"x4')

Program received signal SIGSEGV, Segmentation fault.
0x080483dd in overflow ()
(gdb) i r
eax            0xbffff280 -1073745280
ecx            0x0 0
edx            0xbffff54f -1073744561
ebx            0x28bff4 2670580
esp            0xbffff2ac 0xbffff2ac
[b]ebp            0x41414141 0x41414141[/b]
esi            0x0 0
edi            0x0 0
[b]eip            0x80483dd 0x80483dd <overflow+25>[/b]
(gdb)

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

(gdb) r $(perl -e 'print "A"x[b]43[/b] , "B"x4')
The program being debugged has been started already.
Start it from the beginning? (y o n) y
Starting program: /home/cebanc/vuln $(perl -e 'print "A"x43 , "B"x4')

Program received signal SIGSEGV, Segmentation fault.
0x00424242 in ?? ()
(gdb) i r
eax            0xbffff280 -1073745280
ecx            0x0 0
edx            0xbffff54f -1073744561
ebx            0x28bff4 2670580
esp            0xbffff2b0 0xbffff2b0
[b]ebp            0x42414141 0x42414141[/b]
esi            0x0 0
edi            0x0 0
[b]eip            0x424242 0x424242[/b]
(gdb)


mi pregunta es, que es lo q esta pasando? por que eip derrepente tiene una direccion menor de lo normal y por que me sobrescribe alos 46 en vez d en los 40 que os sobrescribe a vosotros, alguien me puede hacer un dibujo de como estaria el stack al principio de ejecucion y despues de ser sobrescrito todo x favor, en la teoria lo entiendo o me da la sensacion de que lo e entendido pero llego a la practica y zass nose..
#14
#include <stdio.h>
#include <string.h>

fvuln(char *temp1, char *temp2)
{
  char name[512];

  strcpy(name, temp2);
  printf("Hello, %s %s\n", temp1, name);
}

int main(int argc, char *argv[])
{
  fvuln(argv[1],argv[2]);
  printf("Bye %s %s\n", argv[1], argv[2]);

  return 0;
}


el programa es este en concreto el q trato de explotar, estoy siguiendo un paper de los SET, te voy a dejar el link del paper

http://www.set-ezine.org/ezines/set/37/0x05.txt



gdb> p system
0x168950

#15
entonces el problema es la direccion corta o los bytes nulos o las 2?

grcias x kontestar
#16
estoy trabajando bajo mac pero tngo una maquina virtual con ubuntu 11,  como puedo hacer para cambiar byte nulos?
#17
buenas xaki

estoy tratando d explotar un programilla, peo al sacar la direccion de system, me duelve una direccion de 3bytes , system()->0x168950 , el problema es k no me accede a esa direccion por que supongo que correra parte de otra direccion pa llenar los 4 bytes, nose haber si alguien puede echarme un cable!