본문 바로가기

[LoB RedHat 6.2] LEVEL 4: goblin -> orc LEVEL 4: egghunter egghunter라고 하여, 환경변수를 이용한 공격이 막혔다. 또한 argv[1]의 마지막 글자는 \xbf이어야 한다. buffer size가 늘어나기도 했지만, 우리에겐 argv[2]가 있다. main 함수가 꽤 길어졌다. 이번에도 strcpy 호출 직후인 0x80485c2에 breakpoint를 걸고 payload를 작성해보자. buffer, sfp 총 44바이트를 A로 덮고, ret는 \xbf 4개로 덮는 argv[1]와 B 48개로 이루어진 argv[2]를 인자로 세팅하고 실행한다. 스택을 보면, 아래쪽에 입력한 payload가 위치한다. argv[2]에서 NOP sled를 태울 것이니, 적당히 ret 주소를 0xbffffc30으로 설정하자. 아래 이미지에서 위의.. 더보기
[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도 추가했다. 공격에 .. 더보기