본문 바로가기

[Wargame Write-up]/Lord of Buffer Overflow

[LoB RedHat 6.2] LEVEL 2: gremlin -> cobolt

LEVEL 2: small buffer


아래 코드를 보면, buffer가 256바이트에서 16바이트로 현저히 줄어들었다.


준비한 쉘코드는 25바이트라 넣기도 벅차다.


그래서 생각한 전략은 아무런 제약이 없는 argv[2]를 이용하는 것이다.




bash2로 실행한 뒤 복사본을 만들고 디버거로 분석해보자.


역시 strcpy에 취약점이 있으므로 호출 직후인 0x8048465에 breakpoint를 건다.




[16-byte buffer + 4-byte sfp + 4-byte ret]을 고려해 24바이트 argv[1]에 넣어 실행한 후, Stack의 상태이다.




이후 argv[2]의 주소를 알아보기 위해 C 100개를 넣은 argv[2]로 재실행했다.


NOP sled를 이용할 것이니 중간에 적당히 0xbffffb30부터 출발하도록 지정해주자.




Payload는 다음과 같다.


argv[1]: buffer, sfp 총 20바이트를 A로 덮고, ret 주소에 아까 지정한 0xbffffb30을 little-endian으로 삽입

argv[2]: NOP 50개 + 쉘코드(25바이트) + NOP 25개


이렇게 쉘을 얻었다.