Hack/Pwnable
-
printf disassemblyHack/Pwnable 2015. 7. 12. 01:07
0x0804841d :push ebp 0x0804841e :mov ebp,esp 0x08048420 :and esp,0xfffffff0 0x08048423 :sub esp,0x20 0x08048426 :mov DWORD PTR [esp+0x1c],0x0 0x0804842e :mov eax,DWORD PTR [esp+0x1c] 0x08048432 :mov DWORD PTR [esp+0x4],eax 0x08048436 :mov DWORD PTR [esp],0x80484e0 0x0804843d :call 0x80482f0 0x08048442 :leave 0x08048443 :ret 어셈블리이다. 우선 esp에서 0x20을 빼준다.and esp,값으로 우릴 방해하긴하지만 ㅠㅠㅠ 일단 그렇게 가정을하자. 그리고 ..
-
Use After FreeHack/Pwnable 2015. 7. 8. 02:35
UAF 즉, Use After Free는 malloc으로 동적할당한것을 free하고 재사용을 할경우에 터지는 취약점이다. 대충 하나 예제를 보자 #include #include typedef struct samplestruct{int number;} sample; int main(){sample *one;sample *two;one = malloc(256);printf("[1] one-> number: %d\n", one->number);one->number = 54321;printf("[2] one->number : %d\n",one->number);free(one);two = malloc(256);printf("[3] two->number:%d\n",two->number);return 0; } sam..
-
ARM 공부Hack/Pwnable 2015. 7. 4. 08:49
ARM프로세스의 6개 특권모드 1개의 일반모드가 있다.프로세스 모드는 어떤 권한을 가지고 동작하는지를 나타낸다. User 모드: 일반 유저 앱을 수행할때 프로세서 동작모드 System 모드: User모드와 동일한 레지스터를 사용하지만 CPSR을 완전히 읽고 쓸수있는 특수모드 (Current Porgram Status Register) FIQ모드: 빠른 인터럽트 처리를 위한 프로세서 동작모드IRQ 모드: 일반적으로 사용되는 인터럽트를 처리하기위한 프로세서 동작모드SVC모드: 일반적으로 운영체제 커널이 동작하는 모드로, 리셋이나 소프트웨어 인터럽트가 발생하는 경우의 프로세서 동작모드Abort모드: 메모리 접근이 실패한경우의 동작모드Undefined모드: 프로세서가 정의되지않은 명령을 수행하려할때 수행되는 동..
-
Memory LeakHack/Pwnable 2015. 6. 27. 08:26
char* read_buffer(FILE *file, const int size){ int foo = 0; char* buf = (char*) malloc(size); if (buf == NULL) { return NULL; } if (fread(buf, 1u, size, file) != size) { return NULL; } return buf;} buf에서 malloc을통해 동적할당을 해준다. fread에서 읽기에 실패하면 NULL을 리턴하고, 그뒤에 return but;가 존재하는데여기서 malloc을 해줬지만 free를 해주지않았기에 메모리 릭이 발생한다. char *foo = (char *) malloc(100);char *bar = (char *) malloc(200);bar = foo; f..
-
stack canary for gccHack/Pwnable 2015. 6. 24. 23:31
-fstack-protector옵션을 주면 protected_func함수에만 SSP가 적용된다. 메인함수에는 아무것도 적용되있지 않다. protected_func함수이다. 잡다한것들이 많이 추가되어있다. __stack_chk_fail함수가 보이면 이것은 SSP가 제대로 적용된것이다. 카나리값은 보다시피 gs레지스터가 가리키는 세그먼트의 20번째 오프셋에 존재한다. 프로그램 실행마다 바뀌는게 단점이자... 장점? *Canary는 buf와 ebp사이에두어 까나리 변조가 시도되었을때, stack smashing detected가 발생하는데, __stack_chk_fail함수가 호출되기때문이다.
-
RTL(Return To Libc)Hack/Pwnable 2015. 6. 24. 21:51
RTL은 Return To Libc의 약자로, RET를 원하는 함수로 덮어 실행하게 하는 공격기법이다. 공격방식은 아래와 같다. Buf + SFP + system + dummy(exit) + /bin/sh 예제로보자. #include #include int main(int argc, char *argv[]){char buffer[40];strcpy(buffer,argv[1]);printf("%s\n",buffer);return 0;} 코드는 간단하다. argv[1]값을 buffer에 집어넣는다.우선 buffer[40] + dummy[8] + sfp[4] + ret[4]로, 총 56바이트이다. 56바이트에서 RET가 A로덮힌다. 그럼 52바이트를주고, 시스템함수로 덮어주면 된다. system함수와 exit..
-
메모리 보호기법 정리Hack/Pwnable 2015. 6. 16. 23:27
ASCII Armor -libc 영역을 보호하기위한 기법, 상위주소를 \x00으로 시작하게 만드는 기법으로, 라이브러리를 호출하는 BOF 공격시에, NULL바이트가 삽입된 주소로 접근할수가없게된다. Stack Canary - 버퍼와 RET사이에 BOF를 탐지하는역할을한다. Random Canary -프로그램이 실행될때마다 각각의 카나리를 삽입해 공격이힘들어지게한다. Null Canary -메모리상의 공격을 막기위해 카나리값을 NULL로 만든다. 공격코드에 널을 삽입할수없어 카나리의 접근불가 ASLR -메모리 주소를 랜덤하게 프로그램실행할때마다 바뀐다. Nx bit - DEP하고 비슷한개념으로, 스택에 실행권한을 주지않아 쉘코드가 실행되는것을방지한다. PIE - ASLR하고비슷하지만 PIE는 바이너리영역을..