[HackCTF] Basic_FSB
2021. 3. 19. 21:46
Wargame/HackCTF
1. 문제 의도 파악하기 버퍼 s에 입력을 받은 뒤, snprintf 함수를 통해 format에 s를 저장한다. 그런데 이때, 서식지정자를 지정하지 않고 바로 s를 저장하기에 FSB 취약점이 발생한다. 그렇다면 이걸로 뭘 할 수 있을까? 바로 FSB 취약점을 이용해 특정 메모리 주소에 뭔가를 쓰거나 읽을 수 있다. 그리고 우리의 목표는 아마 flag 함수를 실행 시키는 것이다. 따라서 FSB를 이용해 특정 메모리 주소에 flag 함수 주소를 overwrite 시켜 flag 함수를 실행시키면 될 것이다. 이때 snprintf 함수 다음에 printf가 실행된다. 그래서 printf_got에 "%n"을 이용하여 flag 함수 주소를 overwrite 시키면 될 것이다. 그렇다면 우선 입력값이 몇번째 포맷 스..
[HackCTF] Basic_Bof #2
2021. 3. 19. 21:40
Wargame/HackCTF
1. 문제 의도 파악하기 v5는 함수 포인터로, sup 함수의 메모리 주소가 담겨있다. sup 함수는 s를 출력해 반환하는 함수이다. 그리고 gets 함수로 입력을 받아 버퍼 s에 저장하는데, 버퍼의 크기인 128 byte보다 큰 133만큼 입력을 받아 bof를 발생시킬 수 있을 것으로 보인다. 다만, 133byte 로는 RET까지 가지 못하므로 return address를 변경하는 것은 아닐 듯 싶다. 이때 함수들을 살펴보니 /bin/dash를 실행하는 shell 함수가 존재한다. 그래서 아마 버퍼 크기인 128만큼을 dummy 값으로 채우고, 그 뒤에 있는 v5에 shell의 주소를 넣으면 될 것으로 보인다. 즉, payload는 다음과 같을 것이다. payload = "A"*128 + shell 함..
[HackCTF] Basic_Bof - Simple_Overflow_ver_2
2021. 3. 13. 23:57
Wargame/HackCTF
1. 문제 1. 먼저 데이터 입력을 받는다. 2. buf 의 주소를 출력하고 입력받은 데이터도 출력한다. 3. 다시 실행할 건지 묻는다. 4. y를 입력하면 다시 데이터를 입력받게 되고, 동일한 주소를 출력한다. 5. 프로그램을 종료하고 다시 실행시키면 버퍼의 주소가 다르게 나온다. 2. 문제 의도 파악하기 scanf 입력 시 입력값 검증을 하지 않기에 bof를 일으켜 RET를 변경하면 될 것 같다. 즉 payload는 다음과 같을 것이다. Payload = "Shell code" + dummy 값 + buf의 주소 그리고 프로그램이 실행될 때 buf의 주소가 leak이 되기 때문에 exploit 코드에서 구해서 전달하면 될 것이다. 그렇다면 이제 offset을 구해서 중간에 그만큼의 dummy 값을 주..
[HackCTF] Basic_Bof - 내 버퍼가 흘러넘친다!!!
2021. 3. 11. 15:36
Wargame/HackCTF
1. 문제 의도 파악 지금 read와 gets 함수로 입력을 두 번 받고 있다. 그리고 gets 함수의 경우, 입력값 검증을 하지 않기에 buffer 크기인 20보다 더 크게 넣어 return address를 바꿀 수 있을 것이다. 그래서 쉘 코드를 어디에 넣을까 생각하다가, read 함수로 입력을 받는 name에 쉘 코드를 삽입하고 버퍼 s에 더미값과 name의 시작 주소를 넣어 쉘코드를 실행해보려 한다. 2. offset 구하기 name의 경우 50byte만큼 입력을 받는다. 따라서 쉘코드를 넣고 그 앞 뒤에 nop을 채워주면 될 것으로 생각된다. 그런데, 이때 name은 bss 영역이기 때문에 ASLR의 영향을 받지 않는다. 따라서 nop을 주지 않고, 쉘코드만 채워도 된다는 결론이 나온다. 그리고..