일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- _IO_FILE Arbitrary Address Read
- Dynamic Analysis
- BOF
- K-shield Junior
- heap
- ROP
- srop
- 나뭇잎 책
- DreamHack
- Reversing
- heap exploit
- DFB
- shellcode
- Lazenca
- vtable
- HackCTF
- master canary
- H4CKING GAME
- UAF
- GOT overwrite
- _IO_FILE
- heap feng shui
- _IO_FILE Arbitrary Address Write
- tcache
- seccomp
- DFC 2022
- malware
- __environ
- Android
- RTL
- Today
- Total
목록HackCTF (28)
Studying Security

Mitigation Vulnerability Analysis IDA disassembler를 이용해 main함수를 보자 심지어 gift라는 함수로 system@plt까지 주어졌다 이제 필요한건 "/bin/sh"이라는 문자열인데 이를 어떻게 얻을 수 있을까? 여기서 활용할 수 있는게 .dynstr 영역이다 동적 linking을 위한 함수의 이름 정보들이 들어있는 공간이다. IDA에서 해당 영역을 찾아보니 위와 같은 함수 이름들이 존재하는 것을 확인할 수 있다. 여기서 보면 'fflush'라는 문자열이 보이는데 fflush에서 뒤의 두글자 sh부분만을 이용하여 sh문자열을 획득할 수 있다 결론적으로 sh이라는 문자열은 0x4003bf에 위치하므로 exploit할 수 있는 모든 값들을 획득! 이를 토대로 ex..

Mitigation Vulnerability Analysis IDA disassembler를 이용해 main함수를 살펴보자 get_tier함수가 v6 = 50이라는 인자를 받는걸 보니 이걸로 tier가 결정되는 것 같다 get_tier함수를 들어가 보니 역시 인자에 따라 tier가 나눠지고 tier마다 다른 return값을 되돌려주는 걸 확인할 수 있음 그럼 이 결과 값을 어디다가 쓸까? 바이너리에 들어있는 함수를 살펴보니 play_game이라는 함수가 존재했다 보면 4라는 인자가 Challenger를 의미하고 이때 우리가 원하는 결과 값인 flag를 출력하는 system함수가 들어있다. 이제 해야할 일을 살펴보면 아래와 같이 정리해 볼 수 있다. get_tier함수에 75보다 큰 인자를 주고 chall..

Mitigation Vulnerability Analysis gdb를 통해 rop 바이너리 파일을 살펴보자 vulnerable_function으로 들어가면 read함수가 보인다. read함수로 [ebp-0x88]영역에 값을 입력해 BOF 공격을 수행할 수 있다. rop문제인 만큼 rop를 위해 필요한 함수와 문자열 주소들을 구하기 위한 payload를 작성해보자 ROP payload 구성 write( 1, read_got, 8 ) → read 주소를 획득 → exploit에 필요한 주소 획득 library_base_address = read 주소 - read_offset system = library_base_address + system_offset read( 0, bss, 10 ) → "/bin/sh..

Mitigation Vulnerability Analysis 바이너리 파일 실행 흐름 Hey guyssssssss here you are: 어떤 값1 어떤 값2 입력 값을 받음 받은 입력 값을 출력 입력 값을 또 받음 이제 gdb를 통해 자세히 알아보자 1번 과정에서 어떤 값1, 2가 무엇을 의미하는지 살펴보면 어떤 값1 = 0x8049940 = binsh라는데 아무 값도 쓰여 있지 않다 어떤 값2 = DWORD PTR [ebx-0x10] = system함수의 주소 2번 과정 fgets를 통해 [ebp-0x84]에 0x80size 만큼을 입력 받고 있음 (ret영역까지 overwrite할 수 없음) 3번 과정 2번 과정에서 입력 받았던 값을 출력 (Format String Bug가 발생할 수 있음) 4번..

Mitigation Vulnerability Analysis lookatme 바이너리 파일의 경우 statistically linked 되어 있는 함수였다 IDA로 열어보니 여러 함수들이 파일에 올려져 있는 것을 확인할 수 있었다 import하고 있는 library파일도 없기 때문에 system함수나 execve함수를 사용할 수가 없음... 바이너리 파일안에 있는 함수를 뒤져봐야겠다 이 곳에 mprotect라는 함수가 존재하는데 manual을 찾아보니 설명에 changes the access protections for the calling process's memory pages라고 나온다 이걸로 어떤 주소 범위의 access 권한을 변경할 수 있나보다 대신 addrss는 반드시 페이지 경계에 맞게 주..

Mitigation Vulnerability Analysis IDA disassembler를 이용해 main함수를 보자 Passcode를 입력받아 hashcode와 일치할 경우 core함수로 들어갈 수 있다 core함수에는 read가 존재하는데 이를 가지고 BOF공격을 통해 exploit할 수 있다 우선 hashcode를 통과하기 위한 값을 찾아보자 입력 값을 4byte씩 5개의 값으로 더한 값을 return함 이 return 값이 hashcode랑 같으면 통과 hashcode의 값이 0xc0d9b0a7이라는 사실을 확인했으므로 이를 위한 input값을 만들자 0x30362c29 0x30362c2a 0x30362c2a 0x30372c2a 0x00000000 이렇게 4byte씩 나눠 전달하면 모두 합친 값..

Mitigation Vulnerability Analysis gdb를 가지고 main함수를 보자 getenv 함수로 [rbp-0x410]에 입력을 받고 있음 입력 값에 제한이 없으므로 BOF를 일으킬 수 있겠다. 바이너리 파일 안에 shell을 따올 수 있는 함수까지 존재 ret영역을 spawn_shell의 주소로 overwrite해주면 shell을 따올 수 있을 것이다. Exploit code from pwn import * p = remote("ctf.j0n9hyun.xyz",3013) # get env p.recvuntil("? ") spawn_shell = 0x400897 payload = "A"*0x418 + p64(spawn_shell) p.sendline(payload) p.interacti..

Mitigation Vulnerability Analysis ※실행 과정 시 내용 입력 시의 저자 입력 점수 계산 부족할 경우 다시 1번과정으로 gdb를 가지고 main함수를 보자 얻은 점수를 가지고 0xf4240 = 1000000인지 비교해서 일치하면 reward함수로 진행시키고 있다. reward함수는 우리가 원하는 flag.txt를 출력해주기 때문에 분기만 통과하면 문제를 풀 수 있겠다. 그렇다면 점수를 어떻게 계산하는지 rate_poem 함수를 살펴보자 ESPR, eat, sleep, pwn, repeat, CTF, capture, flag문자열의 존재마다 +100점을 부여하고 있다 1,000,000점이 필요하기 때문에 시에 저기의 속하는 단어 10000개를 써넣으면 되지 않을까?? 1. 시의 입..