0x04 pwnable(130)
-
ASLR 적용 된 바이너리 ASLR 해제하기 2~
이번문제는 1편에서 이어지게 됩니다. 궁금증이 하나 생기지 않나요? 음.. 저는 이런 궁금증이 생깁니다. 1. ASLR이 랜덤한 주소가 되게 하는 기법인데 그 주소를 고정 시켰어. 왜 고정 시킨건데? 2. 고정 안시키면 왜 안되? 내가 그냥 스택보면서 놀면 되는거 아냐? 이것에 대한 궁금증을 풀기 위해 ASLR이 적용 된 그 바이너리로 놀아보도록 하겠습니다. 다시 소스코드를 한번 살펴보죠.일단 포너블을 위한 소스코드니까요 ㅎ.ㅎ #define _CRT_SECURE_NO_WARNINGS#include #include #include #include int main(int argc, char*argv[]){char arr[10];int i = 0; printf("ASLR Test\n");printf("목표 ..
2017.12.06 -
ASLR 적용 된 바이너리 ASLR 해제하기~
오늘 진행해 볼 삽질은 ASLR이 적용된 윈도우즈 프로그램을 해제하는 방법에 대해 설명해볼까합니다. ASLR(Address SpaceLayout Randomization) Windows XP 이상부터 적용되는 기법입니다.프로그램이 로드 되는 상대주소를 랜덤으로 바꾸어서 pwn하기에 어렵게 하는 기법이라고 합니다. 작업한 환경은 Visual Studio Community 2017 버전입니다. 알고 계시면 좋은 것이 있는데 Visual Studio Community 2017버전은 기본적으로 빌드를 진행 하게 되면 임의주소로 컴파일이 되게 설정이 되어 있습니다. 그림을 보죠. "임의 기준 주소"에 예가 되어있는 것이 ASLR 입니다. 그렇다면 지금은 ASLR로 프로그램을 빌드 해야하기 때문에 그대로 설정 값을..
2017.12.06 -
bof 기초
#include #include main(){int crap;int check;char buf[20];fgets(buf,45,stdin);// buf 채운 뒤 0xdeadbeef 해야 한다.if(check == 0xdeadbeef) // vuln {setreuid(3095,3095);system("/bin/sh");}return 0;} (gdb) set disassembly-flavor intel(gdb) disas mainDump of assembler code for function main:0x08048490 : push ebp0x08048491 : mov ebp,esp0x08048493 : sub esp,0x380x08048496 : sub esp,0x40x08048499 : push ds:0x8..
2017.11.27 -
rtl 공부 2
#include main(int argc, char *argv[]){ long i=0x1234567; char buf[1024]; setreuid( 3094, 3094 ); if(argc > 1) strcpy(buf,argv[1]); if(i != 0x1234567) { printf(" Warnning: Buffer Overflow !!! \n"); kill(0,11); }} 0x418 = 1048(dec) 0x400 = 1024(dec) buf[1024]에서는 0x400은 실제 값 + 0x18은 더미값(24 dec) 0xbfffdf30: 0x08048308 0x42130a14 0xbfffdf48 0x01234567여기만 안건들면 되겠는데 A가 들어가는 시작주소가 0xbfffdb30 인데 ASLR 적용되..
2017.11.27 -
rtl 공부
ldd -> libc 경로 알 수 있음 (ldd는 지정한 프로그램의 라이브러리 의존성을 확인할 때 사용한다고 한다.)지금 내 프로그램에서 사용중인 라이브러리를 알기 위해 ldd ./attackme를 명령으로 입력한 것 사용중인 라이브러리 libc.so.6 ldd attackme 원리:ldd attackme를 하게 되면 베이스주소를 알 수가 있고 베이스주소만으로는 진행할 수 없기 때문에 해당 라이브러리 libc.so.6안에 있는 /bin/sh의 오프셋 주소를 얻어와서 베이스 + 오프셋 하여 '/bin/sh'이 등록되어 있는 메모리 주소를 알아내야 한다.즉, libc내의 함수주소를 얻어오는 거다. 그 주소를 알아냈다면, dummy와 system + dummy + bin/sh의 오프셋을 이용하여 해당 프로그램..
2017.11.27 -
Main HEAP and Thread HEAP
#include #include #include #include #include //this Function pronounced, return value is void Pointer// use of one arguments is void pointer arg // void pointer means freedom return value.void* threadFunc(void *arg); int main(int argc, char*argv[]){// thread pthread_t t1; void *s;int ret;char *addr;// GET process IDprintf("W3lcome to per thread arena example : %d\n",getpid() ); printf("Before ma..
2017.10.30