문제
코드 분석
[22] read_flag() 함수를 통해 플래그를 얻을 수 있다.
[28] buf의 크기 = 128byte
[32] 취약한 *gets 함수 사용
*gets : 주어진 공간의 길이와 상관없이 사용자가 입력한 만큼의 값이 메모리에 들어간다.
(버퍼 크기보다 더 많이 입력 가능)
문제 풀이
1. read_flag()
- info func 명령어로 함수(read_flag())의 주소값을 알아낸다.
read_flag()의 주소값 : 0x080485b9
2. 프로그램의 취약점인 *버퍼 오버플로우를 이용하여 ret로 함수(read_flag())를 실행
*버퍼 오버플로우 : 할당된 메모리 공간을 초과하게 만들어서 악성코드를 실행하거나 비정상적으로 종료하게 만든다.
- 메모리 구조 : buf(128) | sfp(4) | ret(4)
- buf(128) + sfp(4) 부분에 문자열을 채워주고, ret에 함수 주소(0x080485b9)를 넣어 실행시키면 플래그가 나온다.
실행 결과
'워게임 > 드림핵' 카테고리의 다른 글
64se64 문제 풀이 (0) | 2024.01.07 |
---|---|
Exercise: SSH 문제 풀이 (0) | 2023.12.22 |
Exercise: Docker 문제 풀이 (0) | 2023.11.09 |
Return Address Overwrite 문제 풀이 (0) | 2022.12.30 |
welcome 문제 풀이 (0) | 2022.12.09 |
댓글