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

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. 시의 입..

gdb C++ 함수명 깨짐현상 해결 set print asm-demangle on Mitigation Vulnerability Analysis main함수 내의 vuln함수를 살펴보자 fgets를 가지고 입력 값을 받고 어떤 과정을 거쳐 v0의 값을 s에 복사해 이를 출력하는 함수이다 하지만 fgets에 주어진 size가지고는 BOF를 발생시킬 수 없기 때문에 어떻게 exploit할지 중간과정을 살펴봐야겠다 중간에 replace함수 존재 인자로 input값과 "I"라는 문자열이 전달되기 때문에 이와 관련해 replace가 일어나는게 아닐까 확인해 볼 수 있음 실행해 I값을 전달해보니 I가 you로 replace되는 것을 확인 따라서 이를 이용해 [ebp-0x3c]에 0x20 size내의 input을 주어..