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

Mitigation Vulnerability Analysis vuln함수를 살펴보면 1. Get PIE base address 처음 initialize의 주소를 출력하고 있는데 이를 이용하여 PIE가 걸려 있는 해당 바이너리 파일을 exploit할 수 있습니다. PIE_base_address = initialize - initialize_offset 2. Canary Leak 이어서 buf의 size보다 큰 입력을 받고 이를 출력하고 있으므로 canary의 1byte 값(\x00)을 덮어써 canary 값을 읽어 낼 수 있습니다. 3. ROP PIE_base_address를 고려하여 gadget을 구한 후 puts로 read의 GOT에 있는 주소값을 읽고 main으로 돌아가도록 흐름을 변경하는 ROP p..

Mitigation Vulnerability Analysis read와 gets를 통해 입력을 받는데 gets의 경우 입력 size에 대한 제한이 없기 때문에 BOF를 유발할 수 있습니다. 대신 canary가 [rbp-0x8]영역에 존재하기 때문에 이에 대한 검사를 통과해야합니다. Canary Leak canary의 구조는 \x00 ?? ?? ?? ?? ?? ?? ?? 이렇게 생긴 랜덤한 값이기 때문에 첫 번째 read에서 0x119 size를 입력받아 canary의 1byte인 \x00 임의의 값으로 덮어쓸 수 있습니다. 결국 printf를 통해 [rbp-0x120]의 값을 출력할 때 canary의 1byte가 \x00가 아니라면 canary의 값까지 이어서 출력하도록 유도할 수 있습니다. canary..

Mitigation Vulnerability Analysis IDA disassembler를 가지고 main함수를 살펴보자 fgets함수가 존재하고 이를 이용해 BOF 공격이 가능하다. Unexploitable_2 문제와는 다르게 gift 함수에도 fwrite를 제공하고 있음 이를 가지고 fwrite를 이용해 libc leak를 수행 → library base address를 구하고 offset을 가지고 system과 "/bin/sh"주소를 획득하면 될 것 같았다. 필요한 ROPgadget을 모아보자 fwrite의 경우 인자가 4개이기 때문에 RDI, RSI, RDX, RCX 레지스터에 값을 전달할 수 있어야한다. pop rdi와 pop rsi는 존재하는데 나머지 gadget이 없기 때문에 return ..

Mitigation Vulnerability Analysis IDA disassembler를 가지고 main함수를 살펴보자 src([rbp-0x80])에 입력을 받고 src[0x31]까지는 0x1c와 xor를 수행 strncpy( &dest, src, 0x39) 1~3과정을 한번 더 수행할 것인지 아닌지 Yes/No 입력을 통해 결정 Exploit 과정 Canary Leak Libc Leak Exploit 1. Canary Leak canary가 존재하기 때문에 해당 canary 값을 변조하지 않고 BOF를 수행해야 한다. stack을 대충 그려보면 위와 같은데 canary 값의 첫 1byte는 \x00이므로 만약 dest의 부분을 0x39 size만큼 출력 가능한 값으로 채워진다면 printf("Enc..

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 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 IDA 디스어셈블러를 이용해 보면 분기들이 보임 중간에 보이는 gets함수가 취약한 부분이기 때문에 분기를 통과해 gets함수까지 도달하는게 첫 번째 할일이다 gets함수로 분기하기 위해 어떤 값을 입력해야 하는지 gdb를 이용해 찾아보니 9830400임을 확인할 수 있음 이제 gets함수로 BOF ROP 사용 (문제에서 library so파일 제공) puts함수로 puts함수의 주소 구하기 library_base_address = puts함수의 주소 - puts_offset system = library_base_address + system_offset "/bin/sh"문자열 = library_base_address + "/bin/sh"_o..