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

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을 주어..

Mitigation Vulnerability Analysis IDA disassembler를 이용해 어떤 바이너리 파일인지 확인해보자 전체적으로 살펴보면 case 5에 read함수로 0x400만큼 입력받을 수 있다는 점에서 BOF를 발생시킬 수 있어 보인다 NX enabled이고 문제 제목이 RTL_World이니 만큼 RTL을 염두에 두고 RTL을 위한 재료들을 구해보자 case 3와 case 4를 보면 v6와 s1의 주소 값을 얻을 수 있음 v6 = system함수 s1 = "/bin/sh" 문자열 RTL 공격을 시행할 수 있는 재료들이 다 주어짐 위의 값들을 얻기 위해서는 gold가 필요하므로 case 2의 Get_Money함수의 4를 입력해 random한 gold 획득 1. main함수에서 획득할 ..

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..

Mitigation Vulnerability Analysis 바이너리 파일 실행 Hello, Do you know j0n9hyun? j0nhyun is 어떤 값 입력 Nah... 2번 과정에서 hex값이 0x56555909인걸로 보아 PIE가 적용된 welcome의 주소라는 사실을 알 수 있음 3번 과정 scanf( "%s", [ebp-0x12] ) 입력 값 제한이 없다는 점을 이용하여 BOF를 일으켜야 할 듯 싶음 바이너리 파일에 flag를 출력하는 j0n9hyun이라는 함수가 존재 PIE가 걸려 있지만 2번과정에서 얻은 welcome의 offset과 j0n9hyun의 offset을 이용하여 j0n9hyun주소 획득 가능 Code base = welcome - welcome_offset j0n9hyun..

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] = t..

Mitigation Vulnerability Analysis 바이너리 파일 실행 Data : 입력 값 어떤 값: 입력 값을 한 자씩 공백을 두고 출력 Again(y/n): y 입력 시 다시 1번과정으로 n 입력 시 프로그램 종료 2번 과정에서 보이는 어떤 값에 대해서 알아보면 1번 과정에서 입력 받았던 [ebp-0x88] 공간이 2번 과정에서 주소 값으로 주어짐 [rbp-0x88]영역의 주소 값을 확인 가능하다 또한 처음 scanf함수를 통해 입력을 받는 공간 역시 [rbp-0x88]이다 알 수 있는 사실을 정리해 보면 다음과 같다 [rbp-0x88]이 되는 이 곳의 주소를 알 수 있다 [rbp-0x88]이 되는 이 곳에 입력 값을 줄 수 있다 또한 scanf함수의 경우 입력 값에 제한을 두지 않기 때문..

Mitigation Vulnerability Analysis 바이너리 파일 실행 삐빅- 자살방지 문제입니다. buf: 어떤 값 입력을 받고 종료 위와 같은 순서로 진행 됨 buf 옆에 어떤 값이 무엇인지 gdb를 통해 main함수를 살펴보면 [rbp-0x6d30]영역의 주소 값임을 확인 가능하다 또한 아래 gets함수를 통해 입력을 받는 공간 역시 [rbp-0x6d30]이다 알 수 있는 사실을 정리해 보면 다음과 같다 [rbp-0x6d30]이 되는 이 곳의 주소를 알 수 있다 [rbp-0x6d30]이 되는 이 곳에 입력 값을 줄 수 있다 또한 gets함수의 경우 입력 값에 제한을 두지 않기 때문에 canary가 없는 이 바이너리 파일의 ret영역을 overwrite 가능 위의 사실을 토대로 NX disa..

Mitigation Vulnerability Analysis main함수를 보면 scanf를 통해 [rbp-0x110]영역에 문자열을 입력 받음 No stack canary → scanf함수의 경우 입력 값을 제한하지 않기 때문에 ret영역을 overwrite할 수 있음 ret 영역을 overwrite할 함수가 바이너리 파일 안에 들어 있음 callMeMaybe라는 함수의 경우 execve를 가지고 /bin/sh 명령 수행 → shell을 얻을 수 있음 Exploit code Result