본문 바로가기

2014/0712

[Rookiss] tiny_easy 먼저 readelf -h로 엔트리 포인트 확인 ... ( Entry point address: 0x8048054) 디버깅 결과 (gdb) b *0x8048054Breakpoint 1 at 0x8048054(gdb) rStarting program: /home/tiny_easy/tiny_easy Breakpoint 1, 0x08048054 in ?? ()(gdb) x/10i $eip=> 0x8048054: pop %eax 0x8048055: pop %edx 0x8048056: mov (%edx),%edx 0x8048058: call *%edx 0x804805a: add %al,(%eax) .....(gdb) x/4x $esp0xff998890: 0x00000001 0xff99a783 0x00000000 0.. 2014. 7. 28.
[Hacker's Secret] unexploitable 공유라이브러리의 ASLR을 해제하기 위해서 setarch `uname -m` -R $SHELL 명령어 실행 후 ldd를 확인보면 아래와 같이 고정되어있다.그런데 실제로 실행해보면 ASLR이 계속 적용되어있음 ... 공격 방법 1. puts로 실제 함수 주소를 얻어온다. (stage1)2. 다시 main으로 돌아가서 read 함수를 다시 이용한다. (stage2)3. '1'에서 얻어온 주소로 offset을 계산해서 execl을 호출시킨다. * x64에서 edi가 첫 번째 인자이므로 아래 가젯을 사용해서 puts의 인자를 조작한다. - 0x400610L: mov edi [esp+0x30] ; dec eax ; add esp 0x38 ;; - 0x601000 : puts@got- 0x400430 : puts@.. 2014. 7. 27.
[Rookiss] simple login 30개의 문자열을 입력 받아 base64 디코딩 후 md5한 결과가 일치하면 인증이된다. 그런데 디코딩된 결과값을 md5 해쉬 값으로 사용하는 것도 아니라서 ;;; 그냥 취약점을 찾아서 풀어준다 ; 취약점은 아래의 auth함수에서 발생한다. copyBuf에서 base64디코딩 결과 12byte를 덮을 수 있다. ret은 조작 불가능 하지만 ebp까지는 덮을 수 있다. BOOL __cdecl auth(int length) { char v2; // [sp+14h] [bp-14h]@1 char *s2; // [sp+1Ch] [bp-Ch]@1 int copyBuf; // [sp+20h] [bp-8h]@1 memcpy(©Buf, &input, length); s2 = (char *)calc_md5((int.. 2014. 7. 27.
[Rookiss] brain fuck int __cdecl do_brainfuck(char a1) { int result; // eax@1 int v2; // ebx@7 result = a1; switch ( a1 ) { case '>': result = hasAddr++ + 1; break; case ''*7 + ',' #'/bin/sh\x00'payload1_data = '/bin/sh\x00'#'\x00hs/nib/'#payload2 : read &putspayload2 = ''*4#payload4 : setvbuf_plt Python 2.7.7 (default, Jun 1 2014, 14:21:57) [MSC v.1500 64 bit (AMD64)] on win32Type "copyright", "credits" or "license.. 2014. 7. 26.