본문 바로가기

[Wargame Write-up]/Lord of Buffer Overflow

[LoB RedHat 6.2] LEVEL 8: orge -> troll

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] 주소를 주어 공격에 성공했다.