LEVEL 9: check 0xbfff
이번엔 제약사항이 많이 풀렸다.
우선 정리해보면
1. argc >= 2 (argv[2]를 쓸 수 있다!)
2. argv[1][47] = \xbf
3. argv[1][46] != \xff
를 모두 만족해야 한다.
argv[2]를 길게 구성해서 0xbffe, 0xbffd 등이 되도록 만들어주면 될 것 같다.
(bash2로 쉘 바꾸는건 잊지 말자)
슬슬 gdb로 확인하는 게 귀찮아져서 소스 코드를 수정하여 알아보도록 하자.
argv[0], argv[1], argv[2]의 주소를 알아보기 위해 코드 맨 마지막에 아래처럼 추가했다.
컴파일 후 argv[1]는 조건에 맞게 써주고, argv[2]는 많이 넣어 bfff를 벗어나도록 했다.
A가 10만 개, 10개일 때의 인자들의 주소이다.
10만개일 때 bfff를 벗어난 것을 확인했으므로, 여기에 쉘코드를 이어붙였다. 쉘을 얻은 모습을 볼 수 있다.
원본에도 성공했다.
'[Wargame Write-up] > Lord of Buffer Overflow' 카테고리의 다른 글
| [LoB RedHat 6.2] LEVEL 11: skeleton -> golem (0) | 2016.10.18 |
|---|---|
| [LoB RedHat 6.2] LEVEL 10: vampire -> skeleton (0) | 2016.10.18 |
| [LoB RedHat 6.2] LEVEL 8: orge -> troll (0) | 2016.10.08 |
| [LoB RedHat 6.2] LEVEL 7: darkelf -> orge (0) | 2016.10.08 |
| [LoB RedHat 6.2] LEVEL 6: wolfman -> darkelf (0) | 2016.10.04 |