idx의 범위 제한 로직이 없기 때문에 해당 idx에 큰값을 주어서 name쪽으로 넘어가면 될것이라 생각
- 일단 처음에 가장 중요한 name, command의 시작주소를 알아보자
- name 시작주소: 0x804a0ac
- command 시작주소: 0x804a060
- scanf에서 eax를 입력받는걸 알 수 있음
- eax*4 + 0x804a060 → 즉 eax는 idx값이고, 현재 32비트이기 때문에 4바이트씩 증가 되면서 인덱스를 맞추는 것으로 볼 수 있음
- 그러면 name의 주소에서 command의 주소를 빼면 거리차이가 있을 거고 4바이트로 나누게 되면 idx를 추측할 수 있음
- 거리차이: 0x4C → 10진수: 76
- 76/4 = 19
- 즉 command의 19번째가 name의 시작임
- 익스플로잇 짜는 과정에서 name의 시작주소를 가리키게 하면 될거라 생각했는데, 들어가는 argument를 보니까 “/bin”만 들어감
- 정확한 이유에 대해서 아직 찾지 못함
- 그래서 system 함수 인자에 name의 다음주소 + “/bin/sh”를 주어서 system 함수 호출 시 name+4주소를 가르키게 해서 /bin/sh가 실행되게함
- 왜 name주소를 가리키게 했을때 안되는지는 의문.
- 익스 코드는 비교적 간단함
'시스템 해킹 > pwnable' 카테고리의 다른 글
[pwnable.kr] passcode (0) | 2024.05.09 |
---|---|
[pwnable.kr] dragon (0) | 2023.07.07 |
[pwnable.kr] Collision (0) | 2023.05.21 |
[pwnable.kr] fd (0) | 2023.05.21 |
[DreamHack] SSP01 (0) | 2023.05.13 |