[Wargame Write-up]/Lord of Buffer Overflow
[LoB RedHat 6.2] LEVEL 9: troll -> vampire
Kevin S.
2016. 10. 8. 12:46
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를 벗어난 것을 확인했으므로, 여기에 쉘코드를 이어붙였다. 쉘을 얻은 모습을 볼 수 있다.
원본에도 성공했다.