본문 바로가기

해커스쿨 LOB ( skeleton -> golem ) by ORANG LOB_skeleton[skeleton@localhost skeleton]$ bash2[skeleton@localhost skeleton]$ lsgolem golem.c[skeleton@localhost skeleton]$ cat golem.c/* The Lord of the BOF : The Fellowship of the BOF - golem - stack destroyer*/ #include #include extern char **environ; main(int argc, char *argv[]){char buffer[40];int i; if(argc < 2){printf("argv error\n");exit(0);} if(argv[1][47] != '\xbf'){printf("stack is s.. 더보기
overthewire :: Vortex level4 by ORANG if(argc) exit(0); 의 조건을 우회하는 방법을 몰라서 한참 헤맸다 execve함수를 통해, args는 NULL로 전달하고 env를 전달 arr[idx] 는 arr base + datatype*idx 로 계산 되기때문에 argv가 없으면 argv[3]을 env[3]으로 받아들이게 된다. 환경변수를 통해 전달하기 때문에, 메모리 값이 뒤죽박죽? 그냥 조금만 바꿔도 크게 바뀌었다 정확한 FSB 공격을 하기 힘들었던 부분.. 밑도 끝도 없는 삽질로 공격에 성공했다. 쉘코드를 환경변수에 올리고, 그 주소를 exit@got에 덮어씌우는 방법 사용 메모리가 계속 섞이길래 그냥 쉘코드 앞에 nop을 화끈하게 10만개 넣어줬다, 그리고 그냥 삽질해서 성공시킴.. 더보기
overthewire :: Vortex level3 by ORANG %esp+0x9c -> lpp%esp+0x98 -> tmp%esp+0x18 -> buf [nop+shellcode+nop] [*(exit@got)] 0x9c-0x18 바이트 더블 포인터 문제 -> lp에 *(exit@got)로 덮어씌워 exit@got에 buf(쉘코드)의 주소가 들어가게끔 한다.gdb 상에서 find 명령어를 통해 특정 메모리 주소를 찾는 방법이 있었음-> find 시작범위, 끝범위, 찾을 메모리 패턴 더보기
overthewire :: Vortex level2 by ORANG 더보기
overthewire :: Vortex level1 by ORANG 먼저 스택의 구조를 그려보면ptr이 buf[256]의 주소를 가리킵니다. 이후 소스를 보면.. while((x = getchar()) != EOF) { switch(x) { case '\n': print(buf, sizeof(buf)); continue; break; case '\\': ptr--; break; default: e(); if(ptr > buf + sizeof(buf)) continue; ptr++[0] = x; break; } } 이 부분을 통해 ptr의 값을 조절할 수 있겠네요'\\' 을 입력할 때마다 ptr-- 이고 ,default의 ptr++[0]=x; 부분을 통해 메모리 입력이 가능하네요 #define e(); if(((unsigned int)ptr & 0xff000000)==0x.. 더보기
overthewire :: Vortex level0 by ORANG vortex.labs.overthewire.org : 5842에 연결한 후, 4개의 unsigned integer를 입력받아 합을 입력하면 vortex1의 패스워드를 획득할 수 있다. 더보기
pwnable.kr :: md5_calculator 200pt by ORANG 보호되어 있는 글입니다. 더보기
pwnable.kr :: passcode 10pt by ORANG 보호되어 있는 글입니다. 더보기
pwnable.kr :: random 1pt by ORANG 보호되어 있는 글입니다. 더보기
pwnable.kr :: bof 5pt by ORANG 보호되어 있는 글입니다. 더보기