일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- shellcode
- _IO_FILE Arbitrary Address Read
- malware
- Dynamic Analysis
- srop
- master canary
- HackCTF
- seccomp
- Reversing
- H4CKING GAME
- Lazenca
- tcache
- __environ
- heap feng shui
- _IO_FILE Arbitrary Address Write
- UAF
- 나뭇잎 책
- DreamHack
- vtable
- GOT overwrite
- ROP
- RTL
- Android
- _IO_FILE
- heap exploit
- heap
- DFC 2022
- K-shield Junior
- DFB
- BOF
Archives
- Today
- Total
Studying Security
[HackCTF] pwnable: Offset 풀이 본문
728x90
반응형
Mitigation
Vulnerability Analysis
main함수 → gets를 통해 [ebp-0x27]에 입력을 받고 select_func의 인자로 전달
select_func 함수
[ebp+0x8] (main함수에서 gets를 통해 입력 받았던 입력 값)을 [ebp-0x2a]에 0x1f size만큼 복사
[ebp-0x2a]와 [ebx-0x1675]를 비교 → True: [ebx-0x1864]의 함수 call = one함수
False: 초기에 설정된 [ebp-0x190b]의 함수 call = two함수
여기까지 살펴보면 [ebp-0x2a]에 0x1f size만큼 복사할 때
[ebp-0xc]의 1byte를 덮어쓸 수 있다는 사실을 알 수 있음
초기 [ebp-0xc] = [ebp-0x190b] = two 함수
- [ebp-0xc]의 1byte를 덮어쓸 수 있음
- two함수와 print_flag함수가 1byte만 다름
Little Endian이기 때문에 1byte를 바꿔서 two함수를 print_flag함수로 바꿀 수 있음
※ PIE가 설정되어 있어서 code영역의 주소가 바뀌지만 하위 12bit는 안 바뀌는 것을 볼 수 있음
Exploit code
Result
반응형
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] pwnable: Yes or no 풀이 (0) | 2022.04.09 |
---|---|
[HackCTF] pwnable: BOF_PIE 풀이 (0) | 2022.04.08 |
[HackCTF] pwnable: Simple_Overflow_ver_2 풀이 (0) | 2022.04.08 |
[HackCTF] pwnable: x64 Simple_size_BOF 풀이 (0) | 2022.04.08 |
[HackCTF] pwnable: x64 Buffer Overflow 풀이 (0) | 2022.04.08 |
Comments