본문 바로가기

[Wargame Write-up]/Lord of Buffer Overflow

[LoB RedHat 6.2] LEVEL 3: cobolt -> goblin

LEVEL 3: small buffer + stdin


아래 코드를 보면, 여전히 버퍼는 16바이트이지만 strcpy가 아닌 gets 함수를 이용한다.




이번엔 환경변수를 이용해보자.


bash2로 실행한 뒤, COBOLT라는 이름으로 쉘코드를 값으로 한 환경변수를 세팅했다.




들어갔는지 확인하기 위해 env 명령어를 입력하면 된다. 맨 아래에 위치하고 있다.




이제 이 환경변수의 주소를 알아내기 위해 다음과 같이 코드를 작성한 후 실행해보자.


0xbfffffce라는 주소가 나온다.




buffer 16바이트, sfp 4바이트를 NOP으로 덮어버리고, ret 자리에 COBOLT 환경변수 주소를 넣어주자.


gets 함수를 쓰고 있으니, 표준 입력을 사용해 password를 보기 위해, 뒤에 cat도 추가했다.


공격에 성공하면 사용자의 입력을 기다리는 상태에 있을텐데, my-pass 명령어로 다음 계정의 패스워드를 확인해주면 된다.