목록Write up (43)
ipwn
아 풀면서 진짜 재미있게 풀었??다고 해야하나 ? 풀면서 (스포방지)어떤 것들을 활용해서 이케이케 잘 엮어내서 풀어야 하는데 그 것들을 사용하는 능력 향상에도 도움이 된 것 같고 재밌었다. 근데 다만 힘들었던 건 100byte limit이 제일 난관이었던 것 같은데 딱 100byte에 맞춰서 풀어내서 기분이 좋았다. 이 문제를 통해 pwntw 100위 안에 입성도 하고 실력이 파바바바박 느는 것 같지는 않지만 서서히 늘어가는 것 같아서 기분이 굿. 더 노력해서 25살 안에 Yng & rich삶을 즐기고 싶다. 슈퍼비 최고~~~~_~_~ 나에 대해서 장점, 단점, 현재 내 상황, 그 외 등등 정리 해놓은 것들이 많이 있는데 그 것들을 꾸준히 보완하고, 더 채워나가면서 완벽한 나 자신을 만들고싶다. 지금 사..
보호기법 모든 보호기법이 다 걸려있음. 분석 int __cdecl main(int argc, const char **argv, const char **envp){ int sort_num; // eax unsigned int *buf_pointer; // edi unsigned int sort_cnt; // esi unsigned int idx; // esi unsigned int content; // ST08_4 int result; // eax unsigned int num; // [esp+18h] [ebp-74h] unsigned int sort_buf[8]; // [esp+1Ch] [ebp-70h] char name[64]; // [esp+3Ch] [ebp-50h] unsigned int canar..
보호기법 canary, nx걸려있음, 32bit static 컴파일 된 binary 분석 사실상 pwnable.tw풀면서 분석하기 제일 어렵지 않았나 하는 생각이 듦. vuln : 간단하게 말하자면 수인지, 연산자인지 검증하는 부분에서 첫 문자가 연산자인 경우는 체크하지 않음. vector : 이를 통해서 수들을 관리할 때 index 번호를 조작할 수 있음. -> Out Of Bound. 그 뒤에는 static 컴파일 된 binary이니, 널려있는 가젯들을 통해서 shellcode처럼 가젯잘 써주고 배치해주면 됨. shell. void __cdecl eval(number *num, char oper){ if ( oper == '+' ) { num->num[num->index - 2] += num->num..
보호기법 canary만 걸려있음, 32bit binary 분석 그냥 orw만 열어주고 나머지 syscall 다 닫음 + 입력받은 shellcode 실행한다. 걍 orw shellcode박으면 풀림.
보호기법 아무 보호기법 X, 32bit binary 분석 write syscall로 "Let's start CTF:"라는 문자열 출력 후 read syscall로 현 esp부터 0x3c만큼 값을 입력 받음. vuln : 입력은 0x3c만큼 받는데 ret하기 전에 올려주는 스택은 겨우 0x14 vector : 0. stack주소 leak.(스택에 뿌려져있는 포인터 값을 이용. 즉 uninitialized stack으로 leak)1. shellcode주소로 ret을 덮음. (read syscall 때 스택에 shellcode를 뿌려준 후 ret overwrite)2. shell.
바로 소스코드를 보자. #include #include #include #include #include #include #include unsigned long long rdtsc(){ asm("rdtsc");} char* slow_memcpy(char* dest, const char* src, size_t len){ int i; for (i=0; i= 64){ i = len / 64; len &= (64-1); while(i-- > 0){ __asm__ __volatile__ ( "movdqa (%0), %%xmm0\n" "movdqa 16(%0), %%xmm1\n" "movdqa 32(%0), %%xmm2\n" "movdqa 48(%0), %%xmm3\n" "movntps %%xmm0, (%1)\n"..
이번에 올릴 라업은 leg문제이다. 보면 어셈이랑 C코드 준다. 한 번 파일 열어서 읽어보자. #include #include int key1(){ asm("mov r3, pc\n");}int key2(){ asm( "push {r6}\n" "add r6, pc, $1\n" "bx r6\n" ".code 16\n" "mov r3, pc\n" "add r3, $0x4\n" "push {r3}\n" "pop {pc}\n" ".code 32\n" "pop {r6}\n" );}int key3(){ asm("mov r3, lr\n");}int main(){ int key=0; printf("Daddy has very strong arm! : "); scanf("%d", &key); if( (key1()+key2(..
이번에 쓸 라업은 input문제이다. 보아하니 여러가지 input을 받는 방법에 대해서 알고 있느냐를 물어보는 듯 하다. 바로 소스코드를 보도록 하겠다. #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just give me correct inputs then you will get the flag :)\n"); // argv if(argc != 100) return 0; if(strcmp(argv[..
정말 오랜만에 블로그 글을 쓴다. 아무튼 이번에 풀 문제는 coin1문제이다. 흠 그렇다 굉장히 간단한 문제이다. 왜 이제 라업을 쓰는지는 나도 잘 모르겠다. 처음 시작화면인데 게임 룰을 설명해준다.다들 사진만 보면 이해할 것 같지만 간단히 설명하자면처음에 총 코인 갯수와 도전할 수 있는 횟수를 정해주고, 도전할 수 있는 횟수만큼 내가 계속 코인을 부를 수 있다.그래서 10의 무게를 갖고있는 코인들 중 9의 무게를 갖는 가짜 코인을 찾아내면 된다. 그러니까 C번의 기회안에 N개의 코인 중 1개의 가짜코인을 찾아내면 된다는 말이다. 음.. 새벽이라 그런지 설명을 잘 못하는 것 같다. 나중에 덧붙여야지 암튼 게임을 시작해보겠다. 한 번만 찾으면 끝나고 플래그 주는 줄 알았는데 아니었다. 설명 다시 읽어보면 ..
ID : level12 PW : it is like this[level12@ftz level12]$ ls -ltotal 28-rwsr-x--- 1 level13 level12 13771 Mar 8 2003 attackme-rw-r----- 1 root level12 204 Mar 8 2003 hintdrwxr-xr-x 2 root level12 4096 Feb 24 2002 public_htmldrwxrwxr-x 2 root level12 4096 Feb 22 12:39 tmp hint파일을 한 번 읽어보겠다. #include #include #include int main( void ){ char str[256]; setreuid( 3093, 3093 ); printf( "문장을 입력하세요.\n" );..