LEVEL 8: check argc
LEVEL 7에서 다룬 방법으로 쉘을 바꾸고 시작하자.
코드를 보면, argv[0]의 길이 제한이 풀리고 마지막에 argv[1]을 초기화하는 부분이 추가되었다.
이제 argv[1]부터는 다 초기화되니, argv[2]와도 작별이다.
즉, 사용할 수 있는 부분은 argv[0] 뿐인 것 같다.
쉘코드 자체를 파일 이름으로 심볼릭 링크를 걸어야 하는데, 문제가 있다. 쉘코드에 "/"(\x2f)가 포함되어 있어, 제대로 링크가 걸리지 않을 것이기 때문이다.
그래서 아래처럼 '/'가 없는 쉘코드를 준비했다.
argv[0]의 주소를 알아보기 위해 소스 코드를 복사해 마지막에 argv[0]의 주소를 출력하는 코드를 삽입했다.
컴파일 시, 만약을 위해 실제 사용할 공격 코드의 길이로 파일명을 주었다.
실행해보니 argv[0]의 주소로 0xbffffb01이 나왔고,
원본 파일에 NOP 65개와 쉘코드(35바이트) 총 100바이트 이름으로 심볼릭 링크를 건 뒤,
argv[1]에 A 44개, argv[0] 주소를 주어 공격에 성공했다.
'[Wargame Write-up] > Lord of Buffer Overflow' 카테고리의 다른 글
[LoB RedHat 6.2] LEVEL 10: vampire -> skeleton (0) | 2016.10.18 |
---|---|
[LoB RedHat 6.2] LEVEL 9: troll -> vampire (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 |
[LoB RedHat 6.2] LEVEL 5: orc -> wolfman (0) | 2016.10.03 |