[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를 벗어난 것을 확인했으므로, 여기에 쉘코드를 이어붙였다. 쉘을 얻은 모습을 볼 수 있다.




원본에도 성공했다.