일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 이분 탐색
- 이진 탐색
- fsb
- 스택
- 큐
- 연결리스트
- off by one
- OOB
- 스위핑 알고리즘
- 다이나믹 프로그래밍
- 포맷스트링버그
- 분할 정복
- 완전 탐색
- tcache
- BFS
- RTL
- DFS
- 동적 계획법
- House of Orange
- 에라토스테네스의 체
- 문자열 처리
- 이진트리
- ROP
- heap
- 브루트 포스
- BOF
- syscall
- 수학
- 투 포인터
- 백트래킹
- Today
- Total
목록BOF (23)
SDJ( 수돈재 아님 ㅎ )
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cuWa4H/btqFo6AlUMv/OGmStaKw6tMM5WHFRYDPU1/img.png)
보호기법은 그린벨트를 이루고 있다 바이너리를 분석해보자. int __cdecl main(int argc, const char **argv, const char **envp) { char v4[64]; // [rsp+0h] [rbp-58h] unsigned __int64 v5; // [rsp+48h] [rbp-10h] v5 = __readfsqword(0x28u); *v4 = 0LL; *&v4[16] = 0LL; *&v4[32] = 0LL; *&v4[48] = 0LL; while ( readline(v4, 0x40) ) { __printf_chk(1LL, v4); _IO_putc(0xA, _bss_start); } return 0; } 간단하게 main에서 readline(v4, 0x40)을 호출하고 리턴..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b9cmfw/btqDRMihbI8/OqkMB0VRSevak2ay5xHXX1/img.png)
동아리 포너블 과제 sf8-1 exploit write up 이번 힙 과제는 0ctf Quals 2017에 나온 Baby Heap 문제 바이너리이다. 파일 다운로드 와! 보호기법이 전부걸려있다. 바로 바이너리 분석으로~ 파일을 실행시키면 맨 처음 sub_B70함수로 임의의 주소에 mmap으로 0x1000만큼 할당을 해놓는다. 우리가 실행시킬 수 있는 메뉴는 크게 4가지가 존재한다.( 함수 이름은 내 맘대로 지었다. ) 1. Allocate 2. Fill 3. Delete 4. Dump 먼저 Allocate부터 보자. 분석을 하다보면 입력을 받는 데이터가 구조체 배열로 이루어진것을 알 수 있는데 나는 구조체를 다음과 같이 정의했다. struct note { int use_flag; int blank; lo..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cM5UXE/btqCKBpyCNU/pZHV3IYAkp7ShjF05kwv01/img.png)
파일 다운로드 보호기법을 보면 다음과 같다. 바이너리를 분석해보자. int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // ebx unsigned int v4; // eax unsigned int v6; // [rsp+Ch] [rbp-2Ch] while ( 1 ) { show_menu(); v3 = read_int("Operator: "); if ( !v3 ) break; v4 = read_int("x = "); ((void (__fastcall *)(_QWORD, unsigned int *))ope[v3 - 1])(v4, &v6); __printf_chk(1LL, "f(x) = %d\n", v6); } return 0;..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/68Lw2/btqCz4TfPNG/bKQD0fZVULAxaMhkkZUI40/img.png)
utctf끝나고 참가하지 못했던 zer0ctf의 pwn도 풀어보고자 바이너리를 찾아봤다. hipwn은 기본적은 warmup 문제다.. 보호기법은 Partial RELRO에 NX가 활성화 되어있다. hipwn은 statically linked 되어있기 때문에 syscall을 통해 exploit을 진행해야 한다. 문제에서 주어진 main.c를 보면 gets함수에서 bof가 발생하는 것을 볼 수 있다. 간단하게 execve("/bin/sh", 0, 0)을 실행시키는 코드를 만들어서 실행시키면 쉘을 딸 수 있다. exploit code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cDrWYi/btqCAPgSqoa/m02EKwuyIBV25N1MVN3iO1/img.png)
보호기법은 Partial RELRO와 NX만 걸려있는 매우 간단한 문제이다. IDA를 열어서 main을 보면 1 2 3 4 5 6 7 8 9 int __cdecl main(int argc, const char **argv, const char **envp) { char v4; // [rsp+0h] [rbp-70h] puts("I really like strings! Please give me a good one!"); gets(&v4, argv); puts("Thanks for the string"); return 1; } gets 함수에서 BOF가 터지는 것을 볼 수 있고, 이것을 이용해서 쉘을 따면 된다. 익스플로잇을 하기 전에 바이너리 함수를 보다보면 다음과 같은 함수를 찾을 수 있다 1 2 3 4..
보호되어 있는 글입니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/MiRYT/btqBJ7CFrF3/ddUNYusIU4zp4bIvUifKwk/img.png)
보호기법은 Partial RELRO, NX가 활성화 되어있다. 바이너리를 분석해보자. 먼저 sub_40074C()함수를 보면 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int sub_40074C() { int result; // eax char buf; // [rsp+0h] [rbp-590h] char v2; // [rsp+190h] [rbp-400h] puts("What say you now?"); read(0, &buf, 0x12CuLL); if ( !strncmp(&buf, "Everything intelligent is so boring.", 0x24uLL) ) result = sub_400705(&v2); else result = puts("What a ho-hum..