본문 바로가기

Wargame/pwnable.kr9

[Grotesque] wtf 100점 밖에 안되는 문제이다 ... 바이너리는 아주 간단한 x64 bof 취약점을 가진다. 전에 unexploitable 풀때도 버퍼링 문제가 있었는데 그때는 그냥 sigreturn을 사용해서 해당 문제를 넘겨 버렸었다.그런데 이 문제는 애초에 버퍼링을 해결하는 것이 문제 !!! 문제는 c나 python으로 popen해서 통신할 때 wrtie를 해주더라도 버퍼링 때문에 계속해서 read함수에 걸려있다는 것이다 ㅜ버퍼링 때문에 다음 코드 진행이 안됨 ㅡㅡ;;; 삽질 끝에 방법을 알았다 ... strace -f로 자식프로세스의 시스템콜을 보면 4096byte가 들어올때까지 read하는 것 같았다.그래서 나머지를 더미로 채워넣어서 4096 넣으니 버퍼링 문제가 해결된다;;; 이게 unexploitable에도.. 2015. 2. 25.
[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.