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개
이렇게 쉘을 얻었다.
'[Wargame Write-up] > Lord of Buffer Overflow' 카테고리의 다른 글
[LoB RedHat 6.2] LEVEL 5: orc -> wolfman (0) | 2016.10.03 |
---|---|
[LoB RedHat 6.2] LEVEL 4: goblin -> orc (0) | 2016.10.02 |
[LoB RedHat 6.2] LEVEL 3: cobolt -> goblin (0) | 2016.10.02 |
[LoB RedHat 6.2] LEVEL 1: gate -> gremlin (0) | 2016.09.28 |
[LoB RedHat 6.2] 환경 구성 (0) | 2016.09.19 |