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

보호기법은 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..

보호기법은 다음과 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..

한양대학교 Open CTF이길래 재미삼아 도전해 봤다. 아름답다. 제공해준 libc파일이 2.27이라서 우분투 18.04에서 풀었다. 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 int __cdecl main(int argc, const char **argv, const char **envp) { char *v3; // rdx int v5; // [rsp+8h] [rbp-118h] int buf; // [rsp+Ch] [rbp-114h] char v7; // [rsp+10h] [rb..

오랜만에 write-up을 쓰고자 한다. 오늘은 2019 facebook ctf - otp-server인데 먼저 보호기법부터 보자. 아름답다. 그럼 바로 바이너리를 분석하러 가보자. main함수는 다음과 같이 생겼는데 하나씩 살펴보도록 하자. 1. sub_9E8 /dev/urandom에서 랜덤한 값을 꺼내온 다는 것 말고 중요한 점은 보이지 않는다. sub_9E8속에 sub_9BA를 보면 설명을 해준다. cipher( (4 byte nonce | message | 4 byte nonce) )방식이라고 한다. 2. sub_C4A ( 취약점 발생 함수 ) main함수에서 v4인자가 넘어온다. IDA에서 함수의 이름을 내 입맛 대로 바꿔버린점 주의. 여기서는 두가지로 나뉘게 되는데 1번 -> Set key와 ..

64bit 바이너리에 NX만 활성화 되어있다. 가장먼저 main()함수에서 bof취약점이 존재한다. 그리고 bof가 일어나는 함수 climax()를 준다. 따라서 익스플로잇 과정은 다음과 같다. 1. ret에 read_leave_ret을 넣어 bss로 돌린다. 2. ROP를 통해 가젯들과 주소를 구한다. 3. RTL로 쉘을 딴다. 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 44 45 46 47 48 49 50 51 52 53 54 55 from pwn import * p = process("./storytime") write_plt =..

64bit 바이너리에 NX만 활성화 되어있다. Lite와 달리 system의 주소는 주어지지 않고 /bin/sh문자열만 존재한다. 이때 gets(&v1);에서 bof가 발생하므로 ROP를 통해 system주소를 구하고 쉘을 따면 된다. 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 44 from pwn import * p = process('./combo-chain') bin_sh = 0x0000000000402008 + len('Dude you hear about that new game called ') gets_leave_ret = ..