[Dreamhack] linked-list
[Dreamhack] linked-list
문제 링크
https://dreamhack.io/wargame/challenges/198
문제 설명
이제 막 자료구조를 배운 드림이는 단일 linked list로 사람의 개인정보를 저장하는 프로그램을 만들었어요. 그리고 자랑을 하고싶어서 자신이 만든 프로그램을 서버에서 돌려서 누구나 사용해볼 수 있도록 했습니다. 그런데 코드에 오타가 있네요…? 드림이는 아직 오타가 난줄 모르고 있습니다. 드림이가 알아채기 전에 취약점을 찾고 flag를 읽으세요.
문제 분석
- 이름을 입력받고 출력하는 과정에서 Format String Bug가 발생한다. 이를 이용해서 libc나 stack canary, stack 주소 등을 leak할 수 있다.
- 연결 리스트를 구성하는 구조체는 다음과 같은 형태를 가지고 있다.
1 2 3 4 5 6 7
struct USER { char number[8]; char name[16]; char phone[16]; char etc[256]; char next[8]; };
- 하지만 edit 함수로 특정 연결 리스트 항목을 수정할 때, etc에
0x108
바이트만큼 입력할 수 있으므로 특정 항목의next
포인터를 조작할 수 있다. - 이를 이용하여 aaw(arbitrary address write)를 수행할 수 있다.
- 하지만 edit 함수로 특정 연결 리스트 항목을 수정할 때, etc에
새롭게 알게된 점
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.