일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 포맷스트링버그
- 완전 탐색
- 연결리스트
- 동적 계획법
- 큐
- 백트래킹
- 이분 탐색
- tcache
- 브루트 포스
- off by one
- heap
- 스위핑 알고리즘
- fsb
- syscall
- BOF
- 스택
- 분할 정복
- 이진트리
- 문자열 처리
- DFS
- OOB
- 수학
- House of Orange
- BFS
- 에라토스테네스의 체
- ROP
- 이진 탐색
- 다이나믹 프로그래밍
- 투 포인터
- RTL
- Today
- Total
목록write-up (80)
SDJ( 수돈재 아님 ㅎ )
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.

보호기법은 다음과 Partial RELRO와 NX가 걸려있다. 바이너리를 분석해보자 speedrun 문제는 다 간단한 문제들이라 취약점은 쉽게 보인다. sub_400B60()함수를 보면 1 2 3 4 5 6 7 8 __int64 sub_400B60() { char buf; // [rsp+0h] [rbp-400h] sub_410390("Any last words?"); sub_4498A0(0, &buf, 0x7D0uLL); return sub_40F710((unsigned __int64)"This will be the last thing that you say: %s\n"); } BOF가 터지는게 보인다. 이 바이너리는 Dynamic linkingdynamically linked이 아니라 staticall..

보호기법은 Full RELRO, Canary, NX가 켜져있다. 바이너리를 분석해보자. 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 37 38 39 40 41 42 43 int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax unsigned __int8 v4; // [rsp+6h] [rbp-6Ah] unsigned __int8 i; // [rsp+7h] [rbp-69h] char *format; // [rsp+8h] [rbp-68h] char v7[80]; // [rsp+10h..

바이너리의 보호기법은 Partial RELRO, Canary, NX가 걸려있다. 바이너리를 분석해보자. 먼저 main을 보면 func01() func02(&v4, 0x40) func03(&v4) 순으로 작동하는 것을 알 수 있다. func01()은 별거 없고 func02()를 보자 간단하다. fgets함수를 사용해서 a1에 a2길이 만큼 입력을 받는다. a1과 a2는 각각 a1 --> v4 // [rbp - 0x50] a2 --> 0x40 이라서 overflow는 발생하지 않는다. 다음 func03() FSB가 터진다. 맨 처음 __stack_chk_fail를 호출해서 loop를 도는 방법을 생각했지만 overflow가 없기 때문에 다른 방법을 찾아야 했다. 그래서 puts의 got를 바꿨다. ( 전에 ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.

예전에 이 바이너리를 봤었는데.. 그 때 당시에는 heap에 대해 몰랐기 때문에 house of orange 기법도 몰랐고 그냥 넘겼던 문제였다. 근데 이번에 house of orange 기법을 좀 공부하고 싶어서 다시 꺼냈다.. 차근차근 exploit 해보자. 먼저 보호기법이다. main을 보면 다음과 같다. 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 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // [rsp+4h] [rbp-Ch] unsigned __int64 v4; // [rsp+8h] [rbp-..
보호되어 있는 글입니다.